Мне нужна моя программа, написанная на чистом C, чтобы остановить выполнение, когда стандартный ввод закрыт.
В основном цикле программы выполняется неопределенная работа, и я не могу использовать блокирующие проверки (например, getc()
) там (никакие данные не должны поступать на стандартный ввод - он просто остается открытым неизвестное время).
Я намерен использовать описанную функциональность в реализации сетевого демона, размещенного в inetd, xinetd или их аналогах - он должен выдавать данные на стандартный вывод при открытом соединении и корректно завершать работу при его закрытии. Теперь мою программу убивает хостинг, так как она не останавливается после разрыва соединения.
Интересно, позволит ли fctntl()
с флагом O_NONBLOCK
, примененным к дескриптору stdin, использовать функцию read()
в неблокирующем режиме? Должен ли я как-то использовать select()
?
P.S. Данные не предполагаются, но могут поступать на стандартный ввод. Способ неблокирующего считывания был бы ответом на вопрос.
poll
также именно то, что нужно OP, и его интерфейс немного проще, чемselect
при работе с небольшим фиксированным набором файловых дескрипторов. 20.10.2009