为了深入了解匿名管道的特性,我们需要了解管道通信的四种情况
(1) 子进程写入的速度 远大于 父进程读取的速度
(2) 父进程读取的速度 远大于 子进程写入的速度
(3) 子进程正在写入,但是父进程关闭了文件描述符
(4) 子进程写完一批数据以后关闭文件描述符,父进程在读取
目录
2、子进程写入的很快,父进程每次只读取一个(测试父进程取数据时,子进程是否会继续写入)
3、子进程写入的很快,父进程每次至少读取4KB(4096 bytes)
一、子进程写入的很快,父进程读取的很慢甚至不读取
1、子进程写入快,父进程不读取(目的是测试管道大小)
这样的结果可想而知,因为管道是有大小的!!所以管道被填满以后就不会继续往里面写入了,这个时候子进程会等待父进程去取数据
那么管道到底有多大呢?我们下面可以测试一下

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

2、子进程写入的很快,父进程每次只读取一个(测试父进程取数据时,子进程是否会继续写入)
管道被写满的时候,就说明子进程要等待父进程取数据了,那么是不是说,父进程取数据了,子进程就会继续写入了??

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

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

被折叠的 条评论
为什么被折叠?



