Linux系统编程——进程通信之无名管道
Linux系统编程——进程通信之无名管道
管道
管道是一种半双工的进程通信方式,其中一个进程负责读,一个进程负责写,因此管道是半双工的,管道分为命名管道和无名管道,无名管道也叫匿名管道,无名管道只能用于有亲缘关系的进程间的通信,比如父子进程。
pipe函数
int pipe(int pipefd[2]);
所需头文件:unistd.h
功能:创建管道。
pipefd[0]:负责读取管道内容的文件描述符。
pipefd[1]:负责向管道内写内容的文件描述符。
返回值:成功返回0,错误返回-1并设置errno。
实例:多进程读写管道
代码:
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main(void) {int fd[2] = {0};char buf[128] = "Hello";pid_t pid;if (pipe(fd) < 0) {perror("pipe err");return -1;}pid = fork();if (pid < 0) {perror("fork failed");} else if(pid == 0) {while(1) {read(fd[0], buf, sizeof(buf));if (strncmp(buf, "quit", 4) == 0 )break;printf("buf:%s\n", buf);}} else {while(1) {fgets(buf, sizeof(buf), stdin);write(fd[1], buf, sizeof(buf));if (strncmp(buf, "quit", 4) == 0)break;}wait(NULL);}return 0;
}
运行结果:

