一、引言

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

函数原型:

int mkfifo(const char *pathname, mode_t mode); 

成功返回 0, 失败返回 -

命令:

mkfifo + 管道名   例:mkfifo fifo_one

操作步骤:

1) 通过命令行创建fifo;

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

二、例程

1) 创建fifi:

#mkfifio fifo_one

2) fifo 写函数

 #include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h> void sys_err(char *str)
{
perror(str);
exit(-);
}
int main(int argc, char *argv[])
{
int fd, i;
char buf[]; if (argc < ) {
printf("Please enter: ./a.out fifoname\n");
return -;
}
fd = open(argv[], O_WRONLY);//打开fifo
if (fd < )
sys_err("open"); i = ;
while () {
       printf("write fifo \n ");
9  sprintf(buf, "hello itcast %d\n", i++); //格式化输出到buf
write(fd, buf, strlen(buf)); //向fifo写入buf
sleep();
}
close(fd); return ;
}

3) fifo 读函数

 #include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h> void sys_err(char *str)
{
perror(str);
exit();
} int main(int argc, char *argv[])
{
int fd, len;
char buf[]; if (argc < ) {
printf("Please enter: ./a.out fifoname\n");
return -;
}
fd = open(argv[], O_RDONLY);//打开fifo
if (fd < )
sys_err("open");
while () {
len = read(fd, buf, sizeof(buf));//从fifo读取数据到buf
write(STDOUT_FILENO, buf, len); //将buf写入标准输出
sleep(); //多個读端时应增加睡眠秒数,放大效果.
}
close(fd);
return ;
}

编译执行:




3.2 进程间通信之fifo的更多相关文章

  1. linux 进程间通信 之fifo

    上一篇博客已经介绍了一种进程间通信的方式,但是那只是针对于有血缘关系的进程,即父子进程间的通信,那对于没有血缘关系的进程,那要怎么通信呢?  这就要创建一个有名管道,来解决无血缘关系的进程通信, fi ...

  2. 进程间通信之FIFO

    FIFO有时被称为命名管道.管道只能由相关进程使用,这些相关进程的共同祖先进程创建了管道.但是,通过FIFO,不相关的进程也能交换数据. FIFO是一种文件类型(参考http://www.cnblog ...

  3. 【APUE】进程间通信之FIFO

    FIFO也称为有名管道,它是一种文件类型,是半双工的.FIFO简单理解,就是它能把两个不相关的进程联系起来,FIFO就像一个公共通道,解决了不同进程之间的“代沟”.普通的无名管道只能让相关的进程进行沟 ...

  4. linux下的进程间通信概述

    管道(PIPE) FIFO(有名管道) XSI消息队列 XSI信号量 XSI共享内存 POSIX信号量 域套接字(Domain Socket) 信号(Signal) 互斥量(Mutex) 其中信号(s ...

  5. Python3 与 C# 并发编程之~进程先导篇

      在线预览:http://github.lesschina.com/python/base/concurrency/1.并发编程-进程先导篇.html Python3 与 C# 并发编程之- 进程篇 ...

  6. 20155339 《信息安全系统设计》第十周课下作业-IPC

    20155339 <信息安全系统设计>第十周课下作业-IPC 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的 ...

  7. 2017-2018-1 20155307 《信息安全系统设计基础》第十周课上未完成补充以及课下IPC作业

    课上内容2:stat命令的实现-mysate 学习使用stat(1),并用C语言实现 提交学习stat(1)的截图 man -k ,grep -r的使用 伪代码 产品代码 mystate.c,提交码云 ...

  8. Linux文件详解

    一.Linux文件类型分:普通文件.目录文件.链接文件.设备文件.管道文件. 1.普通文件:由ls -al显示属性时,第一个属性为 [-],例如 [-rwxrwxrwx].包括: 纯文本文件(ASCI ...

  9. Linux系统编程——进程间通信:命名管道(FIFO)

    命名管道的概述 无名管道,因为没有名字,仅仅能用于亲缘关系的进程间通信(很多其它详情.请看<无名管道>).为了克服这个缺点.提出了命名管道(FIFO).也叫有名管道.FIFO 文件. 命名 ...

随机推荐

  1. 买卖股票的最佳时机 - C++

    class Solution { public: /** * @param prices: Given an integer array * @return: Maximum profit */ in ...

  2. Anaconda中spyder 安装tensorflow

    关于Anaconda的安装就不介绍了,本文主要介绍spyder中安装 tensorflow.废话少说 直接重点: 1.安装好Anaconda之后,找到spyder图标 点击install,等待安装完成 ...

  3. php配置优化-生产环境应用版

    [global] error_log = log/php-fpm.log log_level = warning emergency_restart_threshold = 10 emergency_ ...

  4. how to determint wether two column equals

    question: How to determint  wether two column equals? Answer: Table one:RecordId = 1,CommonId = 5,Ap ...

  5. 从零搭建docker+jenkins 自动化部署环境

    从零搭建docker+jenkins+node.js自动化部署环境 本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker ...

  6. TP5.0:访问不同模块方法,跳转视图页面

    我们在开发项目时,都会给每个项目加上基本的后台管理页面,并命名为admin 那么,我们在添加admin后台模块后,怎么通过url访问admin后台模块文件代码呢? 1.访问admin模块默认文件的UR ...

  7. February 26 2017 Week 9 Sunday

    There is only one happiness in life, to love and be loved. 生命中只有一种幸福,爱与被爱. Some one told me that hea ...

  8. 插上翅膀,让Excel飞起来——xlwings(二)

    在上一篇插上翅膀,让Excel飞起来——xlwings(一)中提到利用xlwings模块,用python操作Excel有如下的优点: xlwings能够非常方便的读写Excel文件中的数据,并且能够进 ...

  9. 2018.12.2 Mac环境下mysql图形化界面的Navicat premium 12 中文版安装与激活

    软件链接: https://pan.baidu.com/s/1ZUNLQ1DW9rQZUzDXQn2rWQ 提取码: 8i78 复制这段内容后打开百度网盘手机App,操作更方便哦 注意最新版 12.0 ...

  10. conda清华镜像(TUNA)使用指南

    Details: https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ TUNA 提供了 Anaconda 仓库的镜像,运行以下命令: conda c ...