网站大量收购独家精品文档,联系QQ:2885784924

《Linux C从入门到精通》.明日科技.第08章.进程间通信.ppt

《Linux C从入门到精通》.明日科技.第08章.进程间通信.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《Linux C从入门到精通》.明日科技.第08章.进程间通信

Logo Logo Logo Logo Logo Logo Logo Logo Logo Logo 进程间通信概述 本讲大纲: 进程间通信的工作原理 进程间通信的主要分类 进程间通信的工作原理 进程间通信(Inter-Process Communication,IPC)是指在两个或者多个不同的进程间传递或者交换信息,通过信息的传递建立几个进程间的联系,协调一个系统中的多的进程之间的行为。 8.1.1 进程间通信的工作原理 进程与进程之间是相互独立的,各自运行在自己的虚拟内存中,要想在进程与进程之间建立联系,需要通过内核,在内核中开辟一块缓冲区,两个进程的信息在缓冲区中进行交换或者传递。进程间通信原理如图8.1所示。 图8.1 进程间通信工作原理 进程间通信的工作原理是进程A中的数据写入到内核中,进程B中的数据也写入到内核中,两者在内核中进行交换,交换过后,进程A读取内核中的数据,进程B也读取内核中的数据,这样两个进程间交换数据的通信就完成了。两个进程通过内核建立了联系,那么交换数据、传递数据、发送事件等行为就都可以实现了。 进程间通信的主要分类 在Linux系统中,常见的进程间通信主要包括管道通信、共享内存通信、信号量通信、消息队列通信、套接口(SOCKET)通信和全双工管道通信。 Linux系统除了支持信号和管道外,还支持SYSV(System V)子系统中的进程间通信机制。在SYSV的IPC机制中,包括共享内存、信号量和消息队列通信。 标题 管道与命名管道 本讲大纲: 管道基本定义 管道创建和管道关闭 pipe函数实现管道通信 命名管道基本定义 在Shell中创建命名管道 mkfifo函数创建命名管道 管道基本定义 管道与命名管道是最基本的IPC机制之一,管道主要用于父子或者兄弟进程间的数据读写,命名管道则可以在无关联的进程间进行沟通传递数据。在这一节中,主要讲解管道通信和命名管道通信这两种通信方式的工作原理,以及两种通信方式的实际应用情况。 8.2.1 管道基本定义 所谓的管道,就像生活中的煤气管道、下水管道等传输气体和液体的工具,而在进程通信意义上的管道就是传输信息或数据的工具。以下水管道为例,当从管道一段输送水流到另一端时,只有一个传输方向,不可能同时出现两个传输方向。在Linux系统中的进程间通信中管道这个概念也是如此,某一时刻只能单一方向传递数据,不能双向传递数据,这种工作模式就叫做单双工模式。单双工工作模式的管道通信是只能从一段写数据,另一端读取数据。 ? 说明:全双工的工作模式是指管道一段发送数据的同时还可以接收数据,而接收数据的一端也可以读取数据。在某些版本的Unix系统中,管道是支持全双工工作模式的。但是在本书中介绍的Linux系统中,管道是只支持单双工工作模式的。 管道创建和管道关闭 管道由Linux系统提供的pipe 函数创建,该函数的原型为: #include int pipe int filedes[2] ; pipe 函数用于在内核中创建一个管道,该管道一端用于读取管道中的数据,另一端用于将数据写入到管道中。在创建一个管道之后,会获得一对文件描述符,用于读取和写入。然后将参数数组filedes中的两个值,传递给获取到的两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端。 pipe 函数调用成功,返回值为0;否则返回-1,并且设置了适当的错误返回信息,返回信息如下: EFAULT:参数filedes非法。 EMFILE:进程中使用了过多的文件描述。 ENFILE:打开的文件达到了系统允许的最大值。 pipe 函数只是创建了管道,要想从管道中读取数据或者向管道中写入数据,需要使用read 函数和write 函数从管道进行读写操作。当管道通信结束后,需要使用close 函数关闭管道的两端,即读端和写端。 ? 说明:read 函数和write 函数的相关讲解,请参照第9章 文件操作中关于这两个函数的介绍。 pipe函数实现管道通信 pipe函数实现管道通信 命名管道基本定义 在前面介绍的使用管道进行进程间通信的方法受到很多的限制,受限制之一就是两个进程进行通信,必须是两个相关联的进程,如父子进程或者兄弟进程等。那么没有关系的进程之间有时候也需要进行通信,该如何解决呢? 命名管道解决了这个问题。命名管道,通常被称之为FIFO(first-in,first-out),由FIFO可以知道,命名管道遵循先进先出的原则。命名管道作为特殊的设备文件存在于文件系统中,因此,在进程中可以使用open 函数和close 函数打开和关闭命名管道。 命名管道与管道类似,两者的区别在于命名管道提供了一个路径名,该路径名以特殊的设备文件的形式存放在文件系统中。

文档评论(0)

yanpan1 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档