Linux管道详解

本文介绍了Linux中进程间通信的两种方式:匿名管道和命名管道。匿名管道通过`|`符号实现,仅适用于父子进程间的通信;命名管道(FIFO)则允许无关进程间通信,它是一种先进先出的数据结构,创建和使用FIFO需要遵循特定规则。文章提供了创建和使用命名管道的示例,强调了读写过程中的阻塞行为。
摘要由CSDN通过智能技术生成


参考书籍:《Linux Shell核心编程指南》——丁明一

一、概念

管道是进程间通信的一种方式。

分为匿名管道和命名管道

二、匿名管道

这个最常用,使用|符号就可以创建一个匿名管道。
例如:

cat /etc/hosts | grep 127.0.0.1

匿名管道仅可以实现父进程与子进程之间的数据交换,要想实现任意两个无关的进程之间的通信,需要使用命名管道。

三、命名管道

命名管道也叫FIFO文件,即First In First Out,先进先出,先写入的数据被先读出来,后写入的数据被后读出来。

3.1.特征

  • FIFO文件由命令创建(mknod或mkfifo),可以在文件系统中直接看到
  • 写入管道的数据一旦被读取后,就不可以再重复读取
  • 进程往命名管道中写数据时,如果没有其他进程读取数据,则写进程会被阻塞
  • 进程尝试从命名管道中读取数据时,如果管道中没有数据,则读进程会被阻塞
  • 命名管道中的数据常驻内存,并不实际写入磁盘,读写效率会更高

3.2.示例

mkfifo pipe_file1			#创建命名管道
mkfifo -m 600 pipe_file2	#创建命名管道,并设置权限

命名管道文件属性的第一列为p
在这里插入图片描述

echo "hello" > pipe_file1		#写阻塞

在这里插入图片描述
再开一个终端窗口,执行该操作,第一个终端窗口的写阻塞会自动解除

cat pipe_file1

在这里插入图片描述
上面的情况反之亦然。总之就是:有写必有读,有读必有写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值