C中的动态管道创建/管道

时间:2013-06-05 21:41:27

标签: c linux unix ipc pipe

我的管道需要一些帮助。

我正在尝试创建一个以单个进程开头的程序,根据用户定义的数字生成子进程,然后再流回另一个(单个)子进程。数据流看起来像这样:

 /-->-█->-\
█-->--█->--█
 \-->-█->-/

我已经完成了流程创建的第一部分。 fork运行良好 - 我通过一个限制为用户指定的数量的循环运行它。这是让我失望的管道。

为简单起见,我专注于第一部分(从父母到多个孩子)。所以我在分支过程之前创建了管道 - 给出了很多。然后我关闭子进程的write-end,关闭stdin,dup,这样孩子的0重定向到stdin,然后关闭孩子的0.那应该照顾孩子端的管道,对吗?

然后回到父进程,我需要检查管道传给孩子们。无论出于何种原因,这对我来说是更难的部分。有人会介意让我走一点吗?

以下是我对这部分代码的看法:

for (i = 0; i < numberOfChildren; ++i) {

    (void) pipe(workFDs[i]);    /* Creates a pipe before the fork */

    if ((workPIDs[i] = fork()) < 0) {
        perror("Error: failure when forking workPID #: \n");
        exit(-1);
    }

    if (workPIDs[i] == 0) {

/* ************************* WORKER PROCESS *********************** */

        close(workFDs[i][1]);   /* Closes the write-end for worker proc */
        close(0);               /* Closes stdin */
        dup(workFDs[i][0]);     /* Redirects workFDs 0 to stdin */
        close(workFDs[i][0]);

        //Fgets to get from the pipe
        //Exec sort stuff here

        }

    } else {

/* *********************** PARENT PROCESS *********************** */

        assert(inputPID == getpid()); /* Just to be sure */

        close(workFDs[i][0]);

        //Fputs to put into the pipe

    }
}

0 个答案:

没有答案