Linux系统编程--管道

本文详细介绍了Linux管道的概念、限制、匿名管道与命名管道的区别,以及它们在进程间通信中的读写规则和阻塞/非阻塞模式。特别关注了命名管道(FIFO)的创建与打开规则。
摘要由CSDN通过智能技术生成

1、管道(一)

1.1、什么是管道

例如:ls | wc -w这条命令,ls是一个进程,把结果通过|管道输出到wc这个进程中,所以管道本质上是一个内核缓冲区

1.2、管道限制

1.3、匿名管道pipe

1.4、创建管道后示意图

管道只能用于亲缘关系的进程间通讯,因为管道的文件描述符只能通过子进程继承父进程得来的

下面示例:子进程关闭读端,用写端向父进程写数据,然后关闭写端,父进程关闭写端,读取数据,然后关闭读端。

模拟ls | wc -w

2、管道(二)

2.1、管道的读写规则

没有数据读时:

所有写端文件描述符关闭:

所有读端对应的文件描述符被关闭:

当管道这个内核缓冲区满的时候

管道是默认阻塞,一直向管道写数据:满了就会阻塞

改成非阻塞模式:管道的容量64K

原子性:

3、管道(三)

3.1、命名管道(FIFO)

3.2、创建一个命名管道

3.3、匿名管道与命名管道

3.4、命名管道的打开规则

阻塞模式下,只读操作打开,会一直阻塞,知道有写的进程打开该管道,解除阻塞

非阻塞模式下:

一个写进程,一个读进程,将makefile的中的数据写入管道,然后读进程去读这个管道,写入到makefile2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值