C 将stdout传输到其他程序stdin失败;没有消息通过管道

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]

我正试图用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]);
} else {
    //child


     dup2(pipes[0], STDIN_FILENO);
    close(pipes[0]);
    close(pipes[1]);
}
}
之后,我使用execvp运行软件(他们使用正确的argv运行[我检查过])/ 不幸的是,第二个程序没有得到第一个程序的输出,它似乎得到了“”。 有人能发现错误吗?

归功于@kalyum。 我在创建管道之前进行了分叉,因此每个进程都有自己的管道。
因此,2之间没有建立连接。

首先,需要在
fork
之前调用
管道
。请同时提取a并在此处提供。而且,你没有说你所观察到的,只有你的解释。请拿着这本书读一读。谢谢@kaylum。它起作用了。