管道

管道(匿名)

管道的概念

本质:

  • 内核缓冲区
  • 伪文件(不占用磁盘空间)

特点:

  • 包含了读端和写端两个部分,对应两个文件描述符
  • 数据从写段流入,读端流出
  • 操作管道的进程被销毁后,管道自动被释放
  • 管道默认是阻塞的

管道的原理

内部实现方式:

  • 环形队列

缓冲区大小:

  • 默认为4k,但可根据实际情况调整

管道的局限性

  • 数据只能读取一次
  • 数据传输的方向是单向的
  • 适用于有血缘关系的进程间通信

管道的读写行为

读操作

  • 有数据:正常度,返回读出的字节
  • 无数据:
    •   (1)写端全部关闭:read解除阻塞,返回0
    •   (2)没有全部关闭:read阻塞

写操作

  • 读端全部关闭:管道破裂,进程被终止,内核给当前进程发信号SIGPIPE
  • 读端没全部关闭:
    •   (1)缓冲区写满了:write阻塞
    •        (2)缓冲区没有慢:write继续写
原文地址:https://www.cnblogs.com/xumaomao/p/11896892.html