Как проверить, открыт ли stdin без блокировки?

Мне нужна моя программа, написанная на чистом C, чтобы остановить выполнение, когда stdin закрыт.

В основном цикле программы выполняется неопределенная работа, и я не могу использовать блокирующие проверки (например,getc()) (данные не должны поступать на стандартный ввод данных - он остается открытым в течение неизвестного времени).

Я намереваюсь использовать описанную функциональность при реализации сетевого демона, размещенного в inetd, xinetd или их аналогах - он должен выдавать данные на стандартный вывод, пока соединение остается открытым, и корректно завершать работу после его закрытия. Теперь моя программа убита хостингом, так как она выигралаt останавливаться после прекращения соединения.

Интересно, еслиfctntl() сO_NONBLOCK флаг, примененный к дескриптору стандартного ввода, позволит мне использоватьread() функционировать в неблокирующем режиме? Должен ли я использоватьselect() каким-то образом?

Постскриптум Данные не предполагаются, но могут поступать в стандартный ввод данных. Способ неблокирующего считывания мог бы стать ответом на этот вопрос.

Ответы на вопрос(5)

Ваш ответ на вопрос