Je ne suis pas très sûr de savoir comment créer un tube entre deux processus fils. Ceci est la façon dont je l'ai fait:Pipe dans le shell C UNIX
pipe(&fd[0]); //Create a pipe
proc1 = fork();
//Child process 1
if (proc1 == 0)
{
close(fd[0]); //process1 doenst need to read from pipe
close(STD_INPUT); //prepare for output
dup(fd[1]); //Standard output = fd[1]
close(fd[1]);
execvp(parameter[0], parameter); //Execute the process
}
else
{
proc2 = fork();
if (proc2 == 0)
{
close(fd[1]);
close(STD_OUTPUT);
dup(fd[0]);
close(fd[0]);
execvp(parameter2[0], parameter2);
}
//Parent process
else
{
waitpid(-1, &status, 0); //Wait for the child to be done
}
}
Je suis en train de rediriger la sortie d'un processus enfant à l'autre, mais je pense que je fais une erreur avec le tuyau dans le deuxième processus de l'enfant parce que quand je lance le programme avec le 2ème processus enfant je reçois des résultats incorrects (comme une simple exécution comme "ls" est mal exécutée), cependant, si je supprime le second processus enfant, le programme tourne bien (pas de pipe, juste fork simple: ls, ls -l, ps, etc.).