Verknüpfung mehrerer Pipes
-
Hi,
ich möchte gerne 3 Prozesse miteinander über zwei Pipes kommunizieren lassen, d.h. sowas wie "prog1 | prog2 | prog 3". Mit zwei Prozessen funktioniert es (prog1 | prog2), aber mit 3 eben nicht.
if ((n = pipe(fd1)) < 0) printf("pipe nicht erzeugt\n"); else { if ((pid1 = fork()) < 0) printf("Kindprozess nicht erzeugt\n"); else if (pid1 == 0) { // Kindprozess #1 close(fd1[0]); close(1); dup(fd1[1]); close(fd1[1]); execve(*prog[0], *prog, environ); } else { if ((pid2 = fork()) < 0) { printf(stderr, "Kindprozess 2 nicht erzeugt\n"); } else if (pid2 == 0) { // Kindprozess #2 close(0); dup(fd1[0]); close(fd1[0]); if (ncmds > 2) { // Falls prog1 | prog2 | prog3 close(1); dup(fd1[1]); close(fd1[1]); } execve(*prog[1], *prog, environ); } else { // Elternprozess if (ncmds == 3) { // Falls prog1 | prog2 | prog3 if ((n = pipe(fd2)) < 0) printf("Pipe 2 nicht erzeugt\n"); else { if ((pid3 = fork()) < 0) printf("Kindprozess 3 nicht erzeugt\n"); else if (pid3 == 0) { // Kindprozess #3 close(fd2[1]); close(0); dup(fd2[0]); close(fd2[0]); execve(*prog[2], *prog, environ); } else { // Elternprozess close(fd1[0]); close(fd1[1]); close(fd2[0]); close(fd2[1]); } } } } } }
Ich verstehe auch nicht genau, wie durch das Schliessen der Standardeingabe sowie dem Schliessen des File-Deskriptors eine "Umleitung" in die Pipe erzeugt wird.
-
Hat sich erledigt, habe es selbst hinbekommen. Danke.