比较来自世界各地的卖家的域名和 IT 服务价格

如何实现多个进程的通道?

我创建了几个进程和

我需要为每个进程创建两个无名频道。

对于每个子元素,将使用一个通道来获得该值。 int 来自父母; 一送阵列 int 父母。 父母会做一些事情

,

从孩子获取新数据。

基本代码:


#include <sys types.h="">
#include <sys wait.h="">
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h> // for reaching unix operations


int main/int argc, char *argv[]/{
pid_t main = getpid//;

int N = 30;
int i;
pid_t* children = /pid_t*/ malloc/sizeof/pid_t/ * N/;
for/i = 0; i &lt; N; i++/{
pid_t child = fork//;
if / child == 0/{
pid_t me = getpid//;
printf/"I'm a child and my pid is: %d\n", me/;
sleep/1/;
// exit/4/;
return me * 2;
} else if / child &lt; 0/{
// printf/"Could not create child\n"/;
} else {
children[i] = child;
// printf/"I have created a child and its pid %d\n", child/;
}
}

// The child never reaches here
for/i = 0; i &lt; N; i++/{
int status;
waitpid/children[i], &amp;status, 0/;
printf/"Process %d exited with return code %d\n", children[i], WEXITSTATUS/status//;
}
return 0;
}


我尝试了很多东西,但不成功,我迷路了。 你能帮我继续吗?

欢迎任何帮助! 谢。
</unistd.h></string.h></stdlib.h></stdio.h></sys></sys>
已邀请:

奔跑吧少年

赞同来自:

以下是如何为每个子进程配置一个通道,以便每个子进程将数据记录到父级:

因为您需要两个子元素的两个文件描述符,所以声明:


int fd[2 * N];


相应地初始化它们:


for /int i = 0; i < N; i++/ {
pipe/&fd[2*i]/;
}


里面
i

- 儿童:使用:


write/fd[2*i + 1], write_buffer, SIZE/


写入父级,并使用父母使用:


read/fd[2*i], read_buffer, SIZE/


阅读OT
i

- 孩子。

关闭管道:

里面
i

- 你可以使用的孩子


close/fd[2*i]/


立即,因为你只写。 完成呼叫后


close/fd[2*i + 1]/


关闭管道记录的末端。

情况与父母平行:阅读时
i

- 你可以的孩子


close/fd[2*i + 1]/


立即,既然你没有写,你完成阅读后,请致电


close/fd[2*i]/


关闭读取管道可读。

既然你需要



每个子进程的通道,创建两个数组 - 一个包含向父母写作的子公司的渠道,以及一个包含父母流程的渠道向子公司写作。

要回复问题请先登录注册