管道

进程间通信的方式,特征

  1. 管道:简单
  2. 信号: 开销小
  3. map映射:非血缘关系进程间
  4. (本地套接字)socket:稳定

管道

实现原理:

内核借助环形队列机制,使用内核缓冲区实现

特征:
  1. 伪文件
  2. 管道中的数据只能一次读取
  3. 数据在管道中这能单向流动
局限性:
  1. 自己写,不能自己读
  2. 数据不能反复读取
  3. 半双工通信
  4. 非血缘关系进程间不可用

pipe函数:

int pipe(int fd[2])
作用:创建,打开管道
参数:
fd[0]: 读段
fd[1]: 写段
返回值:
成功,返回0
失败,返回-1设置errno

管道的读写行为

读数据:

  1. 管道有数据,read返回读到的字节数
  2. 管道无数据,
    - 无写段,read返回0
    - 有写段,read阻塞等待

写数据:

  1. 无读段,异常终止。(SIGPIPE)
  2. 有读段,
    - 管道已满,write阻塞等待
    - 管道未满,返回写到的字节数

fifo管道

命名管道:mkfifo
无血缘关系进程间通信

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值