我的管道需要一些帮助。
我正在尝试创建一个以单个进程开头的程序,根据用户定义的数字生成子进程,然后再流回另一个(单个)子进程。数据流看起来像这样:
/-->-█->-\
█-->--█->--█
\-->-█->-/
我已经完成了流程创建的第一部分。 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
}
}