Prinzipielle Frage zur named Pipe I/O

Hallo,

ich habe eine prinzipielle Frage zur named Pipe I/O unter Linux:

Angenommen ich habe zwei Prozesse (abgekürzt mal im pseudo Code):

Code:
Prozess1:
char* message;
fd = open(pipe);
write(fd, message,strlen(message));
close(fd);

Code:
Prozess2:
char message[VIELPLATZ];
fd = open(pipe);
l = 1;
while(l)
{
l = read(fd, messages[++pos],1);
}
close(fd);

Der erste Prozess schreibt also einen String in die pipe, während der zweite Prozess, der die Länge des Strings ja nicht kennen kann Zeilenweise aus dieser ausliest. Die Frage ist nun, was passiert, wenn der erste Prozess zügig fertig ist und nochmal gestartet wird, während der zweite noch fleissig liest? Blockiert der dann bis zum nächsten open() aufruf oder hab ich hier eine Race Condition?
 
der Prozess schreibt die Pipe immer weiter voll, bis alles gesendet ist, und beendet sich. Der 2. prozess liest in der Zeit weiter aus der Pipe. Damit der 1. Prozess ( neu gestartet) wieder in dieselbe Pipe schreibt, muesstest du diese irgendwie an ihn uebergeben. ansonsten macht er sich naemlich ne neue auf :)
 
Ne neue? Wie soll der sich ne neue öffnen? Die ist doch genau einmal im Dateisystem vorhanden? Ich muss heute mal unseren Kernel Hacker fragen.
 
Es gibt mehrere Pipes....
durchsuch mal mal /proc/$PID/fd
da gibt es immer ein paar prozesse, die ein FIFO (named pipe) offen haben

du kannst ja auch 2 Prozesse offen haben, die jeweils eine pipe verwenden.
 
Das würde dann doch bedeuten, dass der zweite Prozess x-mal blockiert, oder?
Ich habe jetzt aber mal nen harten Test laufen lassen, da terminieren sich die zweiten Prozesse und der erste liest halt genau einmal.
 
Zurück
Oben