Linux:进程通信之管道

管道

A.What

本质是内核缓存区

B. 管道的特点

  • 内核缓冲区大小固定位4k
  • 管道独立于进程存在
  • 管道的数据结构:环形队列(读端和写端)
  • 单工:写端流向读端
  • 读数据相当于出队列
  • 默认阻塞:管道无数据,默认读端阻塞;管道写满,默认写端阻塞

C. Which(有哪些种类的管道)

有名管道

管道在磁盘上对应一个大小为0(因为它的本质是是内核中的一块缓冲区)的管道文件
匿名管道

匿名管道

没有名字,但本质仍然是内核中的一块缓冲区

区别
匿名管道只能实现有血缘关系进程之间的的通信
有名管道既能实现有血缘关系进程之间的通信,也能实现无血缘关系进程之间的通信

D. How(如何使用管道)

匿名管道

#include <unistd.h>
int fd[2]; 
pipe(fd); //fd是传出参数,表示管道的读端和写端

有名管道

#include <sys/types.h>
#include <sys/stat.h>
int ret = mkfifo("./fifo", 0644);
int fd = open("./fifo", O_WRONLY); 
write(fd, pMsg, strlen(pt)); 
close(fd); 

其中pt是一块内存(char类型数组)
从上面代码我们可以看出:对管道的操作和对文件的操作流程基本一致

E. 管道的读写行为

读管道
写端关闭的情况下:如果读端有数据,那么继续读数据,读完后返回0;如果读端无数据,那么返回0
写端未关闭的情况下:如果读端有数据,则一直读数据;如果读端无数据,则阻塞
写管道
读端关闭的情况下:管道破裂,进程直接退出
读端未关闭的情况下:管道被写满,则阻塞;管道未满,则一直写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值