- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
进程间通信学习总结-李向勇.
1.管道概述及相关API应用 4
1.1管道相关概念 4
1.2管道的创建 4
1.3管道的读写规则 5
1.4管道应用实例 9
1.5管道的局限性 11
2.有名管道概述及相关API应用 11
2.1有名管道相关概念 11
2.2命名管道的创建 12
2.3命名管道的打开规则 13
2.4命名管道的读写规则 13
3. 消息队列概述及API应用 15
3.1消息队列相关概念 15
3.2消息缓冲区结构 15
3.3消息队列API 16
3.4消息队列优点 18
4.信号量 19
4.1信号量概述 19
4.2信号量数据结构 19
4.3信号量API 20
5. 共享内存概述及API应用 22
5.1系统V共享内存原理 23
5.2共享内存API 24
5.3共享内存的优缺点 26
6.信号 26
6.1信号及信号来源 26
6.2信号的种类 27
6.2.1可靠信号与不可靠信号 27
6.2.2实时信号与非实时信号 29
6.3进程对信号的响应 30
6.4信号的发送 30
6.4.1kill()函数 30
6.4.2alarm()函数 31
6.5信号的处理 31
6.5.1signal()函数 31
6.5.2sigaction()函数 32
7. 套接口(socket)概述及API应用 32
7.1重要的数据结构 33
7.1.1表示套接口的数据结构struct socket 33
7.1.2描述套接口通用地址的数据结构struct sockaddr 33
7.1.3描述因特网地址结构的数据结构struct sockaddr_in: 33
7.2套接口编程API 34
7.2.1创建套接口socket() 34
7.2.2绑定地址bind() 35
7.2.3请求建立连接connect()(由TCP客户发起) 36
7.2.4接受连接请求accept()(由TCP服务器端发起) 36
7.2.5通信函数 37
7.2.6关闭套接口close() 38
7.3典型调用 38
7.3.1典型的TCP服务器代码 38
7.3.2典型的TCP客户代码 40
8. 参考资料 40
在Linux下的多个进程间的通信机制叫做IPC,它是多个进程之间进行相互沟通的一种方法。Linux下有多种进程间通信的方法:半双工管道、FIFO(命名管道)、消息队列、信号量、共享内存、套接口。使用这些通信机制可以为Linux下的网络服务器开发提供灵活而又坚固的框架。
1.管道概述及相关API应用
1.1管道相关概念
管道是Linux支持的最初Unix IPC形式之一,具有以下特点:
管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;
能用于父子进程或者兄弟进程之间(具有亲缘关系的进程);
只单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中。
数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。写入的内容每次都添加在管道缓冲区的末尾,并且每次都是从缓冲区的头部读出数据。
1.2管道的创建
#include unistd.h
int pipe(int fd[2]);
该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义,因此,一个进程在由pipe()创建管道后,一般再fork一个子进程,然后通过管道实现父子进程间的通信(因此也不难推出,只要两个进程中存在亲缘关系,这里的亲缘关系指的是具有共同的祖先,都可以采用管道方式来进行通信)。
1.3管道的读写规则
管道两端可分别用描述字fd[0]以及fd[1]来描述,需要注意的是,管道的两端是固定了任务的。即一端只能用于读,由描述字fd[0]表示,称其为管道读端;另一端则只能用于写,由描述字fd[1]来表示,称其为管道写端。如果试图从管道写端读取数据,或者向管道读端写入数据都将导致错误发生。一般文件的I/O函数都可以用于管道,如close、read、write等等。
向管道中写入数据:
向管道中写入数据时,linux将不保证写入的原子性,管道缓冲区一有空闲区域,写进程就会试图向管道写入数据。如果读进程不读走管道缓冲区中的数据,那么写操作将一直阻塞。?注:只有在管道的读端存在时,向管道中写入数据才有意义。否则,向管道中写入数据的进程将收到内核传来的SIFPIPE信号,应用程序可以处理该信号,也可以忽略(默认动作则是应用程序终止)。
对管道的写规则的验证1:写端对读端存在的依赖性
输出结果为: Broken pipe 原因就是该管道以及它的所有fork()产物的读端都已经被关闭。如果在父进程中保留读端,即在写完pipe后,
文档评论(0)