1、何谓进程间通信?
多个进程之间数据相互交换称为进程间通信。
2、进程间通信的方式都有哪些?
(1)信号
(2)管道
(3)信号量
(4)消息队列
(5)共享存储(共享内存)
(6)套接字
信号在之前的博客已经讲过了,今天重点是说一下管道中的有名管道。
3、管道
管道分为两种:
(1)半双工通信:半双工通信是指通信双方都能收发消息,但不能同时进行收和发的工作方式。
(2)全双工通信:全双工通信是指通信双方可同时收发消息的工作方式。
4、管道原理
从图中可以看出,A、B两个进程中,A进程向管道中写数据,B进程从管道中读数据,这也就是管道的原理。
5、管道操作
(1)有名管道:应用于任意两个进程之间数据的单向传递。
创建: 命令方式mkfifo、函数方式mkfifo()
打开: open
写数据:write
读数据:read
关闭: close
(2)有名管道:在文件目录树中有一个文件标示(管道文件),实际不占磁盘空间,数据缓存在内存上。
(3)阻塞运行函数:函数调用以后不会立即返回,需要等待某些条件的发生才会返回。open操作管道文件时,阻塞运行的函数。
如果一个进程以只写方式打开一个管道文件,open会阻塞运行,直到有一个进程以只读方式打开管道文件,open才会返回,进程才会接着执行。
如果一个进程以只读方式打开一个管道文件,open会阻塞运行,直到有一个进程以只写方式打开管道文件,open才会返回,进程才会接着执行。
read函数也会阻塞运行,知道写端写入数据或者所有的写端都关闭。
read读取数据并且会将内存上的已读数据清空。