管道通信之有名管道_第1页
管道通信之有名管道_第2页
管道通信之有名管道_第3页
管道通信之有名管道_第4页
管道通信之有名管道_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、linux 进程间通信 (三 )- 管道通信之有名管道及其基础实验分类:linux 应用编程 2013-06-11 15:44 1780人阅读评论 (4) 收藏举报有名管道 accessmkfifo有名管道 (fifo)首先将上一节的有关有名管道的定义再贴出来有名管道是对无名管道的一种改进,它具有以下特点 :它可以使互不相关的两个进程间实现彼此通信; 该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当做普通文件一样进行读写操作,使用非常方便; fifo 严格地遵循先进先出规则,对管道及它们的写则是把数据添加到末尾,它们不支持如fifo 的读总是从开始处

2、返回数据,对lseek() 等文件定位操作。有名管道的创建可以使用函数 mkfifo() ,该函数类似与文件中的 open() 操作,可以指定管道的路径和打开的模式。咱们还可以在命令行使用“ mknod 管道名 p”来创建有名管道。在管道创建成功后,就可以使用open() 、 write() 和 read() 这些函数了。与普通文件的开发设置一样, 对于为读而打开的管道可在open() 中设置 o_rdonly ,对于为写而打开的管道可在 open() 中设置 o_wronly ,在这里与普通文件不同的是阻塞问题。由于普通文件在读写时不会出现阻塞问题,而在管道的读写中却有阻塞的可能,这里的非阻

3、塞标志可以在open() 函数中设定为o_nonblock。下面分别对阻塞打开和非阻塞打开的读写进行讨论。对于读进程:若该管道是阻塞打开,且当前 fifo 内没有数据, 则对读进程而言将一直阻塞到有数据写入。若该管道是非阻塞打开,则不论 fifo 内是否有数据, 读进程都会立即执行读操作。即如果 fifo 内没有数据,则读函数将立刻返回0 。对于写进程:若该管道是阻塞打开,则写操作将一直阻塞到数据可以被写入。若该管道是非阻塞打开而不能写入全部数据,则读操作进行部分写入或者调用失败。下表列出了mkfifo() 函数的语法要点为了方便咱们查错,再对fifo 相关的出错信息进行归纳,如下表:下面的实

4、验中还要用到access() 函数,它的说明如下表:access() 函数的功能是确定文件或文件夹的访问权限,即检查某个文件的存取方式,比如说是只读方式、只写方式等,如果指定的存取方式有效,则函数返回0, 否则函数返回 -1 。基础实验本实验包括两个程序:fifo_read.c点此下载 和 fifo_write.c点此下载。一个用于读管道,另一个用于写管道。其中在读管道的程序中创建管道,并且作为户输入要写入的内容;读管道的程序会读出用户写入到管道的内容。塞式读写管道模式。main() 函数里的参数由用这两个程序采用的是阻写管道的程序如下:读管道程序如下编写保存上述两个文件后分别使用命令:gcc fifo_write.c -o fifo_write和命令:gccfifo_read.c -o fifo_read编译。为了能更好的观察运行效果,需要把这两个程序分别在终端里运行, 在这里首先启动读管道程序。读管道进程在建立管道后就开始循环地从管道里读出内容

温馨提示

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

评论

0/150

提交评论