我制作了一个程序,可以创建 5 个管道并在一个循环中分叉 5 个进程。当每个子进程被另一个程序重叠时,我已经设法将数据从父进程发送到每个子进程。每个循环按以下方式完成
(父.c):
// Child process - reads from pipe
if (childpid == 0) {
dup2(fd[0], 0); // replace stdin with pipe input
execv("program", arguments);
} else { // Parent process - writes to pipe
write(fd[1], buffer, strlen(buffer)+1);
}
因此,现在我可以通过从子程序使用 execv(...) 执行的程序中的 STDIN_FILENO 读取从父级发送到管道的数据。
像这样(program.c):
char *buffer = (char *)malloc(50);
read(STDIN_FILENO, buffer, 50);
但是,我的问题是,如何将数据发送回父级?我正在考虑通过再次使用 dup2 将标准输出替换为管道输出,但我无法让它工作。我意识到这至少必须在使用 execv(...) 之前完成。
我不确定这个解释是否足够,所以我可以用文字制作一个小图像:)
现在是这样的:
- 父级 -> 管道
- 管道 -> 子进程 1
- 管道 -> 子进程 2
- 管道 -> ...
- 管道 -> 子进程 5
我希望它是这样的。
- 父级 -> 管道
- 管道 -> 子进程 1
- 管道 -> 子进程 2
- 管道 -> ...
- 管道 -> 子进程 5
- 子进程 1 -> 父进程
- 子进程 2 -> 父进程
- ...
- 子进程 5 -> 父进程
感谢您的帮助!