Wie führe ich ein nicht blockierendes fopen auf einer Named Pipe (mkfifo) aus?

Wenn ich ein Programm, das erstellt und versucht, öffnen Sie eine named pipe mit mkfifo, wie kann ich öffne eine pipe zum Lesen oder schreiben, ohne zu blockieren?

Speziell, ich Schreibe ein C Programm, welches ausgeführt werden kann, mit oder ohne gui (in Java geschrieben).

Im C-Programm habe ich erfolgreich erstellen von named pipes mit mkfifo, aber wenn ich

FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/

fopen nicht zurück, bis sich die GUI öffnet, dass eine pipe zum schreiben. Was ich tun möchte, ist, dass die Leitung bereit sein, einmal gelesen (wenn) die GUI entscheidet, zu schreiben - ich werde es sein, den file-descriptor in einer select () - Aufruf. Es ist vernünftig, zu erwarten, dass die java-GUI kann eigentlich nie gestartet werden, so kann ich nicht verlassen sich auf Sie zum öffnen das andere Ende des Rohres an einem bestimmten Punkt oder sogar an allen.

Ich werde auch eine zweite pipe zum schreiben geöffnet, und ich nehme an, ich habe das gleiche problem. Weiter kann ich nicht O_NONBLOCK auf eine output-pipe, die hat keine Leser.

Irgendwelche Vorschläge?

(Diese läuft auf einem linux-system)

InformationsquelleAutor der Frage Zxaos | 2009-02-24

Schreibe einen Kommentar