- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Linux进程通信4——使用命名管道
在前一篇文章——Linux进程间通信——使用匿名管道
#include?sys/types.h??
#include?sys/stat.h??
int?mkfifo(const?char?*filename,?mode_t?mode);??
int?mknod(const?char?*filename,?mode_t?mode?|?S_IFIFO,?(dev_t)0);??
这两个函数都能创建一个FIFO文件,注意是创建一个真实存在于文件系统中的文件,filename指定了文件名,而mode则指定了文件的读写权限。
mknod是比较老的函数,而使用mkfifo函数更加简单和规范,所以建议在可能的情况下,尽量使用mkfifo而不是mknod。
三、访问命名管道
1、打开FIFO文件
与打开其他文件一样,FIFO文件也可以使用open调用来打开。注意,mkfifo函数只是创建一个FIFO文件,要使用命名管道还是将其打开。
但是有两点要注意,1、就是程序不能以O_RDWR模式打开FIFO文件进行读写操作,而其行为也未明确定义,因为如一个管道以读/写方式打开,进程就会读回自己的输出,同时我们通常使用FIFO只是为了单向的数据传递。2、就是传递给open调用的是FIFO的路径名,而不是正常的文件。
打开FIFO文件通常有四种方式,
open(const?char?*path,?O_RDONLY);//1??
open(const?char?*path,?O_RDONLY?|?O_NONBLOCK);//2??
open(const?char?*path,?O_WRONLY);//3??
open(const?char?*path,?O_WRONLY?|?O_NONBLOCK);//4??
在open函数的调用的第二个参数中,你看到一个陌生的选项O_NONBLOCK,选项O_NONBLOCK表示非阻塞,加上这个选项后,表示open调用是非阻塞的,如果没有这个选项,则表示open调用是阻塞的。
open调用的阻塞是什么一回事呢?很简单,对于以只读方式(O_RDONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_RDONLY),除非有一个进程以写方式打开同一个FIFO,否则它不会返回;如果open调用是非阻塞的的(即第二个参数为O_RDONLY?| O_NONBLOCK),则即使没有其他进程以写方式打开同一个FIFO文件,open调用将成功并立即返回。
对于以只写方式(O_WRONLY)打开的FIFO文件,如果open调用是阻塞的(即第二个参数为O_WRONLY),open调用将被阻塞,直到有一个进程以只读方式打开同一个FIFO文件为止;如果open调用是非阻塞的(即第二个参数为O_WRONLY?| O_NONBLOCK),open总会立即返回,但如果没有其他进程以只读方式打开同一个FIFO文件,open调用将返回-1,并且FIFO也不会被打开。
四、使用FIFO实现进程间的通信
说了这么多,下面就用一个例子程序来说明一下,两个进程如何通过FIFO实现通信吧。这里有两个源文件,一个fifowrite.c,它在需要时创建管道,然后向管道写入数据,数据由文件Data.txt提供,大小为10M,内容全是字符‘0’。另一个源文件为fiforead.c,它从FIFO中读取数据,并把读到的数据保存到另一个文件DataFormFIFO.txt中。为了让程序更加简洁,忽略了有些函数调用是否成功的检查。
fifowrite.c的源代码如下:
#include?unistd.h??
#include?stdlib.h??
#include?fcntl.h??
#include?limits.h??
#include?sys/types.h??
#include?sys/stat.h??
#include?stdio.h??
#include?string.h??
??
int?main()??
{??
????const?char?*fifo_name?=?/tmp/my_fifo;??
????int?pipe_fd?=?-1;??
????int?data_fd?=?-1;??
????int?res?=?0;??
????const?int?open_mode?=?O_WRONLY;??
????int?bytes_sent?=?0;??
????char?buffer[PIPE_BUF?+?1];??
??
????if(access(fifo_name,?F_OK)?==?-1)??
????{??
????????//管道文件不存在??
????????//创建命名管道??
????????res?=?mkfifo(fifo_n
您可能关注的文档
- HTML XM与网页制作测试题及答案.doc
- HY Z-JDSB-03-----矿业公司设备管理制度.doc
- HXD09搭建府热线呼叫中心的解决方案.doc
- HTYB-Ⅲ氧锌避雷器特性测试仪说明书.doc
- HTYM-H智电导盐密测试仪说明书.doc
- HYHL-II回路电阻测试仪说明书(新).doc
- HXGN-12 FN25)技术条件.doc
- HTXL-H输线路故障距离测试仪说明书.doc
- hyyzixi-教科版小学科学五年级下册复习资料.docx
- hz03017_毕业论文(终稿)_终稿.doc
- 2024高考物理一轮复习规范演练7共点力的平衡含解析新人教版.doc
- 高中语文第5课苏轼词两首学案3新人教版必修4.doc
- 2024_2025学年高中英语课时分层作业9Unit3LifeinthefutureSectionⅢⅣ含解析新人教版必修5.doc
- 2024_2025学年新教材高中英语模块素养检测含解析译林版必修第一册.doc
- 2024_2025学年新教材高中英语单元综合检测5含解析外研版选择性必修第一册.doc
- 2024高考政治一轮复习第1单元生活与消费第三课多彩的消费练习含解析新人教版必修1.doc
- 2024_2025学年新教材高中英语WELCOMEUNITSectionⅡReadingandThi.doc
- 2024_2025学年高中历史专题九当今世界政治格局的多极化趋势测评含解析人民版必修1.docx
- 2024高考生物一轮复习第9单元生物与环境第29讲生态系统的结构和功能教案.docx
- 2024_2025学年新教材高中英语UNIT5LANGUAGESAROUNDTHEWORLDSect.doc
最近下载
- 基于FPGA的函数信号发生器设计.doc
- 大汉控股集团有限公司制度汇编.doc
- 阿布扎比国际石油展参展总结.pdf
- 表羽扇豆碱及其衍生物在制备抗阿尔茨海默病的药物中的应用.pdf VIP
- (最新)100MW光伏发电项目投资估算.pdf
- 废旧锂电池综合回收利用项目环评可研资料环境影响.docx VIP
- 再生资源科技有限公司锂电池综合回收项目环评可研资料环境影响.docx VIP
- 2014人教版小学数学四年级上册期末测试卷 答题卡(01) .doc VIP
- TMTPicA2-SMU-V200(CN)Rev6中文版说明书.pdf
- 内蒙古电力(集团)有限责任公司输变电工程安全文明施工标准化管理办法.doc
文档评论(0)