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)
pid_t pfils = fork();
pipe(fd);
Run Code Online (Sandbox Code Playgroud)
Fork将制作该过程的副本.该过程的独立副本.因此,如果您在fork之后调用pipe,则进程的每个副本都会获得自己的管道.在fork()之前放置pipe(),它应该工作.
| 归档时间: |
|
| 查看次数: |
2271 次 |
| 最近记录: |