#Linux#进程间通信# 管道(pipe)-命名管道fifo

命名管道(named pipe)又被称为先进先出队列(FIFO),是一种特殊的管道,存在于文件系统中。命名管道与管道非常类似,但是又有自身的显著特征:

  • 命名管道可以用于任何两个进程间的通信,而不限于同源的两个进程。
  • 命名管道作为一种特殊的文件存放在文件系统中,而不是像管道那样存放在内核中。当进程对命名管道的使用结束后,命名管道依然存在于文件系统中,除非对其进行删除操作,否则该命名管道不会自行消失。

和管道一样,命名管道也只能用于数据的单向传输,如果要用命名管道实现两个进程间数据的双向传输,建议使用两个单向的命名管道。

可以通过命令行命令 mkfifo 或 mknod 创建命名管道:

int mkfifo(const char *pathname, mode_t mode);
  • pathname: 是一个字符串指针,用于存放命名管道的文件路径。
  • mode: 用于表示指定所创建文件的权限。S_IFIFO | 0666;
  • 成功时返回 0;调用失败时返回 -1。
     
int mknod(char *pathname, mode_t mode, dev_t dev);
  • pathname: 是一个字符串指针,用于存放命名管道的文件路径。
  • mode: 用于表示指定所创建文件的权限。S_IFIFO | 0666;
  • dev_t:类型为 S_IFCHR 或 S_IFBLK 的时候该文件才有设备号,创建普通文件时传入0。即可创建命名管道时,为第三个参数 dev 传递 0表示该文件不是一个设备文件。
  • 成功时返回 0;调用失败时返回 -1。

至此,我们再次来回顾下三种管道的差异

发布了170 篇原创文章 · 获赞 207 · 访问量 459万+

猜你喜欢

转载自blog.csdn.net/xiaoting451292510/article/details/103730994