描述 (DESCRIPTION)

一个 FIFO 特殊 文件 (又名 管道) 同 管道线 相似, 但是 它是 作为 文件 系统 的一部分 访问的. 可以 有 多个 进程 打开它 以供 读写. 当 进程 通过 FIFO 交换 数据的时候, 内核 在内部 传送 所有 数据 而 不会 把它 写入 文件 系统, 也就是说 FIFO 特殊 文件 在 文件 系统 中 没有 任何 内容, 文件 系统 项 只是 作为 进程 可以 用文件 系统 中的 一个 名字 来 访问 管道 的 一个 参照点.

内核 会 为 至少 有 一个 进程 打开 了的 FIFO 特殊 文件 维护 并且 也只 维护 一个管道 对象. 在 数据 传给 FIFO 之前, FIFO 的 两端 (读 和 写) 必须 同时 打开. 一般 来说 打开 FIFO 会 阻塞 直至 另一端 也 打开.

一个 进程 可以 以 非阻塞 模式 打开 一个 FIFO. 这种 情况下, 即使 写端 没有 打开, 打开 读端 还是 会 成功, 但是, 如果 读端 没有 打开, 打开 写端 会 失败, 并且 得到一个 ENXIO (设备 或 地址 不存在).

在 Linux 下, 不管 是 阻塞 还是 非阻塞 模式, 打开 一个 FIFO 用作 读 和 写 都会成功. POSIX 关于 这种 情况 没有 定义. 这个 可以 用来 在 读端 没有 打开 的 情况下 打开 写端. 一个 进程 在 同时 用 FIFO 的 两端 来 和 自己 通信 的 时候 要 特别注意 以防 死锁.

注意 (NOTES)

当 一个 进程 企图 向 读端 没有 打开 的 FIFO 写 数据 的 时候, 进程 会 收到 一个 SIGPIPE 信号. FIFO 特殊 文件 可以 用 mkfifo(3) 来 创建 并且 ls -l 会 给它 一个 特殊 的 标记.

fifo - 先进先出的特殊文件, 又名管道的更多相关文章

  1. [apue] FIFO:不是文件的文件

    众所周知,FIFO中文译为命名管道,是PIPE的升级版.而PIPE是管道,系统提供的一种进程间通讯方式,FIFO与PIPE有以下方面不同: 1) FIFO需要先在文件系统创建(mkfifo),之后使用 ...

  2. python使用deque实现fifo(先进先出)

    #2:deque还提供了append 和pop方法,在序列的两端都能以相同的速度执行#例子2:使用deque实现fifo(先进先出),如下:from collections import dequei ...

  3. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  4. Linux常用基本命令:grep-从文件或者管道中筛选匹配的行

    grep命令 作用:从文本文件或管道数据流中筛选匹配的行及数据,配合正则表达式一起使用,功能更加强大. 格式: grep [options] [pattern] [file] 1,匹配包含" ...

  5. Linux笔记之如何分割文件或管道流:split

    一.简介 在Linux中合并文件可以使用cat命令,后面跟上要合并的文件然后重定向到一个新的文件中即可,甚至可以追加合并.但如果要将一个大文件分割为多个小文件应该如何操作呢? 在Linux的coreu ...

  6. LINUX 文件/组/帮助/权限/文件压缩/管道

    Linux文件/目录详解 常用文件路径的作用 /var/log/messages 系统类的日志文件 /var/log/secure 登录日志文件 /var/spool/cron 定时任务目录 /etc ...

  7. 队列Queue FIFO先进先出 栈Stack FILO先进后出

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  8. 【读书笔记】管道和FIFO

    管道 提供一个单路(单向)数据流,可以为两个不同进程提供进程间的通信手段 #include <unistd.h> ]); 返回两个文件描述符,fd[0](读) 和 fd[1](写) 管道间 ...

  9. Linux进程间通信之管道(pipe)、命名管道(FIFO)与信号(Signal)

    整理自网络 Unix IPC包括:管道(pipe).命名管道(FIFO)与信号(Signal) 管道(pipe) 管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

随机推荐

  1. 死磕 java同步系列之synchronized解析

    问题 (1)synchronized的特性? (2)synchronized的实现原理? (3)synchronized是否可重入? (4)synchronized是否是公平锁? (5)synchro ...

  2. EOS 用户权限相关命令

    首先,环境相关的配置请参考https://www.cnblogs.com/hbright/p/9266420.html 在这里,我们一起看年EOS权限相关的东东.我们先查看hml这个用户的相关信息 h ...

  3. HDU2048 神、上帝以及老天爷

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=2048 看书发现了这道题,刚开始没理解题意,以为是中奖的概率,---> 1/n 后来知道了是典型的错排 ...

  4. k8s缩放应用程序

    参考:https://kubernetes.io/docs/tutorials/kubernetes-basics/ 步骤1:扩展部署 要列出部署,请使用GET部署命令:kubectl get dep ...

  5. having - 函数输出限制

    引用:https://zhidao.baidu.com/question/406745181.html 对函数输出进行限制 栗子: 比如,我们可能只希望看到Store_Information数据表中销 ...

  6. [题解](优先队列广搜)POJ_3635_Full Tank

    用二元组$(city,fuel)$即可记录所有状态,以当前花费为关键字优先队列,开数组记录直接做即可 有一个点在于每次不用枚举所有的加油数量,只需要加一即可,因为如果在加一升更优的话又会扩展出加更多油 ...

  7. vue实现复制功能(项目使用)

    安装依赖 npm install --save vue-clipboard2 用法: import Vue import VueClipboard from 'vue-clipboard2' Vue. ...

  8. c# log4Net 详细说明

    转载 http://www.cnblogs.com/kissazi2/p/3392605.html

  9. Migrations中的更新语句写法,摘要

    public override void Up() { AlterColumn("dbo.Dispositions", "Property1", c => ...

  10. Luogu P4478 [BJWC2018]上学路线 卢卡斯+组合+CRT

    首先,从$(0,0)$走到$(n,m)$的方案数是$ C_{n+m}^n$,可以把走的方向看作一种序列,这个序列长$ n+m$ ,你需要从中任取$n$个位置,让他向右走: 然后就是如何处理不能走的点: ...