Jak sprawdzić, czy stdin jest nadal otwarty bez blokowania?

Potrzebuję mojego programu napisanego w czystej C, aby zatrzymać wykonywanie, gdy stdin jest zamknięty.

W cyklu głównym programu jest wykonywana praca na czas nieokreślony i nie ma możliwości użycia kontroli blokowania (npgetc()) tam (żadne dane nie powinny dotrzeć na standardowe wejście - po prostu pozostaje otwarte przez nieznany czas).

Zamierzam wykorzystać opisaną funkcjonalność w realizacji demona sieciowego hostowanego w inetd, xinetd lub ich analogach - powinien on emitować dane na stdout, podczas gdy połączenie pozostaje otwarte i poprawnie zakończyć pracę po jej zamknięciu. Teraz mój program zostaje zabity przez usługę hostingową, ponieważ nie zatrzyma się po zakończeniu połączenia.

zastanawiam się czyfctntl() zO_NONBLOCK flaga zastosowana do deskryptora stdin pozwoli mi użyćread() funkcja w trybie nieblokującym? Powinienem użyćselect() jakoś?

P.S. Dane nie są przypuszczalne, ale mogą dotrzeć do standardowego wejścia. Sposób odczytu bez blokowania byłby odpowiedzią na pytanie.

questionAnswers(5)

yourAnswerToTheQuestion