- 1、本文档共67页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华清远见 第8章 进程间通信.ppt
本章的要求 第8章、 进程间通信 掌握Linux中管道的创建和读写 掌握Linux中有名管道的创建和读写 掌握Linux中信号的使用 掌握Linux中信号量的使用 掌握Linux中共享内存的使用 掌握Linux中消息队列的使用 本章的主要内容 8.1 Linux下进程间通信概述 8.2 管道 8.3 信号 8.4 信号量 8.5共享内存 8.6 消息队列 8.7 实验 8.1 Linux下进程间通信概述 Linux下进程间通信概述(1) Linux下的进程通信手段基本上是从UNIX平台上的进程通信手段继承而来的。而对UNIX发展做出重大贡献的两大主力ATT的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间的通信方面的侧重点有所不同。前者是对UNIX早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,其通信进程主要局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)的进程间通信机制。而Linux则把两者的优势都继承了下来 Linux下进程间通信概述(2) ? UNIX进程间通信(IPC)方式包括管道、FIFO以及信号。 ? System V进程间通信(IPC)包括System V消息队列、System V信号量以及System V共享内存区。 ? Posix 进程间通信(IPC)包括Posix消息队列、Posix信号量以及Posix共享内存区。 进程间通信方式的种类(1) (1)管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。 (2)信号(Signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一样的。 (3)消息队列(Messge Queue):消息队列是消息的链接表,包括Posix消息队列SystemV消息队列。它克服了前两种通信方式中信息量有限的缺点,具有写权限的进程可以按照一定的规则向消息队列中添加新消息;对消息队列有读权限的进程则可以从消息队列中读取消息。 进程间通信方式的种类(2) (4)共享内存(Shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据的更新。这种通信方式需要依靠某种同步机制,如互斥锁和信号量等。 (5)信号量(Semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段。 (6)套接字(Socket):这是一种更为一般的进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。 8.2 管道 管道概述 无名管道是Linux中进程间通信的一种方式。 ? 它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间)。 ? 它是一个半双工的通信模式,具有固定的读端和写端。 ? 管道也可以看成是一种特殊的文件,对于它的读写也可以使用普通的read()和write()等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内核的内存空间中。 管道的创建 和关闭 管道是基于文件描述符的通信方式,当一个管道建立时,它会创建两个文件描述符fds[0]和fds[1],其中fds[0]固定用于读管道,而fd[1]固定用于写管道,这样就构成了一个半双工的通道。 创建管道可以通过调用pipe()来实现。 管道关闭时只需使用普通的close()函数逐个关闭各个文件描述符。 父子进程之间的管道通信(1) 用pipe()函数创建的管道两端处于一个进程中,由于管道是主要用于在不同进程间通信的,因此这在实际应用中没有太大意义。实际上,通常先是创建一个管道,再通过fork()函数创建一子进程,该子进程会继承父进程所创建的管道 。 父子进程之间的管道通信(2) 父子进程分别拥有自己的读写通道,为了实现父子进程之间的读写,只需把无关的读端或写端的文件描述符关闭即可。此时,父子进程之间就建立起了一条“子进程写入父进程读取”的通道。 示例 阅读并运行示例8-2-2。 标准流管道 (1) 与Linux的文件操作中有基于文件流的标准I/O操作一样,管道的操作也支持基于文件流的模式。这种基于文件流的管道主要是用来创建一个连接到另一个进程的管道,这里的“另一个进程”也就是一个可以进行一定操作的可执行文件,例如,用户执行“ls -l”或者自己编写的程序“./pipe”等。由于这一类操作很常用,因此标准流管道就将一系列的创建过程合并到一个函数pope
您可能关注的文档
- 北京市长城杯重点部位质量控制().ppt
- 北京康城整合推广策略.ppt
- 北京杰座品牌传播策划案69.ppt
- 北京现代朗动上市系列活动方案.pptx
- 北京现代自动变速器培训讲义.ppt
- 北京社保卡如何使用专题培训.pptx
- 北京移动经分规划方案.ppt
- 北京联通 计财部交流-无线应用 201009.ppt
- 北京顺义鲁能新城项目整合推广执行策略提案_70页_2010年.ppt
- 北大光华精品物流与供应链管理课件(私人珍藏版).ppt
- DB21_T 2691.2-2016红鳍东方鲀养殖规范 第2部分:红鳍东方鲀增殖放流技术规范.docx
- DB1506_T 34-2023 规模羊场布鲁氏菌病净化技术规范.docx
- DB22T 2810-2022白萝卜生产技术规程.docx
- DB15T 2968-2023肉绒兼用山羊繁育技术规程.docx
- DB1402_T 30-2024 丘陵区机播紫花苜蓿抗旱保苗技术规程.docx
- DB21/T 3923-2024杨树林下益母草生产技术规程.docx
- DB22T 3340-2022关玉竹生产技术规程.docx
- DB22_T 3334-2022 半干旱区玉米机械化抗旱补水保苗播种技术规程.docx
- DB15T3253.7-2023食品生产加工小作坊生产规范 第7部分:熟肉制品.docx
- DB2109_T 011-2023 阜新优质大米.docx
文档评论(0)