【问题标题】:Multipiping in CC中的乘法
【发布时间】:2015-05-24 20:23:23
【问题描述】:

我试图以这样的方式实现一个程序:所以我有一个父进程和 N 个子进程。我想做N个管道。管道的写入端(fd[1])将是父进程的标准输出,管道的读取端s将是子进程的标准输入。问题是,当我编写 smth 来管道时,所有子进程都会从管道中获取该消息。但是我想将消息单独发送给特定的孩子,即只有那个孩子会通过其他人无法获得的管道获得消息。我卡住了,谁能帮帮我?

【问题讨论】:

    标签: pipe fork


    【解决方案1】:

    我认为您的问题如下:父进程只有一个标准输出,但您说“管道的写入端”将是父进程的标准输出。如果您有多个管道,您不知道有多个写入端文件描述符吗?但是父进程只有一个标准输出。

    您唯一的选择是放弃父进程的标准输出将写入子进程的要求,因为如果您有多个子进程,它将写入哪个子进程?您可以简单地使用多个管道文件描述符。如果你有

    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() 将正确管道读取文件描述符的读取端复制到子进程的标准输入。

    请注意,您确实需要创建多个管道。您的问题有些不清楚,但似乎您只有一个管道,所有孩子都从同一个管道读取。这或许可以解释为什么所有子进程都会收到相同的消息。

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 1970-01-01
      • 2012-12-11
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多