Linux学习之系统编程篇:fifo
生活随笔
收集整理的這篇文章主要介紹了
Linux学习之系统编程篇:fifo
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、fifo 的基本概念和創建
1、特點:
(1)有名管道;
(2)偽文件:在磁盤上是一個管道文件,但對其讀寫操作,該文件大小都為 0。
注意:pipe 文件在磁盤上,ls -l 能查看到,但文件內數據不在磁盤上,是在內存上
(3)數據通過偽文件存放在內核區,本質仍然是內核中的緩沖區。
(4) 半雙工的通信方式。
2、使用場景
沒有血緣關系的進程間通信
3、創建方式
(1)命令:mkfifo 管道名
(2)函數:
二、fifo 實現進程間通信
1、fifo_r.c 讀進程
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) {if(argc != 2){printf("./a.out fifoname\n");return -1;}//1. 打開文件int fd = open(argv[1], O_RDONLY);if(fd < 0){perror("open err");return -1;}//2. 循環讀取數據 -- 顯示到屏幕char buf[256] = {0};while(1){int ret = read(fd, buf, sizeof(buf));if(ret > 0){// 讀到數據printf("%s\n", buf);}else if(ret == 0){// 讀到末尾 -- 寫端全部關閉printf("write closed\n");break;}else {perror("read err");break;}}//3. 關閉close(fd);return 0; }2、fifo_w.c 寫進程
#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> int main(int argc,char *argv[]) {if(argc != 2){printf("./a.out fifoname\n");return -1;}//1. 打開fifo文件printf("begin open....\n");int fd = open(argv[1], O_WRONLY); // open 函數會等待另外一段的讀打開,否則阻塞if(fd < 0){perror("open err");exit(1);}printf("end open....\n");//2. 循環寫入數據char buf[256] = {0};int i = 0;while(1){memset(buf, 0x00, sizeof(buf));sprintf(buf, "xiaoming-%04d", i++);write(fd, buf, strlen(buf));sleep(1); //防止寫的太快了}//3. 關閉close(fd);return 0; }總結
以上是生活随笔為你收集整理的Linux学习之系统编程篇:fifo的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux学习之系统编程篇:管道设置为非
- 下一篇: Linux学习之系统编程篇:mmap 内