管道通信之有名管道

管道通信之有名管道

ID:15050957

大小:506.50 KB

页数:7页

时间:2018-08-01

管道通信之有名管道_第1页
管道通信之有名管道_第2页
管道通信之有名管道_第3页
管道通信之有名管道_第4页
管道通信之有名管道_第5页
资源描述:

《管道通信之有名管道》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux进程间通信(三)---管道通信之有名管道及其基础实验分类:Linux应用编程2013-06-1115:441780人阅读评论(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()函数的语法要点为了方便咱们查错,再

4、对FIFO相关的出错信息进行归纳,如下表:下面的实验中还要用到access()函数,它的说明如下表:access()函数的功能是确定文件或文件夹的访问权限,即检查某个文件的存取方式,比如说是只读方式、只写方式等,如果指定的存取方式有效,则函数返回0,否则函数返回-1。基础实验本实验包括两个程序:fifo_read.c点此下载和fifo_write.c点此下载。一个用于读管道,另一个用于写管道。其中在读管道的程序中创建管道,并且作为main()函数里的参数由用户输入要写入的内容;读管道的程序会读出用户写入到管道的内容。这两个程序采用的是阻塞式读写管道模

5、式。写管道的程序如下:读管道程序如下编写保存上述两个文件后分别使用命令:gccfifo_write.c-ofifo_write和命令:gccfifo_read.c-ofifo_read编译。为了能更好的观察运行效果,需要把这两个程序分别在终端里运行,在这里首先启动读管道程序。读管道进程在建立管道后就开始循环地从管道里读出内容,如果没有数据可读,则一直阻塞到写管道进程向管道写入数据。在启动了写管道程序后,读进程能够从管道里读出用户的输入内容,程序运行结果如下:

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。