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用作汇聚点,在客户进程和服务器进程二者之间传递数据。

  • 相关阅读:
    章节三、2-方法_演示实例
    章节三、1-方法
    章节二、5-数组
    章节二、4-String以及StringBuffer和StringBuilder的对比
    章节二、3-字符串类方法
    章节二、2-String 引用数据类型-字符串类
    章节二、1-java概述-数据类型
    需求管理做不好,等着9-12-7吧
    谈谈软件项目的风险管理
    《Spring Boot Cook Book》阅读笔记
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/7688676.html
Copyright © 2011-2022 走看看