我不是很确定如何在两个子进程之间创建一个管道。我是这样做的:
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
}
}
我试图将一个子进程的输出重定向到另一个子进程,但我认为我在第二个子进程中使用了管道的错误,因为当我运行带有第二个子进程的程序时,会出现不正确的结果(像执行“ls”这样的简单操作会出错),但是,如果我删除第二个子进程,程序就可以正常运行(不包括管道,只有简单的fork: ls,ls -l,ps等)。