linux ipc——fifo
1、概念
命名管道:
2、用途
命名管道用的最多的地方就是进程间通信,它的原理是通过文件映射的方式实现的,进程间数据的传输直接在内存中进行,所以它的效率是很高的。
3、特点
6个,3-5同无名管道。
①存在文件系统(支持open、close、read、write)
②fifo文件存在于文件系统,但内容存在于内存,故大小受限制,缓冲区大小为4kb
③有名字
④数据无格式
⑤一次性操作
⑥执行完io操作之后,fifo文件继续存在与文件系统中
4、使用方法
FIFO文件的创建
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo( const char *pathname, mode_t mode);
参数:
pathname:FIFO的路径名+文件名。
mode:mode_t类型的权限描述符。
返回值:
成功:返回 0
失败:如果文件已经存在,则会出错且返回-1。
5、举例
1 #include <stdio.h> 2 3 #include <sys/types.h> 4 5 #include <sys/stat.h> 6 7 #include <fcntl.h> 8 9 #include <string.h> 10 11 int main(int argc,char*argv[]) 12 13 { 14 15 int fd; 16 17 int ret; 18 19 char buf[200]=""; 20 21 ret = mkfifo("my_fifo", S_IRUSR|S_IWUSR); 22 23 if(ret < 0) 24 25 { 26 27 perror("mkfifo"); 28 29 } 30 31 fd= open("my_fifo",O_RDWR|O_CREAT); 32 33 if(fd < 0) 34 35 { 36 37 perror("open"); 38 39 } 40 41 bzero(buf,sizeof(buf));// memset(buf,0,sizeof(buf)); 42 43 strcpy(buf,"hello china\n"); 44 45 ret=write(fd,buf,strlen(buf)); 46 47 if(ret < 0) 48 49 perror("write to fifo"); 50 51 bzero(buf,sizeof(buf));// memset(buf,0,sizeof(buf)); 52 53 ret=read(fd,buf,sizeof(buf)); 54 55 if(ret < 0) 56 57 perror("read from fifo"); 58 59 printf("buf read form my_fifo is %s\n",buf); 60 61 62 63 } 64 65 66 67
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?