gpt4 book ai didi

linux - 创建三个 child 并在他们之间连接管道

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:33 24 4
gpt4 key购买 nike

我需要一些帮助来了解如何创建一个父项和三个子项以及在子项之间连接管道。

我的任务是让第一个 child 运行 ls -l/bin/?? 并将其发送给将运行 grep rwxr-xr-x 的第二个 child > 并将其发送给将运行 sort 的第三个 child 。

如果在 bash 中输入,它将看起来像这样:
ls -l/bin/?? | grep rwxr-xr-x |排序

我现在的代码:

#include <sys/wait.h>
#include <sys/types.h>
#inlcude <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define READ 0
#define WRITE 1

int main()
{
int fds[2], i;
pid_t pid;
pipe(fds);

for(i = 0; i < 3; i++)
{
pid = fork();
if(pid == (pid_t) 0)
if(i == 0)
{
/* First child */
}
else if(i == 1)
{
/* second child */
}
else if(i == 2)
{
/* Third child */
}
break;
else
{
/* This is the parent */
}
}
}

问题是我真的不知道这是否是正确的做法。请避免告诉我使用线程执行此操作,因为我正在尝试学习进程之间的管道和通信。

最佳答案

您正在循环运行 fork()。每个 fork() 都会产生两个进程。所以你总共创建了 8 个进程。需要将 fork() 调用排除在循环之外。这就是 fork 的工作原理,

     fork() [Process 1]
/\
/ \
[Process 1]fork() fork()[Process 2]
/\
/ \
[Process 2]fork() fork()[Process 3]

要实现您的愿望,请尝试以下代码,

int main()
{
pid_t pid[3];

pid[0] = fork();

if( pid[0] == 0)
{
/* First Process */
pid[1] = fork();
if(pid[1] == 0)
{
/* First Process Continued. */
}
else
{
/* Second Process */
}
}
else
{
/* 3rd Process */
}
return 0;
}

关于linux - 创建三个 child 并在他们之间连接管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35743634/

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