linux学习第20天(进程间通信,管道)
进程间通信的常用方式、特征:
管道:简单
信号:开销小
mmap映射:非血缘关系进程间
socket(本地套接字):稳定
、、、、、、
管道:
实现原理:内核借助环形队列机制,使用内核缓冲区实现
特质:1、伪文件
2、管道中的数据只能一次读取
3、数据在管道中只能单向流动
局限性:1、自己写,不能自己读
2、数据不可反复读
3、半双工通信
4、血缘关系进程间可用
、、、、、、
pipe函数:创建、并打开管道
int pipe(int fd[2]);
参数:fd[0]:读端
fd[1]:写端
返回值:
成功:0
失败:-1 error
举个例子,父进程向管道写,子进程从管道读。
、、、、、、
管道的读写行为
读管道:
1、管道有数据:read返回实际读到的字节数
2、管道无数据:
1)无写端:read返回0(类似于读到文件结尾)
2)有写端:read阻塞等待
写管道:
1:无读端:异常终止(SIGPIPE导致)
2:有读端:
1)管道已满:阻塞等待
2)管道未满:返回写出的字节个数
实现ls | wc -l功能