Ich bin ein wenig neu zu fifo
s auf Linux und haben auch begrenzte Erfahrung mit select()
.Wie unterscheidet man Fifo Openable von lesbarem Inhalt?
Ich habe learned, dass das Aufrufen von open()
auf dem Leseende eines FIFO blockiert, bis das Schreibende die Pipe beendet.
Man kann das Leseende des Fifos mit O_NONBLOCK
öffnen, um nicht bei open()
zu blockieren. Sie können dann select()
mit dem fifo Dateideskriptor in den Readfds, um zu wissen, wann die Datei geöffnet werden kann - wahr?
Worüber ich jetzt verwirrt bin: Nachdem ich gewusst habe, dass die Datei geöffnet werden kann, möchte ich später wissen, dass der Fifo lesbaren Inhalt hat, dh ich würde gerne den read()
über den Fifo-Dateideskriptor wissen würde nicht blockieren. Dazu hätte ich gedacht, select()
mit dem FIFO-Datei-Deskriptor in den Readfds - aber dies scheint zu Konflikt mit der Verwendung von select()
zu wissen, ob die Datei zu öffnen ist.
Also ich denke, meine Frage zusammenfassen: Wie kann ich select()
nutzen zu wissen 1), wenn open()
am gelesenen Ende eines Fifo würde nicht blockieren, und 2) wenn read()
auf einem Fifo blockieren würde nicht?