一、进程间通信本质
父子进程共用内核,中间需要一块buf的区域连接来通信。
二、管道
1.只作用于有血缘关系的进程之间
2.pipe函数创建管道,mkfifo 命令也可以创建管道
3.管道为双向半双工通信
4.实现原理:内核借助环形队列机制,使用内核缓冲区实现
①它是伪文件 ②管道中数据只能一次读取 ③数据在管道中单向流动 ④数据不可反复读 ⑤自己写,不能自己读
5.pipe函数
①创建并打开管道
②int pipe(int fd[2]) fd[0]:读端 fd[1]:写端
返回值: 成功:0 失败:-1
6.管道的读写行为
①读管道
a.管道有数据:read返回实际读到的值
b.管道无数据:i.无写端:read返回0(just like 读到文件尾)
ii。有写端:read阻塞等待
②写管道
a.无读端:异常终止:SIGPIPE信号导致
b.有读端:i.管道已满:阻塞等待 ii:管道未满:返回写出的字节个数
6.管道缓冲区
①大小:默认1024
liyiheng@liyiheng-PC:~/learngit/TeamB/liyiheng/Linuxc$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 30863
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 30863
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited