假设我正确理解了流量,我们希望在打开的FILE
流中阅读一些摘要,让我们说,使用fread
:
read
系统调用会将数据从内核复制到用户空间缓冲区setvbuf
提供...)将被复制到提供给fread
的缓冲区为什么需要第二步?为什么我可以得到一个指向用户空间缓冲区的指针,我将决定是否要存储(复制)?
谢谢,
答案 0 :(得分:4)
第二个缓冲区的目的是分摊系统调用开销。如果一次只读取/写入几个字节,则第二个用户空间缓冲区将极大地提高性能。 OTOH,如果您读/写大块,可以绕过第二个缓冲区,因此您不需要为双重复制付出代价。
答案 1 :(得分:0)
第二步就是它的全部内容。内核必须处理此类操作。之后将使用您使用的api结果。这是通常的内核空间/用户空间行为。阅读它。您可能现在可能不知道它,但内核空间/用户空间差异是os基础结构的基础。