文章目录

  • 前言
  • 一、创建、删除FIFO文件
    • 1. 用函数创建和删除 FIFO 文件
    • 2. 用命令创建和删除 FIFO 文件
  • 二、打开、关闭FIFO文件
  • 三、读写FIFO

前言

  无名管道只能在有亲缘关系的进程间通信,从而大大限制了管道的使用;有名管道突破了这个限制,通过指定路径名的形式实现不相关进程间的通信。


一、创建、删除FIFO文件

  创建 FIFO 文件与创建普通文件很类似,只是创建后的文件用于 FIFO 。

1. 用函数创建和删除 FIFO 文件

  创建 FIFO 文件的函数原型为:

 #include <sys/types.h>#include <sys/stat.h>int mkfifo(const char * pathname, mode_t mode);

  参数 pathname 为要创建的 FIFO 文件的全名路径;
  参数 mode 为文件访问权限,如 0666。
  如果创建成功,则返回 0,否则返回 -1。

  删除 FIFO 文件的函数原型为:

 #include <unistd.h>int unlink(const char * pathname);

2. 用命令创建和删除 FIFO 文件

  用命令 mkfifo 创建 FIFO 文件,不能重复创建。用命令 unlink 删除 FIFO 文件。创建完毕后,就可以访问 FIFO 文件了。
  一个终端:cat < myfifo
  另一个终端:echo “hello” > myfifo

二、打开、关闭FIFO文件

  对 FIFO 类型的文件的打开、关闭跟普通文件一样,都是使用 open 和 close 函数。如果打开时使用 O_WRONLY 选项,则打开 FIFO 写入端;如果使用 O_RDONLY 选项,则打开 FIFO 的读取端。写入端和读取端都可以被几个进程同时打开。
  管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用非常方便。不过值得注意的是,FIFO 是严格遵循先进先出规则的,对管道及 FIFO 的读总是从开始处返回数据,对它们的写则把数据添加到末尾,它们不支持如 lseek() 等文件定位操作,必须按照从前到后的顺序依次读写。
  如果以读取方式打开 FIFO,并且还没有其他进程以写入方式打开 FIFO,open 函数将被阻塞;同样,如果以写入方式打开 FIFO,并且还没有其他进程以读取方式打开 FIFO,open 函数也将被阻塞。但是,如果 open 函数中包含 O_NONBLOCK 选项,则在上述两种情况下调用 open 函数都不被阻塞。
  与 PIPE 相同,关闭 FIFO 时,如果先关闭读取端,将导致继续往下 FIFO 中写数据的进程接收 SIG_PIPE 信号。

三、读写FIFO

  可以采用与普通文件相同的读写方式读写 FIFO。


嵌入式Linux系统编程学习之二十一命名管道(FIFO)相关推荐

  1. 嵌入式Linux系统编程学习之二十无名管道(PIPE)

      管道是 Linux 进程间通信的一种方式,如命令 ps -ef | grep ntp .   无名管道的特点包括: 只能在亲缘关系进程间通信(父子或兄弟): 半双工(固定的读端和固定的写端): 它 ...

  2. 嵌入式Linux系统编程学习之二常用命令

    嵌入式Linux系统编程学习之二常用命令 文章目录 嵌入式Linux系统编程学习之二常用命令 前言 一.常用命令 1.su(用户切换) 2.useradd(添加用户) 3.passwd(修改密码) 4 ...

  3. 嵌入式Linux系统编程学习之二十八线程的等待退出

    文章目录 一.等待线程退出 二.线程的取消 三.线程终止清理函数 一.等待线程退出   线程从入口点函数自然返回,或者主动调用 pthread_exit 函数都可以让线程正常终止.线程从入口点函数自然 ...

  4. 嵌入式Linux系统编程学习之二十六多线程概述

    文章目录 一.多线程概述 二.线程分类 三.线程创建的Linux实现 一.多线程概述   进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段,这就造成进程在进行切换等操作 ...

  5. 嵌入式Linux系统编程学习之二十九线程的互斥

    文章目录 前言 一.创建和销毁锁 二.互斥锁属性 三.锁操作 四.加锁注意事项 五.加锁步骤 前言   在 Posix Thread 中定义了一套专门用于线程互斥的 mutex 函数.mutex 是一 ...

  6. 嵌入式Linux系统编程学习之二十四消息队列

    文章目录 前言 一.msgget 函数 二.msgsnd 函数 三.msgctl 函数 补充 前言   消息队列与 FIFO 很相似,都是一个队列结构,都可以有多个进程往队列里面写信息,多个进程从队列 ...

  7. 嵌入式Linux系统编程学习之二十三 System V 共享内存机制

    文章目录 前言 一.ftok 函数 二.shmget 函数 三.shmat 函数 四.shmdt 函数 五.shmctl 函数 补充 前言   共享内存也是进程间(进程间不需要有继承关系)通信的一种常 ...

  8. 嵌入式Linux系统编程学习之二十二内存映射

    文章目录 前言 一.mmap函数 二.munmap函数 三.补充 前言   内存映射函数包括 mmap.munmap 和 msync,其原型为: #include <unistd.h>#i ...

  9. 嵌入式Linux系统编程学习之二十五信号量

    文章目录 前言 一.System V IPC 机制:信号量 1. semget 函数 2. semop 函数 3. semctl 函数 二.Posix 有名信号量 前言   信号量与信号量集的概念如下 ...

最新文章

  1. 如何利用遗传算法进行自变量降维
  2. 【软件构造】第二章 软件构建的过程和工具(2)
  3. ERWin 7.1 和7.2 的官方FTP下载地址
  4. Windows7查看本地Java安装是否成功和路径的方法
  5. python 之 XML的基本应用总结
  6. 电脑实用mysql后C盘内存不足_电脑高手用这方法,终于解决了C盘空间不足的问题,网友:这操作服了...
  7. 方差为什么用平方不用绝对值_为什么戚风蛋糕用玉米油而不用黄油?
  8. SpringCloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine
  9. 阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
  10. Ubuntu输入ifconfig找不到IP地址,只有lo问题
  11. 初使用 ReportViewer 控件时遇到的一点小麻烦
  12. Java对json遍历_如何遍历Java中的json对象
  13. 推荐系列:2008年第05期 总7期
  14. 使用 ExtJS 实现 ASP.NET MVC 2 客户端验证
  15. python tkinter画动态时钟
  16. 批量修改图片尺寸,不用ps也可以
  17. html文件svchost,解决html文件的DropFileName = svchost.exe木马
  18. 一组Android机器人素材图片
  19. 2021年初级会计实物会计概述考试真题
  20. java 分层处理解耦_后端分层架构如何解耦?

热门文章

  1. python计算N维数据的笛卡尔积
  2. 正则匹配——python用一个正则表达式从字符串中提取数字(包括整数、小数、正负数)
  3. 解决pytorch CrossEntropyLoss报错RuntimeError: 1D target tensor expected, multi-target not supported
  4. 解决IDEA Maven项目无法下载依赖
  5. pytorch 保存、加载模型
  6. django创建新的项目、App与基本配置
  7. java查询比对是否重复_java-对象的ArrayList,比较对象并查找重复项,...
  8. mysql 排名_MySQL和Hive中的排名问题
  9. 中科大计算机考研科学岛,科学岛研究生_请问谁知道研究生去合肥科学岛与在学校的利与弊啊着急!!!!_淘题吧...
  10. JDBC之数据库的连接步骤(六步)