没有结果!! 使用fork()以2个pipe道使用dup2运行execlp()

我正在编写一个运行Linux命令的C程序,例如:
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); } } } 

  pid_t pfils = fork(); pipe(fd); 

叉将复制过程。 过程的独立副本。 所以,如果你在fork之后调用管道,那么每个进程拷贝都会得到自己的管道。 把fork()放在fork()之前,它应该可以工作。