FIFO有名管道

本文介绍了Linux中的FIFO(有名管道)作为进程间通信(IPC)的一种方式。FIFO是一种特殊的文件类型,不存储数据,仅用作内核中的通道。通过mkfifo函数可以创建有名管道,其特性包括严格的先进先出规则,以及需要双方进程同时打开才能进行读写。FIFO的使用包括阻塞和非阻塞模式,并且可以利用access函数检查访问权限。文件也可用于IPC,因为子进程可以继承父进程的文件描述符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FIFO是linux基础文件类型中的一种。FIFO文件在磁盘上没有数据快,仅仅用来标识内核中一条通道。个进程可以打开这个文件进行read/write,实际上是在读写内核通道,这样就实现了进程间通信。

有名管道是对无名管道的一种改进,它具有以下集中特点:

1.他可是是互不相关的两个进程间实现彼此通信;

2.该管道可以通过路径名来指出,并且在文件系统中是可见的。在建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作,使用方便;

3.FIFO严格的遵循先进先出规则,对管道及FIFO的读总是从开始处返回数据,对他们的写则是把数据添加到末尾,它们不支持如lseek()等文件定位操作。

FIFO的创建方式:

命令:mkfifo    管道名

有名管道创建可以使用函数mkfifo(),该函数类似于文件中的open()操作,可以知道管道的路径和打开的模式。

如下图:用mkfifo函数创建FIFO管道

 FIFO通信使用

1.如果FIFO读没有打开,无法写入内容,write可能处于阻塞状态,当读打开之后,就会立即写入内容,或者成功write一次后,自动推出

2.如果FIFO写没有打开,无法读入内容,read处于阻塞状态,当写入内容后,就会立即读

3.当unlink()取消有名管道后,write会自动停止,read可能也会停止

对于读可以设置阻塞和非阻塞

对于读进程:

1.若该管道是阻塞打开,且当前FIFO内没有数据,则对读进程而言将一直阻塞到有据写入。

2.若该观点是非阻塞状态打开而不能写入全部数据,则读操作进行部分雪茹或者调用失败。

 access函数确定访问权限

access()函数的功能是却文件或文件夹的访问权限,即检查摸个文件的存取方式,比如说只读方式,只写法昂是等。如果知道的存取方式有效,则函数返回0,否则函数返回-1.

文件用于进程间通信

使用文件也可以完成IPC,理论依据是,fork后,父进程共享文件描述符。也就是共享打开文件。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值