父子进程间通信(二)—— 匿名管道通信的四种情况 及 管道的特性

本文详细探讨了匿名管道通信中的四种情况,包括子进程写入速度与父进程读取速度的差异,以及管道在读写过程中遇到的特殊情况,如父进程关闭文件描述符和子进程提前退出。实验表明,管道容量为64KB,且子进程在管道满后需等待父进程读取至少4KB数据才会继续写入。此外,当一方关闭文件描述符或无数据可读时,系统会进行相应的进程管理。

为了深入了解匿名管道的特性,我们需要了解管道通信的四种情况

(1) 子进程写入的速度 远大于 父进程读取的速度

(2) 父进程读取的速度 远大于 子进程写入的速度

(3) 子进程正在写入,但是父进程关闭了文件描述符

(4) 子进程写完一批数据以后关闭文件描述符,父进程在读取


目录

一、子进程写入的很快,父进程读取的很慢甚至不读取

1、子进程写入快,父进程不读取(目的是测试管道大小)

2、子进程写入的很快,父进程每次只读取一个(测试父进程取数据时,子进程是否会继续写入)

 3、子进程写入的很快,父进程每次至少读取4KB(4096 bytes)

二、父进程读取的速度大于子进程写入的速度

三、子进程正在写入,但是父进程关闭了文件描述符

四、父进程在一直读取,但是子进程写入一串字符以后就退出了

五、匿名管道的五个特性


一、子进程写入的很快,父进程读取的很慢甚至不读取

1、子进程写入快,父进程不读取(目的是测试管道大小)

这样的结果可想而知,因为管道是有大小的!!所以管道被填满以后就不会继续往里面写入了,这个时候子进程会等待父进程去取数据

那么管道到底有多大呢?我们下面可以测试一下

我们发现到了写入65536个字符以后,子进程就不再写入了,换算一下,65536正好就是64KB,所以我们知道 Linux系统中管道的大小是64KB

2、子进程写入的很快,父进程每次只读取一个(测试父进程取数据时,子进程是否会继续写入)

管道被写满的时候,就说明子进程要等待父进程取数据了,那么是不是说,父进程取数据了,子进程就会继续写入了??

根据结果我们发现,父进程读取了好几次,但是子进程的count依然没有什么变化,那父进程要读取多少才能写入呢?答案是 4KB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值