Wie überprüfe ich, ob stdin noch geöffnet ist, ohne zu blockieren?

Ich muss mein Programm in reinem C schreiben, um die Ausführung zu stoppen, wenn stdin geschlossen ist.

Es wird auf unbestimmte Zeit im Hauptzyklus des Programms gearbeitet, und ich kann Blockierungsprüfungen (wie zgetc()) dort (es sollen keine Daten auf stdin ankommen - es bleibt nur für unbekannte Zeit geöffnet).

Ich beabsichtige, die beschriebene Funktionalität bei der Realisierung von Netzwerkdämonen zu verwenden, die in inetd, xinetd oder deren Analoga gehostet sind. Sie sollten Daten auf stdout ausgeben, während die Verbindung geöffnet bleibt, und die Arbeit ordnungsgemäß beenden, wenn sie geschlossen wird. Jetzt wird mein Programm vom Hosting-Service beendet, da es nach Beendigung der Verbindung nicht beendet wird.

ich frage mich, obfctntl() mitO_NONBLOCK Das auf stdin descriptor angewendete Flag würde mir die Verwendung erlaubenread() Funktion im nicht blockierenden Modus? Sollte ich es benutzenselect() irgendwie?

P.S. Die Daten werden nicht angenommen, könnten aber auf stdin ankommen. Eine Möglichkeit, das Auslesen nicht zu blockieren, wäre eine Antwort auf die Frage.

Antworten auf die Frage(5)

Ihre Antwort auf die Frage