[Linux打怪升级之路]-管道
管道(pipe)是Linux系统中进程间通信的一种方式,可以将一个进程的输出作为另一个进程的输入。
创建管道的系统调用是pipe(),其函数原型如下:
#include <unistd.h>
int pipe(int pipefd[2]);
参数pipefd是一个大小为2的数组,其中:
- pipefd[0]用于读取管道。
- pipefd[1]用于写入管道。
返回值:成功时返回0,失败时返回-1。
下面是一个使用管道的简单示例:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
int pipefd[2];
pid_t pid;
char buf;
int ret;
// 创建管道
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
// 创建子进程
if ((pid = fork()) == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (pid == 0) { // 子进程
close(pipefd[1]); // 关闭写端
sleep(2); // 等待父进程写入数据
while (read(pipefd[0], &buf, 1) > 0) {
printf("子进程接收到数据: %c\n", buf);
}
close(pipefd[0]);
_exit(EXIT_SUCCESS);
} else { // 父进程
close(pipefd[0]); // 关闭读端
write(pipefd[1], "A", 1); // 写入数据
sleep(2);
write(pipefd[1], "B", 1); // 写入数据
close(pipefd[1]);
waitpid(pid, NULL, 0); // 等待子进程结束
exit(EXIT_SUCCESS);
}
}
在这个示例中,父进程创建管道并创建子进程,然后关闭管道的读端,并通过写端向管道写入数据"A"和"B"。子进程关闭管道的写端,并通过读端读取管道的数据。父子进程通过管道通信,父进程写入子进程读取,实现了数据的交换。
评论已关闭