freeze nach open
-
hallo,
ich möchte mit einer named pipe daten von einem process an den andern senden. Das problem was ich dabei habe ist das er während des open einfriehrt. Hier der code:rc[2] = mkfifo("fifo",0666); int fd = open("fifo",O_WRONLY);
Die fifo Datei legt er an, wenn ich auf der platte nachkucke ist die Datei vorhanden.
gruß maurice
-
mit Fifos habe ich keine Erfahrung. Aber öffne den Fifo einfach mal nicht blockierend (Als Option O_NONBLOCK bei open) und lass dir eine Fehlermeldung ausgeben, wenn fd -1 ist. Vielleicht hilft das weiter.
-
hilft nicht wirklich weiter. Weil ich ja dann nur die fehlermeldung "bad filedeskriptor" bekomme. Aber halt nicht in den fifo schreiben kann. Versteh aber auch nicht was ich falsch mache.
-
Ich meine mich zu erinnern dass die schreibende Seite erst aufhört zu blockieren wenn sich ein Leser an die Pipe angemeldet hat.
Allerdings solltest Du beim Schreiben auf die nonblocking geöffnete Pipe imho kein EBADF sondern ein EAGAIN bekommen. Der sagt Dir dass Du noch nicht schreiben kannst, weil kein Leser vorhanden ist (oder der mit dem Lesen nicht nachkommt). Dann musst Du mit select/poll/epoll drauf warten dass der Socket schreibbereit wird.
-
Hi Leute,
ich möchte an dieser Stelle auf die entsprechenden man-pages
> man mkfifo
> man fifo
verweisen. Da steht einiges drin zum Thema blocking. Zum Beispiel steht da auch dass eine fifo erst an beiden Enden geöffnet werden muss bevor man hinschreiben bzw. daraus lesen kann, ...
-
ahh, danke werd's gleich ausprobieren wenn ich zuhause bin.
-
oh ja rtmf hilft wirklich.