作者:mobiledu2502861465 | 来源:互联网 | 2023-05-21 09:17
我正在创建多个进程,我需要为每个进程创建两个未命名的管道.
对于每个子节点,将使用一个管道从父节点获取int值; 一个用于将int数组发送到父数组.家长会在从孩子那里获取新数据时做一些事情.
基本代码:
#include
#include
#include
#include
#include
#include // 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
我尝试了许多没有成功的事情,我迷路了.你能帮我继续吗?
任何帮助表示赞赏!谢谢.
1> Daniel Klein..:
以下是如何为每个子进程设置一个管道,以便每个子进程写入父进程:
由于每个子项需要两个文件描述符,因此声明:
int fd[2 * N];
适当地初始化它们:
for (int i = 0; i
在i
-th子进程中,使用:
write(fd[2*i + 1], write_buffer, SIZE)
写入父级,并在父级中使用:
read(fd[2*i], read_buffer, SIZE)
从第 - i
个孩子读.
关闭管道:
在i
第一个孩子里面,你可以使用
close(fd[2*i])
马上,看到你只是在写作.你写完电话后
close(fd[2*i + 1])
关闭管道的写入端.
父母的情况是平行的:当i
你从第一个孩子读书时,你可以
close(fd[2*i + 1])
马上,因为你没有写作,并且在你完成阅读电话之后
close(fd[2*i])
关闭管道的读取端.
由于每个子进程需要两个管道,因此创建两个数组 - 一个包含用于写入父项的子项的管道,另一个包含用于写入子项的父项的管道.