与“无名管道”不同的是,FIFO拥有一个名称来标志它,所谓的名称实际上就是一个路径,比如“/tmp/my_fifo”,其对应到磁盘上的一个管道文件,如果我们用file命令来查看其文件类型的话,会得到如下输出:

my_fifo: fifo (named pipe)

为了简化对FIFO的理解,我们可以这样来假想:进程A在磁盘上创建了一个名为my_fifo的文件,并向其中写入一些数据,然后进程B打开该文件,并将数据从文件中读出,这样我们便实现了进程A和进程B之间的通信。大致原理如此,只不过FIFO做了更精细的一些操作,以便实现起来更可靠.

int mkfifo (char* path, mode_t mode)

该函数负责创建FIFO管道,其需要头文件,参数path即要创建的管道文件存放位置,mode参数即文件权限。FIFO管道创建完成以后,便可以使用open函数来打开它,然后进行读写操作了。

下面这个demo,其将测试数据由进程A传递给进程B(为防止混淆视线,我将一些条件判断和异常处理代码删掉了)

先创建一个程序A,其负责创建FIFO管道,并向其中写入一些数据:

/*

* process A: create FIFO and write data

*/

#include

#include

#include

#include

#include

#include

#include

#include

#define FIFO_NAME "/tmp/my_fifo"

int main()

{

int pipe_fd;

//if the pipe file do not exist

if (access(FIFO_NAME, F_OK) == -)

{

//creat FIFO pipe file

mkfifo(FIFO_NAME, );

}

//open FIFO pipe file.

//this will be brocked until some one open another end point(read-point) of this pipe

pipe_fd = open(FIFO_NAME, O_WRONLY);

//write data into pipe

write(pipe_fd, "hi, this is a test", PIPE_BUF);

//close FIFO pipe file descriptor

close(pipe_fd);

return ;

}

然后创建程序B,它从管道中读取数据并显示出来:

/*

* process B: read data from FIFO

*/

#include

#include

#include

#include

#include

#include

#include

#include

#define FIFO_NAME "/tmp/my_fifo"

#define BUFFER_SIZE PIPE_BUF

int main()

{

int pipe_fd;

char buffer[BUFFER_SIZE + ];

//reset all bytes in buffer as '\0'

memset(buffer, '\0', sizeof(buffer));

//open FIFO pipe file.

//this will be brocked until some one open another end point(write-point) of this pipe

pipe_fd = open(FIFO_NAME, O_RDONLY);

if(read(pipe_fd, buffer, BUFFER_SIZE) > )

{

printf("data from FIFO : %s\n", buffer);

}

//close pipe file descriptor

close(pipe_fd);

return ;

}

运行下程序便会发现,无论是先运行A或是B,先运行起来的都会等待另外一个,这时open函数第二个参数的原因,我们可以添加O_NONBLOCK选项来取消阻塞。

Linux中的pipe(管道)与named pipe(FIFO 命名管道)

catalogue . pipe匿名管道 . named pipe(FIFO)有名管道 1. pipe匿名管道 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常 ...

linux进程学习笔记

学习了linux下的进程,觉得应该整理一下,忘得差不多了,顺便回顾一下. 学而时习之,不亦说乎~~ 进程笔记 ,什么是进程? The Single UNIX Specification, Versio ...

linux 进程学习笔记-进程pipe管道

所谓“进程间通信(IPC,inter-process communication)”,按照其目的讲就是让进程之间能够“共享数据”,“传输数据”,“事件通知”等,我所知道的一共有“管道” “信号” “消 ...

Linux 进程学习笔记

1.什么是程序?什么是进程?它们有什么区别? 定义: 程序:程序(Program)是一个静态的命令集合,程序一般放在磁盘中,然后通过用户的执行来触发.触发后程序会加载到内存中成为一个个体,就是进程. ...

linux 进程学习笔记-进程ID,PID

PID,进程号 , 范围在2~(??为什么需要这么多),而一个名为idle (或swapper)的进程占据的编号0,init进程占据了编号1. 进程0和进程1 : 系统启动时会从无到有地创建进程0,它 ...

linux 进程学习笔记-进程调度

