gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:38:40 28 4
gpt4 key购买 nike

我正在编写一个将运行 Linux 命令的 C 程序,例如:
cat/etc/passwd | grep 列表 |剪切-c 1-5
我没有任何结果
*这里 parent 等待第一个 child (child_pid)完成;
第一个 child 等待第二个(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 之后调用管道,则进程的每个副本都会获得自己的管道。将 pipe() 放在 fork() 之前,它应该可以工作。

关于c - 没有结果!!使用 fork() 使用 dup2 使用 2 个管道运行 execlp(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14290129/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com