进程间通信方式之一:管道

匿名管道

ls -l | wc -l

ls -l 一个进程将得到的数据输出到标准输出中

wc -l 一个进程读取标准输入,将得到的数据进行统计(这里是统计有多少行)

ls -l|wc -l 将 ls -l 得到的数据交给wc -l处理(进程间通信)

exec fork pipe dup2可完成此操作

管道的读写行为

读管道(read)

管道中有数据

read返回成功读到的字节数(ret>0)

管道中没有数据

当前有进程持有管道的写端 read会阻塞等待

当前没有进程持有管道的写端 read返回0

写管道(write)

管道已满

有进程持有管道的读端 write阻塞等待

没有进程持有管道的读端 进程异常终止(因为收到了SIGPIPE信号)

管道未满

有进程持有管道的读端 write返回成功写入的字节数

没有进程持有管道的读端 进程终止

匿名管道的局限性:只能用于进程关联间的通信

什么是关联进程:父进程及父进程的后代进程

命名管道: fifo

创建命名管道的方法:

命令:mkfifo

函数:int mkfifo(const char *pathname,mode_tmode);

命名管道的特点:

命名管道可以用于任何进程间的通信

如果我们以只读的形式打开管道,并且当前没有进程以写的形式打开管道,这时,我们这个进程就会阻塞在open函数上,直到有进程为写而打开管道

如果我们以只写的形式打开管道,并且当前没有进程以读的形式打开管道,这时,我们这个进程就会阻塞在open函数上,直到有进程为读而打开管道

如果一个进程以读的形式打开管道,open不会阻塞

命名管道属于伪文件,不会占用磁盘空间,实质是内核中的一块缓冲区,在使用这个管道的最后的一个进程关闭管道或者进程结束,当前这个管道里的数据就回被释放,在下一次打开管道的时候,管道是空的.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值