【发布时间】:2018-06-25 16:51:25
【问题描述】:
我以为是 1 个缓冲区,但现在我突然想到它可能是 2 个。
我的意思是在管道中:
cmd1 | cmd2
cmd2 的输出可能是例如行缓冲,那里没有管道。这应该是由 libc FILE * 像 fwrite() 这样的流函数管理的缓冲区,还是 write(3) 也使用这个缓冲区?但是,我只记得pipe(7) 谈到了显然在内核中控制的管道缓冲区的大小。
stdin 也被缓冲了吗?是否有 3 个缓冲区,1 个在内核空间,2 个在用户空间?
我之前认为read(2) 在管道缓冲区为空时挂起,但是当 stdin 不是管道而是终端时,我没有管道缓冲区,对吗?如果它没有自己的缓冲区,它是否会根据标准输入是管道还是终端还是常规文件来检查不同的缓冲区?
编辑:将问题中的“多少”更改为“什么”。我希望这不是太大的变化。我有兴趣知道缓冲区是什么,而不仅仅是一个数字。
【问题讨论】: