一. 管道简介:
管道(pipe)是一种最古老的IPC机制,作用于有血缘关系的进程之间,完成数据传递。
Linux系统提供了pipe系统函数用于创建一个管道。
常见的通信方式有,单工通信、半双工通信、全双工通信,管道是一种半双工通信。
管道的特点:
1. 其本质是一个伪文件(实为内核缓冲区);
2. 由两个文件描述符引用,一个表示读端,一个表示写端。
3. 采用半双工通信方式,管道的一端只能用于读,另一端只能用于写。
4. 只适合父子进程或者兄弟进程
管道的原理: 管道实为内核使用环形队列机制,借助内核缓冲区(4k)实现。
二. pipe函数的说明:
声明:
#include
int pipe(int pipefd[2]);
功能:创建管道
返回值:成功:0;失败:-1,设置errno;
函数调用成功,返回两个文件描述符,分别用于读写。fd[0]为read管道描述符; fd[1]为写管道描述符。向管道文件读写数据其实是在读写内核缓:
冲区。
注意:
1. 读一个对方关闭的管道,会返回0
2. 写一个对方关闭的管道,会返回出错,并设置EPIPE,同时会产生SIGPIPE信号。
三. 实例:
如何实现父子进程间通信呢?看一个实例:子进程写入数据,父进程读