![](/img/trans.png)
[英]Create child using fork() inside for loop to run execlp() with 2 pipes using dup
[英]no result!! using fork() to run execlp() with 2 pipes using dup2
我正在編寫一個將運行Linux命令的C程序,例如:
cat /etc/passwd | grep list | cut -c 1-5
我沒有任何結果
*這里父母等待第一個孩子(child_pid)完成;
第一個孩子等第二個孩子!
任何想法?
代碼:
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之后調用管道,則該過程的每個副本都會獲得自己的管道。 將pipe()放在fork()之前,它應該可以工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.