talkB.c
#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/stat.h>#include<stdlib.h>#include<fcntl.h>//以只读的方式打开管道2//以只写的方式打开管道1#define SIZE 1024int main(){int fdr = -1;int fdw = -1;int ret = -1;char buf[SIZE];//以只写的方式打开管道1fdw = open("fifo1",O_WRONLY);if(-1==fdw){perror("open");return 1;}printf("以只写的方式打开管道1....\n");//以只读的方式打开管道2fdr = open("fifo2",O_RDONLY);if(-1==fdr){perror("open");return 1;}printf("以只读的方式打开管道2....\n");//循环读写while(1){//写管道1memset(buf,0,SIZE);fgets(buf,SIZE,stdin);//去掉最后一个换行符if('\n'==buf[strlen(buf)-1])buf[strlen(buf)-1]=0;//写管道ret = write(fdw,buf,strlen(buf));if(ret<=0){perror("write");break;}printf("write ret:%d\n",ret);//读管道2memset(buf,0,SIZE);ret = read(fdr,buf,SIZE);if(ret<=0){perror("read");break;}printf("read:%s\n",buf);}//关闭文件描述符close(fdr);close(fdw);}
运行结果如下:可以实现阻塞式的数据读取
文章插图
当两个进程通信的时候,我们查看fifo的大?。?
文章插图
可以发现 , 管道的大小没有发生变化 。其实两个进程通信是在内存中进行的,并没有把数据写到管道中,因为管道只是一个符号性的文件 。如果是在管道写数据,那么IO次数会很多,效率太低了 。
【一 Linux进程间通信】
推荐阅读
- 一篇了解全MVCC
- 谁是登月第一人 中国登月球第一人-宜宾在线
- 原始传奇尸王殿怎么走(原始传奇一年心得)
- 故事 --- Linux和UNIX之间的那些爱恨与情仇
- 关于 Vue 中 h 函数的一些东西
- 小米11pro和一加9pro对比_小米11pro对比一加9pro
- WiFi万能钥匙怎么用(教你一招wifi永不断网)
- el-cascader组件根据最后一级向上找到父级并设置默认值
- 眼膜哪个牌子好用可以推荐一下-秋冬眼膜推荐
- 怎样快速玩转魔方(如何一秒玩转魔方)