在C语言中,可以使用管道(pipe)来实现进程间的通信。在for循环中实现多个管道,可以通过创建多个管道和多个子进程来实现。
具体步骤如下:
pipe
函数创建多个管道。pipe
函数会返回两个文件描述符,一个用于读取管道数据,一个用于写入管道数据。可以使用数组来存储这些文件描述符。int pipes[num_pipes][2];
for (int i = 0; i < num_pipes; i++) {
if (pipe(pipes[i]) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
}
fork
函数创建多个子进程。每个子进程负责执行一个命令,并将输出写入管道。for (int i = 0; i < num_pipes; i++) {
pid_t pid = fork();
if (pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) {
// 子进程
// 关闭不需要的管道文件描述符
for (int j = 0; j < num_pipes; j++) {
if (j != i) {
close(pipes[j][0]);
close(pipes[j][1]);
}
}
// 重定向标准输入输出到管道
if (i != 0) {
dup2(pipes[i-1][0], STDIN_FILENO);
close(pipes[i-1][0]);
close(pipes[i-1][1]);
}
if (i != num_pipes - 1) {
dup2(pipes[i][1], STDOUT_FILENO);
close(pipes[i][0]);
close(pipes[i][1]);
}
// 执行命令
execlp("command", "command", NULL);
perror("execlp");
exit(EXIT_FAILURE);
}
}
// 关闭所有管道文件描述符
for (int i = 0; i < num_pipes; i++) {
close(pipes[i][0]);
close(pipes[i][1]);
}
// 等待子进程执行完毕
for (int i = 0; i < num_pipes; i++) {
wait(NULL);
}
这样,就可以在for循环中实现多个管道,每个管道对应一个子进程执行一个命令,并将输出传递给下一个管道的输入。
领取专属 10元无门槛券
手把手带您无忧上云