#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。

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值