zoukankan      html  css  js  c++  java
  • 查漏补缺:进程间通信(IPC):FIFO

      1、FIFO

      FIFO,又称命名管道。不同于pipe管道的只能用于拥有共同祖先进程的两个进程间通信,因FIFO通过路径绑定,所以即使是不相关的进程间也可通过FIFO进行数据交换。

      FIFO是一种文件类型。通过stat结构的st_mode成员的编码可以确定文件是否是FIFO类型,可通过S_ISFIFO宏进行测试。

      2、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。

      mkfifo函数中mode参数的规格说明与open函数中mode的相同。

      mkfifoat函数和mkfifo函数相似,但mkfifoat函数可以用来在fd文件描述符表示的目录相关的文职创建一个FIFO。想其他*at函数一样,这里有3中情形:

      (1)若path参数指定的是绝对路径,则fd参数会被忽略,并且mkfifoat函数的行为和mkfifo类似

      (2)若path参数指定的是相对路径,则fd参数是一个打开目录的有效文件描述符,路径和目录有关

      (3)若path参数指定的是相对路径,且fd参数有一个特殊值AT_FDCWD,则以当前目录开始,mkfifoat和nkfifo类似

      使用mkfifohuomkfifoat创建FIFO时,要用open来打开它,一般文件的操作函数(close, read, write, unlink等)都可用于FIFO;

      3、非阻塞标志(O_NONBLOCK)的影响

      (1)没有指定O_NONBLOCK(一般情况),只读open要阻塞到某个其他进程为写而打开这个FIFO为止。类似的,只写open要阻塞到某个其他进程为读而打开这个FIFO为止。

      (2)如果指定了O_NONBLOCK,则只读open立即返回。但如果没有进程为读而打开一个FIFO,那么只写open返回-1,并将errno设置成ENXIO。

      4、FIFO用途

      (1)shell命令使用FIFO将数据从一条管道传送到另一条时,无需创建中间临时文件

      (2)客户进程--服务器进程应用程序中,FIFO用作汇聚点,在客户进程和服务器进程二者之间传递数据。

  • 相关阅读:
    在京东云擎上搭建自己的网站
    在新浪SAE上搭建自己的网站!
    GitHub在windows上代码管理教程
    mongodb在windows下安装教程
    nodejs在windows平台下搭建部署环境教程
    Windows下搭建PHP开发环境,整合Apache+PHP+MySQL(举例软件为32位)
    IIS7发布 EF MVC项目提示404.0页面错误解决方案
    “VS无法连接远程数据库”解决方案
    easyui的 getSelections 与 getSelected 对比区别
    Linq中int转String(解决LINQ to Entities 不识别方法"System.String ToString()",因此该方法无法转换为存储表达式.)
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/7688676.html
Copyright © 2011-2022 走看看