C中的多管道
Multipiping in C
我试图以这样的方式实现一个程序:所以我有一个parent进程和N个child进程。我想制作 N 个管道。管道的写入端 (fd[1]) 将是 parent 进程的标准输出,管道的读取端 s 将是 child 进程的标准输入。问题是,当我将 smth 写入管道时,所有 children 进程都从管道获取该消息。但我想将消息单独发送到特定的 child,即只有 child 会通过其管道获取消息,其他人无法获取。我卡住了,谁能帮帮我?
我认为您的问题如下:parent 进程只有一个标准输出,但您说 "write side of pipes" 将是 parent 进程的标准输出。如果你有多个管道,你难道不知道有多个写端文件描述符吗?但是 parent 进程只有一个标准输出。
您唯一的选择是放弃 parent 进程的标准输出将写入 child 的要求,因为如果您有多个 child仁?您可以简单地使用多个管道文件描述符。如果你有
int pipefd[5][2];
那你可以打电话
pipe(pipefd[0]);
pipe(pipefd[1]);
pipe(pipefd[2]);
pipe(pipefd[3]);
pipe(pipefd[4]);
并使用 pipefd[N][1] 写入特定的 child 进程,其中 N 是 child 进程的 ID。请务必使用 dup2() 将正确的管道读取文件描述符的读取端复制到 child 进程的标准输入。
请注意,您确实需要创建多个管道。你的问题有点不清楚,但似乎你只有一个管道,所有 children 从同一个管道读取。这或许可以解释为什么所有 children 进程都会收到相同的消息。
我试图以这样的方式实现一个程序:所以我有一个parent进程和N个child进程。我想制作 N 个管道。管道的写入端 (fd[1]) 将是 parent 进程的标准输出,管道的读取端 s 将是 child 进程的标准输入。问题是,当我将 smth 写入管道时,所有 children 进程都从管道获取该消息。但我想将消息单独发送到特定的 child,即只有 child 会通过其管道获取消息,其他人无法获取。我卡住了,谁能帮帮我?
我认为您的问题如下:parent 进程只有一个标准输出,但您说 "write side of pipes" 将是 parent 进程的标准输出。如果你有多个管道,你难道不知道有多个写端文件描述符吗?但是 parent 进程只有一个标准输出。
您唯一的选择是放弃 parent 进程的标准输出将写入 child 的要求,因为如果您有多个 child仁?您可以简单地使用多个管道文件描述符。如果你有
int pipefd[5][2];
那你可以打电话
pipe(pipefd[0]);
pipe(pipefd[1]);
pipe(pipefd[2]);
pipe(pipefd[3]);
pipe(pipefd[4]);
并使用 pipefd[N][1] 写入特定的 child 进程,其中 N 是 child 进程的 ID。请务必使用 dup2() 将正确的管道读取文件描述符的读取端复制到 child 进程的标准输入。
请注意,您确实需要创建多个管道。你的问题有点不清楚,但似乎你只有一个管道,所有 children 从同一个管道读取。这或许可以解释为什么所有 children 进程都会收到相同的消息。