Wenn ich ein Programm habe, das erstellt und versucht, eine Named Pipe mit mkfifo zu öffnen, wie kann ich eine Pipe zum Lesen oder Schreiben öffnen, ohne zu blockieren?Wie führe ich ein nicht-blockierendes fopen auf einer Named Pipe (mkfifo) aus?
Speziell schreibe ich ein C-Programm, das mit oder ohne GUI (in Java geschrieben) ausgeführt werden kann.
Im C-Programm, ich habe die Named Pipes erfolgreich erstellen mkfifo verwenden, aber wenn ich
FILE* in = fopen(PIPE_IN, "r"); /* Where PIPE_IN is the filename*/
fopen nicht zurück, bis die GUI zum Beschreiben Rohr öffnet. Was ich tun möchte, ist, dass diese Pipe bereit ist, einmal gelesen zu werden (wenn die GUI beschließt, darauf zu schreiben - ich werde den Dateideskriptor in einen select() -Aufruf setzen. Es ist vernünftig zu erwarten, dass die Java-GUI niemals wirklich gestartet wird, so dass ich mich nicht darauf verlassen kann, das andere Ende der Pipe an einem bestimmten Punkt oder überhaupt zu öffnen.
Ich habe auch eine zweite Leitung zum Schreiben geöffnet, und ich nehme an, dass ich das gleiche Problem haben werde. Außerdem kann ich O_NONBLOCK nicht für eine Ausgabe-Pipe festlegen, die kein Lesegerät besitzt.
Irgendwelche Vorschläge?
(Dies ist auf einem Linux-System läuft)
Müssen Sie die Ausgangsleitung öffnen, bevor Sie() auf die Eingangsleitung feuern? –
@tinkertim - ich nehme an, technisch nicht - ich hatte sie beide in einer Setup-Funktion eingestellt, aber ich könnte nur die Ausgangsleitung zuerst einrichten und dann wählen, warum? – Zxaos