3.IPC机制(进程间通信)
IPC 进程间通信 interprocess communicate
三大类:
同一主机进程间通信
1、古老的通信方式
无名管道
有名管道
信号
2、IPC对象通信 system v
共享内存*
消息队列
信号量集
主要用在不同主机进程间通信
3、socket通信
网络通信
1)无名管道
无名管道: 只能用在具有亲缘关系的进程间通信(父子进程)
有名管道: 可以用在同一主机,任意进程间通信。
(1)操作流程
1.创建并打开管道:pipe()
2.读管道:read();
3.写管道:write();
4.关闭管道:close();
int pipe(int pipefd[2]);
功能:创建并打开一个无名管道
参数:
pipefd:管道读端和写端的文件描述符
pipefd[0]读端
pipefd[1]写端
返回值:
成功:0
失败:-1
(2)管道的特点
管道本质是内核中的一段缓冲区,默认64K字节,遵循队列存储方式(FIFO)。
1.写阻塞:当管道的读写端都存在时,管道写满数据时,发生写阻塞。
2.读阻塞:当管道的读写端都存在时,管道为空时,读管道发生读阻塞。
3.读返回0:当管道没有写端,只有读端时,管道中有数据则读出数据,无数据时,不再读阻塞,读
管道直接返回0字节。
4.管道破裂:当管道没有读端,向管道中写数据,发生管道破裂异常。
2)有名管道
有名管道:可以用在同一主机,任意进程间通信。
1.创建有名管道文件: mkfifo();
2.打开管道文件:open();
3.写管道文件:write();
4.读管道文件:read();
5.关闭管道文件:close();