FIFO又被称为命名管道,未命名的管道只能在两个相关的进程之间使用,而这两个相关的进程还要有一个共同创建了它们的祖先进程,但是FIFO,不相关的进程之间也能交换数据。

FIFO是一种文件类型。通过stat结构的st_mode成员的编码可以知道文件是否是FIFO类型,在linux下查看自己创建的FIFO文件:

创建FIFO类似于创建文件,也存在于文件系统之中。定义如下:

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

两个函数返回值:若成功返回0,失败则返回-1,使用方法参照open函数。

编写自己的后台FIFO读取程序:

 #include <stdio.h>
#include <sys/stat.h>
#include <errno.h>
#include <fcntl.h> int main(int argc, char* argv[])
{
int fd;
int nRead;
char szBuff[];
const char* szPath = "/tmp/fifo"; //临时目录的一个fifo,可以在程序里创建也可以在shell里创建 fd = open(szPath, O_RDONLY, );
if (- == fd)
{
printf("open fifo error\n");
goto exit;
} while()
{
if((nRead = read(fd, szBuff, sizeof(szBuff))) == -)
{
if (errno == EAGAIN)
printf("no data\n");
}
if (szBuff[] == 'Q')
break;
szBuff[nRead] = '\0';
printf("data:%s\n", szBuff);
sleep();
}
exit:
return ;
}

使用cc fifo.c 编译成功后得到a.out,在命令提示符下输入:

 $ ./a.out &
[] //这里是进程ID回现

将a.out程序作为一个后台进程运行。

在终端创建fifo(也可以在程序内创建):

 $ mkfifo /tmp/fifo
$ ls -ln /tmp/fifo
prw-rw-r-- 10月 : /tmp/fifo

我们使用linux自带的tee回现程序和a.out进行通信。

 $ tee /tmp/fifo    //标准输出到fifo
hello fifo! // 这里是我输入的
hello fifo! // 这里是tee回现功能
data:hello fifo! // 这里是a.out回应 q
q
data:q // 这里是a.out回应 Q
Q
hello fifo?
hello fifo?
[]+ 完成 ./a.out

至此a.out与tee两个进程之间的通信已经完成了。

进程间通信IPC-命名管道FIFO的更多相关文章

  1. 进程间通信___命名管道(FIFO)

    命名管道(FIFO) 基本概念 命名管道和一般的管道基本相同,但也有一些显著的不同: 命名管道是在文件系统中作为一个特殊的设备文件而存在的. 不同祖先的进程之间可以通过管道共享数据. 当共享管道的进程 ...

  2. 进程间通信:命名管道FIFO(2)

    一.命名管道 如果我们想在不相关的进程之间交换数据,可以用FIFO文件来完成这项工作,它通常也被称为命名管道.命名管道是一种特殊类型的文件,它在文件系统中以文件名的形式存在,但是它的行为却和我们已经见 ...

  3. 进程间通信系列 之 命名管道FIFO及其应用实例

    进程间通信系列 之 概述与对比   http://blog.csdn.net/younger_china/article/details/15808685  进程间通信系列 之 共享内存及其实例   ...

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

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

  5. IPC——命名管道

    Linux进程间通信——使用命名管道 转载:http://blog.csdn.net/ljianhui/article/details/10202699 在前一篇文章——Linux进程间通信——使用匿 ...

  6. Linux学习笔记25——命名管道(FIFO)

    1 命名管道(FIFO) 管道应用的一个重大缺陷就是没有名字,因此只能用于亲缘进程之间的通信.后来从管道为基础提出命名管道(named pipe,FIFO)的概念,该限制得到了克服.FIFO不同于管道 ...

  7. 【Linux 应用编程】进程管理 - 进程间通信IPC之管道 pipe 和 FIFO

    IPC(InterProcess Communication,进程间通信)是进程中的重要概念.Linux 进程之间常用的通信方式有: 文件:简单,低效,需要代码控制同步 管道:使用简单,默认阻塞 匿名 ...

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

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

  9. 《Linux 进程间通信》命名管道:FIFO

    命名管道的主要用途:不相关的进程之间交换数据. 命令行上创建命名管道: $ mkfifo filename  程序中创建命名管道: #include <sys/types.h> #incl ...

  10. 命名管道FIFO和mkfifo函数

    进程间通信必须通过内核提供的通道,而且必须有一种办法在进程中标识内核提供的某个通道,前面讲过的匿名管道是用打开的文件描述符来标识的.如果要互相通信的几个进程没有从公共祖先那里继承文件描述符,它们怎么通 ...

随机推荐

  1. sql中with as测试实例

    一.使用场景 1.多处使用才有必要2.一方面减少代码数量便于理解维护3.一方面跟代码一样一次计算到处用 二.实例(本处示例仅为测试,实际用join比较好) 1.不使用with as 2.使用with ...

  2. PHP常见的一些问题总结(收藏)

    本篇文章给大家带来的内容是关于PHP常见的一些问题总结(收藏),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1. 字符串定义的时候单引号和双引号有什么区别? 单引号加载速度比双引号 ...

  3. windows Sql server performance monitor

    对于sql server 性能的监控主要从2个方面: 1. sql server自带的监控 Management->SQL Server Logs->Activity Monitor 在这 ...

  4. ProcessHacker学习笔记

    ProcessHacker学习笔记 ProcessHacker是一款拥有windows任务管理器的开源软件.学习该软件,可增长windows操作系统多方面系统机制知识和性能统计设计的能力. 1.获取进 ...

  5. 游戏脚本编程 文本token解析

    一个数字的组成由以下几个字符 正负号 + -   小数点 .   数字 0-9 比如 3 -3 3.13 -34.2234 但是符号和小数点不会出现多次 那么识别流程用图来表示 则是 整数 浮点数 一 ...

  6. 达里奥:典型的去杠杆化过程是怎么进行的zz

    猛人RayDalio的“三部曲”之三:关于去杠杆化的深入理解 作者系统地阐述了去杆杠化过程并深入探讨去杆杠化的运作机理,对我们理解当前全球乃至中国.即将或者已经面临的去杠杆化过程,应当能够带来一些帮助 ...

  7. 【转】Linux中的EAGAIN含义

    在Linux环境下开发经常会碰到很多错误(设置errno),其中EAGAIN是其中比较常见的一个错误(比如用在非阻塞操作中). 从字面上来看,是提示再试一次.这个错误经常出现在当应用程序进行一些非阻塞 ...

  8. java_io

    JAVA IO流(一)参考文章:http://ifeve.com/java-io-network/,并发编程网原创文章,转载请注明: 转载自并发编程网 – ifeve.com本文链接地址: Java ...

  9. ASP.NET MVC下使用AngularJs语言(三):ng-options

    今天使用angularjs的ng-options实现一个DropDownList下拉列表. 准备ASP.NET MVC的model: public class MobilePhone { public ...

  10. ASP.NET MVC下使用AngularJs语言(一):Hello your name

    新春节后,分享第一个教程. 是教一位新朋友全新学习ASP.NET MVC下使用AngularJs语言. 一,新建一个空的Web项目.使用NuGet下载AngularJs和jQuery.二,配置Bund ...