博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3.2 进程间通信之fifo
阅读量:6302 次
发布时间:2019-06-22

本文共 1767 字,大约阅读时间需要 5 分钟。

一、引言

  FIFO常被称为有名管道,不同于管道(pipe)。pipe仅适用于“有血缘关系”的IPC。但FIFO还可以应用于不相关的进程的IPC。实际上,FIFOLinux基础文件类型中的一种,是在读写内核通道。

函数原型:

 

int mkfifo(const char *pathname, mode_t mode); 成功返回 0, 失败返回 -1

 

命令:

mkfifo + 管道名   例:mkfifo fifo_one

操作步骤:

1) 通过命令行创建fifo;

2) 使用open、close、read、write等I/O函数操作fifo

二、例程

1) 创建fifi:

#mkfifio fifo_one

2) fifo 写函数

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 void sys_err(char *str)10 {11 perror(str);12 exit(-1);13 }14 int main(int argc, char *argv[])15 {16 int fd, i;17 char buf[4096];18 19 if (argc < 2) {20 printf("Please enter: ./a.out fifoname\n");21 return -1;22 }23 fd = open(argv[1], O_WRONLY);//打开fifo24 if (fd < 0) 25 sys_err("open");26 27 i = 0;28 while (1) {        printf("write fifo \n "); 29  sprintf(buf, "hello itcast %d\n", i++); //格式化输出到buf31 write(fd, buf, strlen(buf)); //向fifo写入buf32 sleep(1);33 }34 close(fd);35 36 return 0;37 }

3) fifo 读函数

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 9 void sys_err(char *str)10 {11 perror(str);12 exit(1);13 }14 15 int main(int argc, char *argv[])16 {17 int fd, len;18 char buf[4096];19 20 if (argc < 2) {21 printf("Please enter: ./a.out fifoname\n");22 return -1;23 }24 fd = open(argv[1], O_RDONLY);//打开fifo25 if (fd < 0) 26 sys_err("open");27 while (1) {28 len = read(fd, buf, sizeof(buf));//从fifo读取数据到buf29 write(STDOUT_FILENO, buf, len); //将buf写入标准输出30 sleep(3); //多個读端时应增加睡眠秒数,放大效果.31 }32 close(fd);33 return 0;34 }

编译执行:

转载于:https://www.cnblogs.com/lxl-lennie/p/10242563.html

你可能感兴趣的文章
php创建桌面快捷方式实现方法
查看>>
0927集合作业
查看>>
基于jquery实现的超酷动画源码
查看>>
fl包下的TransitionManager的使用
查看>>
Factorialize a Number
查看>>
[USB-Blaster] Error (209040): Can't access JTAG chain
查看>>
TreeSet的用法
查看>>
防HTTP慢速攻击的nginx安全配置
查看>>
深入理解PHP内核(十四)类的成员变量及方法
查看>>
Spring Boot2.0+中,自定义配置类扩展springMVC的功能
查看>>
参与博客编辑器改版,我的礼物 感谢51cto
查看>>
JavaWeb笔记——JSTL标签
查看>>
Eclipse插件大全 挑选最牛的TOP30
查看>>
一些实用性的总结与纠正
查看>>
Kubernetes概念
查看>>
逻辑卷管理器(LVM)
查看>>
一个小代码,欢迎大佬的意见,求指正
查看>>
搭建LAMP架构
查看>>
神经网络注意力机制--Attention in Neural Networks
查看>>
Spring.Net+WCF实现分布式事务
查看>>