进程间通信——有名管道(FIFO)

来源:互联网 发布:米格31知乎 编辑:程序博客网 时间:2024/05/18 02:26

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读取数据并且会将内存上的已读数据清空。

阅读全文
0 0
原创粉丝点击