fifo介绍

我们可以利用管道进行进程间通信,已经有匿名管道 为啥还要fifo 有名管道呢?有名管道是对匿名管道的一个补充,匿名管道是用在有血缘关系的进程间通信。fifo有名管道呢,可以用在任何进程间通信

函数原型 int mkfifo(const char *pathname, mode_t mode);第一个参数是匿名管道的路径,第二个参数创建有名管道的权限。当然man 手册是最好的文档,一定要自己试着去看man 手册。

fifo的使用

我们利用2个不相干的进行 通过fifo 有名管道进行通信。下面用fifo_read进程读数据,fifo_write进程写数据。

fifo_read.c

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>int main(int argc,char *argv[])
{if(argc < 2){printf("./fifo_read fifoName");exit(1);}int res = access(argv[1],F_OK);if(res==-1)//不可访问 或者 文件不存在{int re = mkfifo(argv[1],0664);if(re==0){printf("创建fifo文件成功,文件名:%s\n",argv[1]);}else{perror("mkfifo error");exit(1);}}int fd = open(argv[1],O_RDONLY);//从fifo中读数据char temp[1024]={0};while(1){read(fd,temp,sizeof(temp));printf("从fifo中读取数据:%s\n",temp);}close(fd);return 0;
}

fifo_write.c

#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>int main(int argc,char *argv[])
{if(argc < 2){printf("./fifo_write fifoName");exit(1);}int res = access(argv[1],F_OK);if(res==-1)//不可访问 或者 文件不存在{int re = mkfifo(argv[1],0664);if(re==0){printf("创建fifo文件成功,文件名:%s\n",argv[1]);}else{perror("mkfifo error");exit(1);}}int fd = open(argv[1],O_WRONLY);//往fifo中写数据char str[100] = "hello laymond";while(1){sleep(1);write(fd,str,sizeof(str));printf("写入一条数据:%s\n",str);}close(fd);return 0;
}

代码运行检测

Linux系统编程:fifo有名管道的使用相关推荐

  1. Linux系统编程阶段:管道和信号相关知识及部分函数介绍。

    进程间的通讯方式: 管道.信号.共享内存.消息队列.信号量.套接字 1.管道 1)无名管道 特点: 不会在进程空间产生一个实实在在的管道文件: 只有用于亲缘关系的进程: 数据读出后就不存在管道: 创建 ...

  2. 【Linux系统编程学习】匿名管道pipe与有名管道fifo

    此为牛客Linux C++和黑马Linux系统编程课程笔记. 0. 关于进程通信 Linux环境下,进程地址空间相互独立,每个进程各自有不同的用户地址空间.任何一个进程的全局变量在另一个进程中都看不到 ...

  3. linux有名管道数据异常,Linux系统编程—有名管道

    ▋****1. 管道的概念 管道,又名「无名管理」,或「匿名管道」,管道是一种非常基本,也是使用非常频繁的IPC方式. 1.1 管道本质 管道的本质也是一种文件,不过是伪文件,实际上是一块内核缓冲区, ...

  4. Linux系统编程---4(进程间通信IPC,管道)

    进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源. 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止 时 ...

  5. Linux系统编程-管道入门

    晚上好,继续记录我的学习心得. 当你厌倦了自己的目标时,怎样继续保持专注? 误区: 成功人士说的都是自己如何"满怀热情"去努力实现他们的目标.不管是在商业.体育还是艺术界,我们听到 ...

  6. 【Linux系统编程】进程间通信之无名管道

    00. 目录 文章目录 00. 目录 01. 管道概述 02. 管道创建函数 03. 管道的特性 04. 管道设置非阻塞 05. 附录 01. 管道概述 管道也叫无名管道,它是是 UNIX 系统 IP ...

  7. Linux系统编程- 无名管道(匿名管道)

    无名管道作为Linux进程间通讯,我们这里把理论和实际结合起来说明. 1.什么是管道 管道,英文位pipe,在学习linux系统编程一个重要概念.它的发明人是道格拉斯.麦克罗伊,这位也是UNIX上早期 ...

  8. linux系统编程_Linux系统编程:进程间通信

    进程的重要性对于编程人员来说,至关重要,那么,进程间是如何通信的呢?在一个大的项目中,进程间的通信有哪些方式,这对于我们程序员来说也是很重要的一个点?那么本节我们就来聊聊进程间通信的方式,以及各自的优 ...

  9. 实验六 Linux进程编程,Linux系统编程实验六:进程间通信

    <Linux系统编程实验六:进程间通信>由会员分享,可在线阅读,更多相关<Linux系统编程实验六:进程间通信(10页珍藏版)>请在人人文库网上搜索. 1.实验六:进程间通信l ...

最新文章

  1. 【6.1】python中的变量是什么
  2. Storm精华问答 | Kafka在Storm中的角色是什么?
  3. 深度学习资源一网打尽!论文、数据集、框架、课程、图书等应有尽有
  4. c# 定义operator运算符
  5. 从淘宝,天猫,1688,微店,京东,苏宁,淘特等其他平台一键复制商品到拼多多平台(批量上传宝贝详情接口教程)
  6. 显卡测试软件硬盘版怎么安装,显卡检测软件(Alexander)
  7. 《多媒体在初中数学中的运用研究》课题研究方案
  8. Docker bridge 模式 容器如何访问外部世界?
  9. 软件项目管理案例复习题
  10. 软件推荐:16个你还没用过的优秀软件(多个类别)
  11. modbus4j.jar实现modbus urt模式
  12. 再仔细读读react18官方文档吧 20220526
  13. 【超实用】在微信文章中点击号码直接拨打电话,轻松运营~
  14. linux :安装中文输入法
  15. cad 打开硬件加速卡_CAD经常性卡顿?要怎么解决?
  16. 377. 组合总和 Ⅳ
  17. POA理论:不要被你的目标欺骗了你
  18. 判断三角形是逆时针还是顺时针
  19. 修改命令提示符和PS1变量
  20. sicily 1214

热门文章

  1. KMP字符串比对算法理解
  2. 电脑怎么换自己的壁纸_怎么才能给自己的爱机一个合理的价格—想把自己电脑回收的...
  3. 推荐一款自动化代码变量命名在线工具
  4. redis 图片2进制保存_Redis数据结构底层的SDS了解吗
  5. Linux学习之C语言的进程与线程编程
  6. number输入框限制输入数字位数、字体随数字长度变化
  7. C语言switch制作菜单例题,c语言入门之,switch语句习题。
  8. 编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...
  9. uint16 累加_如何把一个uint16整数分解成两个字节并传输?
  10. Windows破解逆向-CrackMe_1实例(使用IDA Pro修改静态区资源)