没有结果!!使用fork()使用dup2运行带有2个管道的execlp()

fal*_*990 2 c linux fork pipe exec

我正在编写一个C程序,它将运行Linux命令,如:
cat /etc/passwd | grep list | cut -c 1-5
我没有任何结果
*这里父母等待第一个孩子(child_pid)完成;
第一个孩子等第二个孩子(pfils)!!
任何的想法?
代码:

main()
{
    pid_t child_pid;
    int fd[2];
    int pfd[2];
    pipe(pfd);
    child_pid = fork ();

    if (child_pid != 0) 
    {
        wait(child_pid);
        close(pfd[1]);
        dup2(pfd[0],0);
        close(pfd[0]);
        execlp("cut","cut","-c","1-5",NULL);
    }
    else
    {
        pid_t pfils = fork();
        pipe(fd);

        if(pfils == 0)
        {
            close(fd[0]);
            dup2(fd[1],1);
            close(fd[1]);
            execlp("cat", "cat","/etc/passwd",NULL);
        }
        else
        {
            wait(pfils);
            close(fd[1]);
            dup2(fd[0],0);
            close(fd[0]);
            close(pfd[0]);
            dup2(pfd[1],1);
            close(pfd[1]);
            execlp("grep","grep","list",NULL);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

KrH*_*ert 5

    pid_t pfils = fork();
    pipe(fd);
Run Code Online (Sandbox Code Playgroud)

Fork将制作该过程的副本.该过程的独立副本.因此,如果您在fork之后调用pipe,则进程的每个副本都会获得自己的管道.在fork()之前放置pipe(),它应该工作.