我已经编写了一个程序,创建了5个管道并在循环中fork了5个进程。我成功地将数据从父进程发送给每个子进程,在每个子进程被另一个程序覆盖时。每个循环按以下方式完成
(parent.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);
}
现在我可以通过从子进程执行的程序的STDIN_FILENO读取数据,从父进程发送到管道的数据。就像这样(program.c):
char *buffer = (char *)malloc(50);
read(STDIN_FILENO, buffer, 50);
我的问题是,如何将数据发送回父进程?我想使用dup2再次替换stdout以使用管道输出,但我无法使其正常工作。我意识到这至少在使用execv(...)之前必须完成。
我不确定是否已经足够解释清楚了,所以我可以制作一个带有文本的小图像:) 现在的情况是这样的:
- 父进程 -> 管道
- 管道 -> 子进程1
- 管道 -> 子进程2
- 管道 -> ...
- 管道 -> 子进程5
- 父进程 -> 管道
- 管道 -> 子进程1
- 管道 -> 子进程2
- 管道 -> ...
- 管道 -> 子进程5
- 子进程1 -> 父进程
- 子进程2 -> 父进程
- ...
- 子进程5 -> 父进程
感谢帮助!