Linux 进程通信之FIFO的实现
FIFO通信(firstinfirstout)
FIFO有名管道,实现无血缘关系进程通信。
- 创建一个管道的伪文件
- a.mkfifotestfifo命令创建
- b.也可以使用函数intmkfifo(constchar*pathname,mode_tmode);
- 内核会针对fifo文件开辟一个缓冲区,操作fifo文件,可以操作缓冲区,实现进程间通信–实际上就是文件读写
man3mkfifo
#include#include intmkfifo(constchar*pathname,mode_tmode);
注意事项:
FIFOs
OpeningthereadorwriteendofaFIFOblocksuntiltheotherendisalsoopened(byanotherprocessorthread).See
fifo(7)forfurtherdetails.
打开fifo文件时候,read端会阻塞等待write端open,write端同理,也会阻塞等待另外一段打开。
代码示例:
file_w.c写端
#include#include #include #include #include #include #include #include intmain(intargc,char*argv[]){ if(argc!=2){ printf("./a.outfilename1\n"); return-1; } printf("beginopenw\n"); into_ret=open(argv[1],O_WRONLY); printf("endopenw\n"); charbuf[256]; intnum=0; while(1){ memset(buf,'\0',sizeof(buf)); sprintf(buf,"xiaoming--%d",num++); printf("strlen(buf)=%d\n",strlen(buf)); write(o_ret,buf,strlen(buf)); sleep(1); } close(o_ret); return0; }
file_r.c读端
#include#include #include #include #include #include #include #include intmain(intargc,char*argv[]){ if(argc!=2){ printf("./a.outfilename1\n"); return-1; } printf("beginopenr\n"); into_ret=open(argv[1],O_RDONLY); printf("endopenr\n"); charbuf[256]; intnum=0; while(1){ memset(buf,'\0',sizeof(buf)); read(o_ret,buf,sizeof(buf)); printf("strlen(buf)=%d\n",strlen(buf)); printf("readis%s\n",buf); } close(o_ret); return0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。