2个子进程之间的管道不产生任何输出

时间:2013-07-15 19:19:18

标签: c shell pipe

到目前为止,我得到了一个函数execute_command(command_t),它可以执行简单的命令,如“ls -l”,“cat test.txt”等。但是,当我尝试实现管道时,它不会产生任何东西。这是代码:

int thePipe[2];
pid_t child = fork();
int status1=0;
pipe(thePipe);
if(child==(pid_t)-1){
    fprintf(stderr, "error when fork the process\n");
} else if(child==0){
    close one pipe and make duplicate
    execute command[0]
} else{
    waitpid(child, &status1, 0);
}
int status2=0;
pid_t child2 = fork();
pipe(thePipe);
if(child2==(pid_t)-1){
    fprintf(stderr, "error when fork the process\n");
} else if(child2==0){
    close one pipe and make duplicate
    execute command[1];
} else {
    waitpid(child2, &status2, 0);
}

如果输入命令是:

cat test.txt | grep aaa

命令“cat test.txt”将存储在“c-> u.command [0]”中,命令“grep aaa”将存储在“c-> u.command [1]”中。

我做错了吗?感谢

1 个答案:

答案 0 :(得分:2)

您想在两个孩子之间创建一个管道。也就是说,只需拨打pipe() ,然后让两个孩子都使用它。您正在调用它两次,用新的管道覆盖原始管道。基本上,保持你的布局/顺序,你想要:

create pipe
fork()
if child {
    close read end of pipe
    send stdout to write end of pipe
    exec command[0]
}
fork()
if child {
    close write end of pipe
    set stdin to read end of pipe
    exec command[1]
}
close read and write ends of pipe
wait for children to finish