Gibt es eine Möglichkeit für einen Autor zu wissen, dass ein Leser sein Ende einer Named Pipe (oder Exited), ohne geschrieben hat, um es zu schreiben?Erkennen, wenn der Leser die Named Pipe (FIFO) schließt
Ich muss das wissen, weil die Anfangsdaten, die ich in die Pipe schreibe, unterschiedlich sind; Der Leser erwartet einen ersten Header, bevor der Rest der Daten kommt.
Momentan erkenne ich dies, wenn mein write()
mit EPIPE
ausfällt. Ich habe dann eine Flagge gesetzt, die sagt "nächstes Mal, sende den Header". Es ist jedoch möglich, dass der Leser das Rohr schließt und wieder öffnet, bevor ich irgendetwas geschrieben habe. In diesem Fall merke ich nie, was er getan hat, und sende nicht den Header, den er erwartet.
Gibt es irgendeine asynchrone Ereignisart, die hier helfen könnte? Ich sehe keine Signale gesendet werden.
Beachten Sie, dass ich keine Sprach-Tags eingefügt habe, da diese Frage als sprachunabhängig betrachtet werden sollte. Mein Code ist Python, aber die Antworten sollten für C oder jede andere Sprache mit Bindungen auf System-Aufrufebene gelten.
man 2 schreiben: 'EPIPE'' fd ist an ein Rohr oder eine Steckdose angeschlossen, deren Leseende geschlossen ist. Wenn dies geschieht, erhält der Schreibprozess auch ein SIG- PIPE-Signal.(Daher wird der Write-Rückgabewert nur angezeigt, wenn das -Programm dieses Signal abfängt, blockiert oder ignoriert.) ' – wildplasser
Gibt es einen Grund, die Headerdaten nicht regelmäßig zu senden? Wenn der Leser damit umgehen kann, kann er vielleicht mit redundanten Headern umgehen? – wallyk
@wildplaser Ich bin mir nicht sicher, welchen Punkt du gerade machst. Ja, ich weiß, dass die Pipe geschlossen ist, wenn ich versuche, darauf zu schreiben. Meine Frage lautet, wie man dies asynchron erkennt, ohne zu schreiben. –