第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
2023-03-21
|
33页
|
98人阅读
|
0人下载
教辅
内容正文:
第5章 早期进程间通信
无名管道
有名管道
信号
无名管道
有名管道
5.2
5.1
信号
5.3
☞点击查看本小节知识架构
☞点击查看本小节知识架构
☞点击查看本小节知识架构
学习目标
了解
掌握
掌握
掌握
了解早期进程间通信机制的原理
1
掌握早期进程间通信机制的特点及应用场合
4
2
掌握早期进程间通信机制的接口方法
3
掌握早期进程间通信机制的编程方法
销售额 掌握知识 理解知识 熟悉知识 了解知识 2.5 2.5 2.5 2.5
在前面的章节中,已经介绍了有关任务的执行单位——进程的概念。通过了解进程使用的地址空间的性质,可以知道每一个进程都享有自己的虚拟地址空间,因此进程间实现数据的传递需要引入进程的通信机制。进程的通信机制有很多种。本章将介绍三种早期进程间通信机制,这些机制应用于本地通信,相对容易理解,读者应熟练掌握。
5.1 无名管道
5.1.1
无名管道简介
返回目录
5.1.2
无名管道的特性
5.1.3
无名管道的通信
5.1 无名管道
Linux的进程通信机制基本是从UNIX平台继承而来的。管道是UNIX系统上最古老的进程间通信(InterProcess Communication,IPC)方法。管道最早出现在20世纪70年代UNIX的第三个版本。管道可以把一个程序的输出直接连接到另一个程序的输入,以此来建立连接。管道分两种,一种是无名管道,一种是有名管道。管道是一种特殊的文件,它拥有与文件操作类似的方式,但同时也具有与文件不同的属性。管道的本质是在内核空间上的一段特殊内存区域,无名管道的实现原理如图所示。
5.1.1 无名管道简介
5.1 无名管道
正如上图所示,每个进程都有4GB的虚拟地址空间,其中0~3GB为用户空间,3~4GB为内核空间。由于每个进程都可以通过系统调用进入内核(内核空间由系统内所有进程共享的)。因此,无名管道则被创建在内核空间上的。无名管道使用时有固定的读端和写端,发送消息需要向管道的写端写入,接收消息需要向管道的读端读取,这样即可完成数据的传递了。
5.1.1 无名管道简介
5.1 无名管道
通过对无名管道的简单介绍,可以看出其通信方式很直接。无名管道不同于普通文件,在对其及进行操作时,需要注意无名管道的一些特性,以保证操作管道时不会出现问题。在了解这些特性之前,先介绍无名管道的接口及使用。
5.1.2 无名管道的特性
#include <unistd.h>
int pipe(int pipefd[2]);
pipe()函数用来创建一个无名管道,参数pipefd[2]为一个数组,用来保存函数返回的两个文件描述符,将pipefd[0]视为管道的读端,而pipefd[1]视为管道的写端,因此通过该管道进行通信的进程,只需操作这两个文件描述符即可。这与普通文件的操作没有任何区别,只是设定了特定的文件描述符用来读写。
5.1 无名管道
因此,无名管道的操作有如下特性:
(1)无名管道只能用于具有亲缘关系的进程之间通信(如父子进程)。
(2)类似于单工的模式,无名管道具有固定的读端与写端。
(3)无名管道虽然是特殊的文件,但对它的读写可以使用文件I/0中read()函数、write()函数直接操作文件描述符即可。
(4)无名管道本质是一段内核空间中的内存段,因此不能使用lseek()函数对管道进行定位操作。
(5)无名管道的操作属于一次性操作,一旦对管道中的数据进行读取,读取的数据将会从管道中移除。
5.1.2 无名管道的特性
5.1 无名管道
(6)无名管道的大小是固定的,向无名管道写入数据,当管道写满时,继续写入将会阻塞。
(7)无名管道中数据被写满后,写操作将会阻塞,当管道中出现4KB以上的空闲空间时,可以继续写入4KB的整倍数的数据。
(8)当无名管道的读端被关闭时,从写端写入数据,管道将会破裂,进程将会退出。关闭读端,即将用于读的文件描述符关闭即可。
(9)当管道无数据时,读操作将会阻塞;当管道中有数据时,且写端关闭时,读操作可以读取,不会阻塞。
5.1.2 无名管道的特性
5.1 无名管道
本节将通过教材中例5-4展示通过无名管道使父子进程进行通信,父进程读取文件test1.txt中的数据并写入管道,子进程读取管道将数据写入到test2.txt。
运行结果如下,使用cat命令查看被读取文件以及生成的文件,可以看出读取成功。
5.1.3 无名管道的通信
linux@Master:~/1000phone/pipe$ ./a.out
linux@Master:~/1000phone/pipe$ cat test2.txt
hello world
hello world
hello world
linux@Master:~/1000phone/pipe$ cat te
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。