Linux进程通信:命名管道FIFO小结

Linux进程通信:命名管道FIFO小结

ID:37860591

大小:91.50 KB

页数:16页

时间:2019-06-01

Linux进程通信:命名管道FIFO小结_第1页
Linux进程通信:命名管道FIFO小结_第2页
Linux进程通信:命名管道FIFO小结_第3页
Linux进程通信:命名管道FIFO小结_第4页
Linux进程通信:命名管道FIFO小结_第5页
资源描述:

《Linux进程通信:命名管道FIFO小结》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux下进程之间通信可以用命名管道FIFO完成。命名管道是一种特殊类型的文件,因为Linux中所有事物都是文件,它在文件系统中以文件名的形式存在。在程序中,我们可以使用两个不同的函数调用来建立管道:#include#includeintmkfifo(constchar*filename,mode_tmode);intmknode(constchar*filename,mode_tmode

2、S_IFIFO,(dev_t)0);下面先来创建一个管道:viewplaincopytoclipboardprint?#include

3、#include#include#includeintmain(){intres=mkfifo("/tmp/my_fifo",0777);if(res==0){printf("FIFOcreated");}exit(EXIT_SUCCESS);}#include#include#include#includeintmain(){intres=mkfifo("/tmp/my_fifo",0777);if(res==0){printf(

4、"FIFOcreated");}exit(EXIT_SUCCESS);}编译这个程序:gcc–ofifo1.cfifo运行这个程序:$./fifo1用ls命令查看所创建的管道$ls-lF/tmp/my_fifoprwxr-xr-x1rootroot005-0820:10/tmp/my_fifo

5、注意:ls命令的输出结果中的第一个字符为p,表示这是一个管道。最后的

6、符号是由ls命令的-F选项添加的,它也表示是这是一个管道。虽然,我们所设置的文件创建模式为“0777”,但它被用户掩码(umask)设置(022)给改变了,这与普通文件创建是一样的,所以文件的最终模式为755。打开FIFO一个主

7、要的限制是,程序不能是O_RDWR模式打开FIFO文件进行读写操作,这样做的后果未明确定义。这个限制是有道理的,因为我们使用FIFO只是为了单身传递数据,所以没有必要使用O_RDWR模式。如果一个管道以读/写方式打开FIFO,进程就会从这个管道读回它自己的输出。如果确实需要在程序之间双向传递数据,最好使用一对FIFO,一个方向使用一个。当一个Linux进程被阻塞时,它并不消耗CPU资源,这种进程的同步方式对CPU而言是非常有效率的。有关Linux下命名管道FIFO的读写规则可以参见之前所写的一篇文章:Linux命名管道FIFO的读写规则。一、实验:使用FIFO实现进程间通信两个独立的程序:1

8、.生产者程序,它在需要时创建管道,然后尽可能快地向管道中写入数据。2.消费者程序,它从FIFO中读取数据并丢弃它们。生产者程序fifo2.c:viewplaincopytoclipboardprint?#include#include#include#include#include#include#include#defineFIFO_NAME"/tmp/Linux/my_fifo"#defineBUFFER_SIZEPIPE_BUF#define

9、TEN_MEG(1024*1024*10)intmain(){intpipe_fd;intres;intopen_mode=O_WRONLY;intbytes=0;charbuffer[BUFFER_SIZE+1];if(access(FIFO_NAME,F_OK)==-1){res=mkfifo(FIFO_NAME,0777);if(res!=0){fprintf(stderr,"Couldnotcreatefifo%s",FIFO_NAME);exit(EXIT_FAILURE);}}printf("Process%dopeningFIFOO_WRONLY",getpid());

10、pipe_fd=open(FIFO_NAME,open_mode);printf("Process%dresult%d",getpid(),pipe_fd);if(pipe_fd!=-1){while(bytes

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

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

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