【发布时间】:2015-05-24 20:23:23
【问题描述】:
我试图以这样的方式实现一个程序:所以我有一个父进程和 N 个子进程。我想做N个管道。管道的写入端(fd[1])将是父进程的标准输出,管道的读取端s将是子进程的标准输入。问题是,当我编写 smth 来管道时,所有子进程都会从管道中获取该消息。但是我想将消息单独发送给特定的孩子,即只有那个孩子会通过其他人无法获得的管道获得消息。我卡住了,谁能帮帮我?
【问题讨论】:
我试图以这样的方式实现一个程序:所以我有一个父进程和 N 个子进程。我想做N个管道。管道的写入端(fd[1])将是父进程的标准输出,管道的读取端s将是子进程的标准输入。问题是,当我编写 smth 来管道时,所有子进程都会从管道中获取该消息。但是我想将消息单独发送给特定的孩子,即只有那个孩子会通过其他人无法获得的管道获得消息。我卡住了,谁能帮帮我?
【问题讨论】:
我认为您的问题如下:父进程只有一个标准输出,但您说“管道的写入端”将是父进程的标准输出。如果您有多个管道,您不知道有多个写入端文件描述符吗?但是父进程只有一个标准输出。
您唯一的选择是放弃父进程的标准输出将写入子进程的要求,因为如果您有多个子进程,它将写入哪个子进程?您可以简单地使用多个管道文件描述符。如果你有
int pipefd[5][2];
那你就可以打电话了
pipe(pipefd[0]);
pipe(pipefd[1]);
pipe(pipefd[2]);
pipe(pipefd[3]);
pipe(pipefd[4]);
并使用 pipefd[N][1] 写入特定的子进程,其中 N 是子进程的 id。请务必使用 dup2() 将正确管道读取文件描述符的读取端复制到子进程的标准输入。
请注意,您确实需要创建多个管道。您的问题有些不清楚,但似乎您只有一个管道,所有孩子都从同一个管道读取。这或许可以解释为什么所有子进程都会收到相同的消息。
【讨论】: