Hallo,
derzeit beschäftige ich mich mit FIFOs und möchte 2 getrennte Prozesse
darüber kommunizieren lassen.
Ein Prozess soll permanent lesen:
1 | fifohandle = open("fifo", O_RDONLY);
|
2 | while(1) {
|
3 | read(fifohandle, buf, BUFLEN);
|
4 | printf("%s\n", buf);
|
5 | }
|
Der andere Prozess schreibt (asynchron):
1 | buf[BUFLEN]="hallo welt";
|
2 | fifohandle = open("fifo", O_WRONLY);
|
3 | write=(fifohandle, buf, BUFLEN);
|
4 | close(fifohandle);
|
Der lesende Prozess soll nicht anderes tun, als den FIFO zu beobachten
und den Inhalt auzugeben. Dieser Prozess wird gestartet und er blockiert
bei read(), bis der andere Prozess etwas hineinschreibt.
Es wird der String eingelesen und ich hätte erwartet, dass im
nachfolgenden Durchlauf der while-Schleife die read-Funktion wieder
blockiert. Schliesslich ist der FIFO leer und vom schreibenden Prozess
wieder geschlossen worden. Das ist aber nicht der Fall, nach dem ersten
Schreiben in den FIFO rasselt die while-Schleife munter durch; das
Blockieren funktioniert also nur bis zum ersten Schreibzugriff.
Wie kann ich read danach blockieren bzw. gibt es eine andere Technik?