02管道与命名管道_第1页
02管道与命名管道_第2页
02管道与命名管道_第3页
02管道与命名管道_第4页
02管道与命名管道_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

管道与命名管道,本讲大纲:,管道基本定义,管道创建和管道关闭,pipe函数实现管道通信,命名管道基本定义,在Shell中创建命名管道,mkfifo函数创建命名管道,管道基本定义,管道与命名管道是最基本的IPC机制之一,管道主要用于父子或者兄弟进程间的数据读写,命名管道则可以在无关联的进程间进行沟通传递数据。在这一节中,主要讲解管道通信和命名管道通信这两种通信方式的工作原理,以及两种通信方式的实际应用情况。8.2.1管道基本定义所谓的管道,就像生活中的煤气管道、下水管道等传输气体和液体的工具,而在进程通信意义上的管道就是传输信息或数据的工具。以下水管道为例,当从管道一段输送水流到另一端时,只有一个传输方向,不可能同时出现两个传输方向。在Linux系统中的进程间通信中管道这个概念也是如此,某一时刻只能单一方向传递数据,不能双向传递数据,这种工作模式就叫做单双工模式。单双工工作模式的管道通信是只能从一段写数据,另一端读取数据。说明:全双工的工作模式是指管道一段发送数据的同时还可以接收数据,而接收数据的一端也可以读取数据。在某些版本的Unix系统中,管道是支持全双工工作模式的。但是在本书中介绍的Linux系统中,管道是只支持单双工工作模式的。,管道创建和管道关闭,管道由Linux系统提供的pipe()函数创建,该函数的原型为:#includeintpipe(intfiledes2);pipe()函数用于在内核中创建一个管道,该管道一端用于读取管道中的数据,另一端用于将数据写入到管道中。在创建一个管道之后,会获得一对文件描述符,用于读取和写入。然后将参数数组filedes中的两个值,传递给获取到的两个文件描述符,filedes0指向管道的读端,filedes1指向管道的写端。pipe()函数调用成功,返回值为0;否则返回-1,并且设置了适当的错误返回信息,返回信息如下:EFAULT:参数filedes非法。EMFILE:进程中使用了过多的文件描述。ENFILE:打开的文件达到了系统允许的最大值。pipe()函数只是创建了管道,要想从管道中读取数据或者向管道中写入数据,需要使用read()函数和write()函数从管道进行读写操作。当管道通信结束后,需要使用close()函数关闭管道的两端,即读端和写端。说明:read()函数和write()函数的相关讲解,请参照第9章文件操作中关于这两个函数的介绍。,pipe函数实现管道通信,pipe函数实现管道通信,命名管道基本定义,在前面介绍的使用管道进行进程间通信的方法受到很多的限制,受限制之一就是两个进程进行通信,必须是两个相关联的进程,如父子进程或者兄弟进程等。那么没有关系的进程之间有时候也需要进行通信,该如何解决呢?命名管道解决了这个问题。命名管道,通常被称之为FIFO(first-in,first-out),由FIFO可以知道,命名管道遵循先进先出的原则。命名管道作为特殊的设备文件存在于文件系统中,因此,在进程中可以使用open()函数和close()函数打开和关闭命名管道。命名管道与管道类似,两者的区别在于命名管道提供了一个路径名,该路径名以特殊的设备文件的形式存放在文件系统中。因此两个进程间可以没有关系,通过访问该路径来建立联系,进行两个进程间的数据交换。但管道与命名管道都遵循先进先出的原则,也就是指最先写入的数据添加在结尾位置,读取数据时,从开始处返回数据。创建一个命名管道有两种方法,一种是通过函数创建命名管道,另一种是在终端中输入命令创建命名管道,接下来对这两种方法的应用进行讲解。,在Shell中创建命名管道,在Shell中输入mknod命令和mkfifo命令可以创建一个命名管道。在终端中输入命令“mknod-help”,可以查看这个命令的用法等信息。效果如图8.4所示。通过突8.4的介绍,使用mknod创建一个命名管道文件,可以使用命令“mknod路径名称p”,参数p是指创建一个命名管道文件,如图8.5所示。在Linux系统中,还有一个mkfifo命令,也可以创建一个命名管道文件,该命令在终端中的详细介绍如图8.6所示。在图8.6中讲解了mkfifo命令的使用方

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论