管道(匿名)
管道的概念
本质:
- 内核缓冲区
- 伪文件(不占用磁盘空间)
特点:
- 包含了读端和写端两个部分,对应两个文件描述符
- 数据从写段流入,读端流出
- 操作管道的进程被销毁后,管道自动被释放
- 管道默认是阻塞的
管道的原理
内部实现方式:
- 环形队列
缓冲区大小:
- 默认为4k,但可根据实际情况调整
管道的局限性
- 数据只能读取一次
- 数据传输的方向是单向的
- 适用于有血缘关系的进程间通信
管道的读写行为
读操作
- 有数据:正常度,返回读出的字节
- 无数据:
- (1)写端全部关闭:read解除阻塞,返回0
- (2)没有全部关闭:read阻塞
写操作
- 读端全部关闭:管道破裂,进程被终止,内核给当前进程发信号SIGPIPE
- 读端没全部关闭:
- (1)缓冲区写满了:write阻塞
- (2)缓冲区没有慢:write继续写