• 查漏补缺:进程间通信(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用作汇聚点,在客户进程和服务器进程二者之间传递数据。

  • 相关阅读:
    python openpyxl 封装Execl常用操作的方法
    python webdriver grid多节点运行webdriver程序
    url的正则表达式
    基于Erlang VM的函数式编程语言Elixir
    [整理]团队开发效率提升探索一
    FreeBSD应该装gnome3做桌面
    FreeBSD pkg仓库有台湾的镜像了
    再探OAuth2
    【转】Android世界的Swift
    内存只有4G的MBP要怎么破
  • 原文地址:https://www.cnblogs.com/lianshuiwuyi/p/7688676.html
Copyright © 2020-2023  润新知