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 中可行吗?
您需要单独的管道。按照你写的方式,pid2
和 pid4
都会有相同的管道连接到它们的 STDIN 并从彼此那里窃取传入的字节。与写入端类似,写入同一个管道的多个进程将在读取端输出(混合)。
我想知道 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 中可行吗?
您需要单独的管道。按照你写的方式,pid2
和 pid4
都会有相同的管道连接到它们的 STDIN 并从彼此那里窃取传入的字节。与写入端类似,写入同一个管道的多个进程将在读取端输出(混合)。