国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【Linux】命名管道FIFO

2019-11-08 18:51:03
字體:
來源:轉載
供稿:網友
管道的一個不足之處是沒有名字,因此,只能用于具有親緣關系的進程間通信,在命名管道(named pipe或FIFO)提出后,該限制得到了克服。FIFO不同于管道之處在于它提供一個路徑名與之關聯,以FIFO的文件形式存儲于文件系統中。命名管道是一個設備文件,因此,即使進程與創建FIFO的進程不存在親緣關系,只要可以訪問該路徑,就能夠通過FIFO相互通信。值得注意的是,FIFO(first input first output)總是按照先進先出的原則工作,第一

個被寫入的數據將首先從管道中讀出。

管道read端

#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#define _PATH_ ". "#define _SIZE_ 100int main(){	int fd=open(_PATH_,O_RDONLY);	if(fd<0)	{		PRintf("openfile error/n");		return 1;	}	char buf[_SIZE_];	memset(buf,'/0',sizeof(buf));	while(1){     int ret=read(fd,buf,sizeof(buf));	 if(ret<=0)	 {		 printf("read end/n");		 break;	 }	 printf("%s/n",buf);	 if(strncmp(buf,"quit",4)==0)		 break;	}	close(fd);	return 0;}管道write端

#include<stdio.h>#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>#include<unistd.h>#include<string.h>#define _PATH_ ". "#define _SIZE_ 100int main(){//	int ret=mkfifo(_PATH_,0666|S_IFIFO);    int ret=mkfifo(_PATH_,0666);	if(ret==-1)	{		printf("mkfifo is error/n");		return 1;	}	int fd=open(_PATH_,O_WRONLY);	if(fd<0)			{		printf("openfile error/n");	}	char buf[_SIZE_];	memset(buf,'/0',sizeof(buf));	while(1){		scanf("%s",buf);     int ret=write(fd,buf,strlen(buf)+1);	 if(ret<0)	 {		 printf("write error/n");		 break;		 }	 if(strncmp(buf,"quit",4)==0)		 break;		}	close(fd);	return 0;}測試結果

進入

輸入內容

由于linux中所有的事物都可被視為文件,所以對命名管道的使用也就變得與文件操作非常的統一,也使它的使用非常方便,同時我們也可以像平常的文件名一樣在命令中使使。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁明县| 赤峰市| 汤原县| 荥阳市| 苏尼特左旗| 十堰市| 枝江市| 石楼县| 哈密市| 达日县| 保康县| 泗水县| 专栏| 米泉市| 鹤庆县| 新田县| 内黄县| 咸阳市| 嘉义市| 班戈县| 浏阳市| 会昌县| 津南区| 德兴市| 邵阳县| 乐山市| 壶关县| 吐鲁番市| 玛沁县| 荥阳市| 伊春市| 惠安县| 曲阜市| 常州市| 鄯善县| 启东市| 鱼台县| 孟州市| 高唐县| 富民县| 仁寿县|