进程间通信-有名管道(FIFO)

本文介绍了Linux有名管道(FIFO)的概念、创建与读写方法,以及与无名管道的区别。FIFO作为存在于文件系统中的特殊文件,允许不同进程间进行通信,即使它们没有亲缘关系。通过mkfifo函数创建有名管道,并通过open、read和write系统调用进行读写操作。在读写过程中,有名管道的阻塞情况与无名管道有所不同。
摘要由CSDN通过智能技术生成

9.2.1有名管道概念

无名管道是临时的,在完成通信后自动消息,因为文件描述符只能在某个进程中可见,因此被广泛用于具有亲缘关系的进程间通信,采用的方法是先创建管道,再创建进程,使子进程继承父进程创建的管道文件描述符。

有名管道FIFO有效克服了这一问题,它依赖于文件系统,是一个存在的特殊文件,实现不同进程对文件系统下的某个文件访问是非常方便实现的。因此,FIFO可以在同主机任意进程间实现通信。

有名管道和普通文件一样具有磁盘存放路径、文件权限和其他属性;但是,有名管道和普通文件又有区别,有名管道并没有在磁盘中存放真正的信息,他存储的通信信息在内存中,两个进程结束后自动消失,拥有一个磁盘路径仅仅是一个接口,其目的是使进程间信息的编程更简单统一。通信的两个进程结束后,有名管道的文件路径本身依然存在,这是和无名管道不一样的。

9.2.2有名管道及其特殊性

1.创建有名管道
mkfifo用来创建有名管道,它有两个参数,分别用来指定生成的管道和该管道的文件属性,char *__path为要创建的管道文件名,mode为生成文件的模式。此函数声明:

extern int mkfifo(__const char *__path, __mode_t __mode);

mkfifo会根据参数建立特殊的有名管道文件,该文件必须不存在,而参数mode为该文件的权限,mkfifo建立的fifo文件的其他进程都可以用读写一般文件的方式存取。当使用open函数打开fifo文件时,O_NONBLOCK会有影响。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值