C 将stdout传输到其他程序stdin失败;没有消息通过管道
我正试图用C语言编写一个带有叉和管道的shell。 我试着把我的过程分成两部分,让儿子和父母说话: 标准是孩子的标准。 我想通过管道来实现它。 以下是我的尝试:C 将stdout传输到其他程序stdin失败;没有消息通过管道,c,unix,pipe,fork,C,Unix,Pipe,Fork,我正试图用C语言编写一个带有叉和管道的shell。 我试着把我的过程分成两部分,让儿子和父母说话: 标准是孩子的标准。 我想通过管道来实现它。 以下是我的尝试: void split(){ int fork_id = fork(); int pipes[2]; pipe(pipes); if (fork_id) { //parent dup2(pipes[1], STDOUT_FILENO); close(pipes[0]); close(pipes[1]
void split(){
int fork_id = fork();
int pipes[2];
pipe(pipes);
if (fork_id) {
//parent
dup2(pipes[1], STDOUT_FILENO);
close(pipes[0]);
close(pipes[1]);
} else {
//child
dup2(pipes[0], STDIN_FILENO);
close(pipes[0]);
close(pipes[1]);
}
}
之后,我使用execvp运行软件(他们使用正确的argv运行[我检查过])/
不幸的是,第二个程序没有得到第一个程序的输出,它似乎得到了“”。
有人能发现错误吗?归功于@kalyum。
我在创建管道之前进行了分叉,因此每个进程都有自己的管道。
因此,2之间没有建立连接。首先,需要在
fork
之前调用管道
。请同时提取a并在此处提供。而且,你没有说你所观察到的,只有你的解释。请拿着这本书读一读。谢谢@kaylum。它起作用了。