Есть консольный скрипт. Он постоянон запущен. Висит себе и работает. Но иногда хочется прервать его работу и ввести что-то ему прямо в консоли. Как это можно сделать?
Ti Не совсем понял, куда имеено смотреть. На stdin? Так вопрос не в том, как ввести, а в том, как прервать.
Извиняюсь за свою безграмотность в терминологии, термин "демон" меня немного смущает. Если то не демон, но консольное приложение, работающее столь долго, сколько от него потребуется - т.е. до прерывания процесса пользователем.
Это корректное определение демона? http://prostohosting.com/infocenter/forAll/hosting_vocabulary.html Если да, то точно не демон, так как это CLI
Тоже вариант. Спасибо, в крайнем случае так и сделаю. Просто, когда у меня и так одна консоль висит, то зачем мне еще одна? Хочется не запускать еще что-то, а сказать как-то основному приложению, чтобы то почитало stdin. Т.е. тыркнуть в него чем-то, чтобы оно одуплилось. И чтобы вывод и ввод были в одном окне как история. Примерно вот так: PHP: <?php while (true) { doSemething(); printStatus(); $bInterruption = ...; if ($bInterruption) { echo "Да, сэр?\n"; $sCommand = fgets(STDIN, 1024); echo "Слушаюсь, сэр!\n"; doCommand($sCommand); echo "Готово, сэр!\n"; } } ?> Проблема в переменной $bInterruption. Как установить ее, не прилагая лишних усилий И желательно не запуская других приложений.
ЗЫ: Помню, в "сях" читал нажатую клавишу и по ней прерывался. Вот хотелось найти решение приблизительно такого уровня сложности
А в С - они есть? у консольного приложения? Оно просто считывает входной поток stdin - если есть команды - обрабатывает, нет - дальше крутится.... И PHP так же...
Есть, к примеру, в WinAPI функция: SHORT GetKeyState(int nVirtKey); Под юниксом, наверное, тоже есть - не знаю, не разбирался. А под PHP я никогда не видел никаких функций для работы склавиатурой. А stdin и клавиатура - это не одно и тоже, как вы понимаете.
- это функция win a не С, как вы понимаете. stdin - это клавиатура, это стандартный входной поток. stout - это тоже не монитор.
По вызову freads(STDIN) приложение зависает и ждет окончания ввода, обозначаемого нажатием клавиши Enter
Горбунов Олег Что Вы мне пытаетесь объяснить? Вы меня учите, а на вопрос так и не ответили. Если знаете, как это сделать - прошу поделиться кодом. А чем отличается C от WinAPI и stdout от монитора, я тоже прекрасно понимаю. Вы пробовали читать из стандартного потока в консольном скрипте PHP так, чтобы не вызывать зависание?
Мы пытались обьяснить, что мы не особо поняли, что вам нужно. ) Вопрос изначально стоило поставить как Ну да это не важно.)) // Тоже ушел страдать stdin в PHP....
А мы вот как раз и пытались объяснить так, чтобы это стало понятно не только нам одним ))))) Так я специально не ставил вопрос таким образом, дабы не зацикливаться на stdin. Дело в том, что я и не пробовал делать это стдином, потому как подозревал о такой "проблеме", потому что std::in в С++ тоже останавливал выполнение. Теперь попробовал и убедился. Потому-то я и поставил впрос так как поставил, потому что не знаю: может в PHP есть какие-то средства или способы обработать нажатие кнопки или другой другого лего намека пользователя на то что ему хочется пообщатсья с приложением. Есть функция хорошая stream_set_timeout() - для STDIN она @ не работает :-(