进程间通信(IPC,InterProcess Communication)
目前使用较多的几种方法:
1.管道(使用最简单)
2.信号(开销最小)
3.共享映射区(无血缘关系)
4.本地套接字(最稳定)
管道概念:
管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递。调用pipe系统函数即可创建一个管道,有如下特质:
1.其本质是一个伪文件(实为内核缓冲区)
2.由两个文件描述符引用,一个表示读端,一个表示写端。
3.规定数据从管道的写端流入管道,从读端流出。
管道的原理:管道实为内核使用环形队列机制,借助内核缓冲区(4K)实现。
管道的局限性:
1.数据自己读不能自己写
2.数据一旦被读走,便不在管道中存在,不可反复读取。
3.由于管道采用半双工通信方式。因此,数据中能在一个方向上流动。
4.只能在有公共祖先的进程见使用管道。
#include <unistd.h>(包含的头文件)
int pipe(int pipefd[2]);
成功:0
失败:-1,设置errno
函数调用成功返回r/w两个文件描述符。无需open,但需手动close。规定fd[0] -> r fd[1]-> w
ssize_t read(int fd, void *buf, size_t count);
失败:-1
成功:0
(如果返回值大于0,那么为读取的字节数)
ssize_t write(int fd, const void *buf, size_t count);
ssize_t read(int fd, void *buf, size_t count);
write(STDOUT_FILENO,buf,)写到屏幕