C中是否可以交替使用管道?

Is alternating pipes possible in C?

我想知道 C 中是否可以使用交替管道。
以下是我想到的代码,减去错误检查和程序setter。 如您所见,我只按交替顺序使用两个管道,这基本上就是我要问的问题:这是否可能,或者我是否必须在之前的管道已被使用后创建一个新管道? (在此示例中,您可以删除第四个叉子并让它在第三个叉子中结束,根据我的经验,这将完美无缺地工作)。

int main(int argc, char *argv[]) {

int pip[2], pop[2];
pid_t pid1, pid2, pid3, pid4;

pipe(pip);
pipe(pop);

//Program execute

pid1 = fork();
if(pid1 == 0) {
    dup2(pip[WRITE], STDOUT_FILENO);
    //close all ends here
    execvp(prog1A[0], prog1A);
}

pid2 = fork();
if(pid2 == 0) {
    dup2(pip[READ], STDIN_FILENO);
    dup2(pop[WRITE], STDOUT_FILENO);
    //close all ends here
    execvp(prog2A[0], prog2A);
}

pid3 = fork();
if(pid3 == 0) {
    dup2(pop[READ], STDIN_FILENO);
    dup2(pip[WRITE], STDOUT_FILENO);
    //close all ends here
    execvp(prog3A[0], prog3A);
}

pid4 = fork();
if(pid4 == 0) {
    dup2(pip[READ], STDIN_FILENO);
    //close all ends here
    execvp(prog4A[0], prog4A);
}

//close all ends here
//wait for all pids here
}

这在 C 中可行吗?

您需要单独的管道。按照你写的方式,pid2pid4 都会有相同的管道连接到它们的 STDIN 并从彼此那里窃取传入的字节。与写入端类似,写入同一个管道的多个进程将在读取端输出(混合)。