第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

资源预览图

第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
1
第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
2
第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
3
第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
4
第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
5
第5章 早期进程间通信-【千锋教育】Linux系统编程(慕课版)
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。