在分时系统中,系统将CPU时间划分成无数个时间片(quantum)分配给不同的进程,一个时间片只执行一个进程,并且不停地切换,以让用户感觉到各个进程是在“同时运行”,这中间所需要的策略和算法便是进程调 ...

linux 进程学习笔记-进程跟踪

进程跟踪 long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data); Linux用ptrace来进行进 ...

linux 进程学习笔记-进程信号sigal

信号(或软中断)是在软件层次上对中断的一个模拟,其运行在“用户空间”,一个进程对另外一个或几个进程通过发送信号来实现异步通信.当接收进程接收到信号后,其可以注册一下处理函数来说对这些信号进行处理(也可 ...

linux 进程学习笔记-运行新进程

我们知道,当用fork启动一个新进程以后,新进程会复制父进程的大部份内存空间并接着运行父进程中的代码,如果我们使新进程不运行原父进程的代码,转而运行另外一个程序集中的代码,这就相当于启动了一个新程序. ...

随机推荐

初识SSH框架

想了解SSH的工作原理吗?还不快快来看我的新文章----ssh框架的工作原理 也许你还不知道SSH存在的意义,但只是因为在没点开这篇文章之前的事了. SSH由Strut2,Spring,Hiberna ...

java判断字符串是否为数字或中文或字母

个人认为最好的方法 *各种字符的unicode编码的范围:     * 汉字:[0x4e00,0x9fa5](或十进制[19968,40869])     * 数字:[0x30,0x39](或十进制 ...

Sunday算法(字符串查找、匹配)

字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上,KMP算法并不比最简单的 ...

TCP/IP详解学习笔记(11)-TCP交互数据流,成块数据流

目前建立在TCP协议上的网络协议特别多,有telnet,ssh,有ftp,有http等等.这些协议又可以根据数据吞吐量来大致分成两大类:(1)交互数据类型,例如telnet,ssh,这种类型的协议在大 ...

wpf下拉框不能多选的原因

我用Cocos2d-x模拟《Love Live!学院偶像祭》的Live场景(二)

上一章分析了Live场景中各个元素的作用,这一章开始来分析最关键的部分——打击物件的实现. 上一章放出的视频很模糊,先来看一个清晰版的复习一下:http://www.bilibili.com/vide ...

[java,2019-01-25] 图片和二进制互转

import java.awt.image.BufferedImage; import java.io.ByteArrayInputStream; import java.io.ByteArrayOu ...

Windows系统崩溃后快速恢复Oracle数据库的妙招

Windows系统崩溃后快速恢复Oracle数据库,以下是操作步骤 假设oracle数据安装在d:\\oracle文件夹中,数据库名称orcl 1>将崩溃的数据库安装目录"d:\\or ...

CS100.1x-lab4_machine_learning_student

这是这门课第一次接触机器学习,主题是Predicting Movie Ratings.难度比上一次作业要简单点..上一次作业真的挺难...相关ipynb文件见我github. 这里我们会用到Spark ...

Pinger2

import java.io.IOException;import java.io.InputStreamReader;import java.io.LineNumberReader;import j ...

linux pipe 命名管道,linux 进程学习笔记-named pipe (FIFO)命名管道相关推荐

  1. Linux与C++11多线程编程(学习笔记)

    多线程编程与资源同步 在Windows下,主线程退出后,子线程也会被关闭; 在Linux下,主线程退出后,系统不会关闭子线程,这样就产生了僵尸进程 3.2.1创建线程 Linux 线程的创建 #inc ...

  2. Linux内存从0到1学习笔记(4,TLB)

    一.TLB简介 Kernel初始化的时候,会在初始化内存中创建页表:而处理器读取指令和数据的时候需要首先通过MMU查表得到物理地址,然后在访问物理地址读取指令或数据.MMU查表过程汇中需要4次访问内存 ...

  3. IC学习笔记3——异步FIFO

    IC学习笔记3--异步FIFO 异步FIFO的工作内容与同步FIFO类似,但是异步FIFO的控制并不像同步FIFO那么简单,因为异步FIFO工作在不同的时钟域,这将会带来一些问题,比如空满检测?是否还 ...

  4. 《Linux就该这么学》学习笔记

    文章目录 一. 部署虚拟环境安装Linux系统 1. 安装VMware和Linux系统 2. 重置root管理员密码 3. RPM:红帽软件管理器 常用命令 4. Yum软件仓库 常用命令 5. sy ...

  5. linux oracle流复制文件,【学习笔记】Oracle ASM linux dd命令复制asm中文件 操作磁盘或者分区...

    天萃荷净 使用dd复制asm中文件,随着数据库新版本的推广ASM肯定会越来越被重视,最近准备系统的学习下ASM,以备突发情况需要,这是asm深入学习笔记 1.查询ASM某个数据文件AU信息 SQL&g ...

  6. linux查看ogg客户端版本,OGG学习笔记05-OGG的版本

    刚接触OGG的时候,很容易被众多的版本搞晕,虽然官方有提供各版本对应认证OS和DB的表格. 个人认为一个比较简单的方式,是直接去edelivery.oracle.com下载OGG,选定一个大版本后,这 ...

  7. 国嵌linux内核编程,国嵌视频学习笔记---linux内核开发1

    一.linux内核简介 1.linux系统由两部分组成:内核空间和用户空间. 2.用户空间包括:用户应用程序和C库 3.内核空间包括:系统调用接口.内核和体系结构相关代码. 4.ARM处理器7种工作模 ...

  8. 《Linux就该这么学》学习笔记0

    兜兜转转半辈子,又回归了起源. 如果时光能重来一次,我一定选择计算机专业. ---------------- 第0章  前言 0-1 Hello World! 0-2 写作初衷 0-3 学习是件苦差事 ...

  9. linux getline函数用法,Linux文本处理三剑客之awk学习笔记05:getline用法详解

    getline用法详解 在默认情况下,awk支持从文件或者STDIN中读取数据.我们也可以使用getline来灵活读取数据,例如在main代码块执行过程中读取某个非待处理文件的数据,或者从某个读取某个 ...

最新文章

  1. 服务器php将视频转为m3u8,php应用ffmpeg对mp4文件转换并生成m3u8视频流文件
  2. 奥特linux系统监控,奥特曼知识大挑战答案
  3. 使用angular2 自带的指令,快捷创建服务,组件等!
  4. C++:用成员初始化列表对数据成员初始化
  5. 北风设计模式课程---13、享元模式
  6. jmeter服务器测试项目,JMeter-项目测试
  7. .net core 微服务之API网关 开源中间件 Ocelot 笔记
  8. win7下安装python失败问题_win7下安装ipython失败
  9. 查看iOS App的bundleId
  10. qq音乐下载|qq音乐播放器下载
  11. php排斥ajaxsubmit函数,关于php:ajaxsubmit错误捕获
  12. Matplotlib可视化数据分析图表下(常用图表的绘制、折线图、柱形图、直方图、饼形图、散点图、面积图、热力图、箱形图、3D图表、绘制多个图表、双y轴可视化图表、颜色渐变图)
  13. R语言基础 | t检验、F检验
  14. php中以双下划线打头的作用
  15. 【Mysql索引】二叉树、红黑树、B树、B+树
  16. SSD Performance测试简介
  17. PHP + Redis抢购秒杀
  18. bgl 词典_外语学习之词典推荐
  19. 1.2 嵌入式微处理器体系结构
  20. wpf mysql 框架_带有 WPF 和实体框架6的简单数据应用 - Visual Studio | Microsoft Docs

热门文章

  1. yum 安装mysql ,完整教程
  2. 注会审计教学视频课件下载
  3. Office如何设置主题颜色/主题色
  4. 循环链表构建及解决约瑟夫环、逢七过、链表逆置问题
  5. 通过svg方式绘制图形(SimpleMarkerSymbol)并打印(ArcGIS API for JavaScript3系列)
  6. 蓝桥杯 核桃的数量(最小公倍数)
  7. 使用python 批量将 HEIC格式图片转换成JPG或者PNG格式的图片
  8. WIN7以上系统WDDM虚拟显卡开发
  9. 大二第二学期周学习进度总结(三)
  10. Java个人技术知识点总结(业务场景篇,java高级多线程面试