gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:58 24 4
gpt4 key购买 nike

到目前为止,我得到了一个函数 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]”中。

我是不是做错了什么?谢谢

最佳答案

您想在您的两个 child 之间创建一个管道。也就是说,调用 pipe() 一次,然后让两个 child 都使用它。您调用了两次,用新管道覆盖了原来的管道。基本上,保持事物的布局/顺序,您需要:

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

关于c - 2个子进程之间的管道不产生任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17662104/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com