2013-04-29 79 views

回答

2

fread可以有自己的缓冲区,而read没有缓冲区,而不是您提供给它的缓冲区。所以,read是无缓冲的:你只是提供一个内存位置,读取可以发生,但stdio函数(通常)为你缓冲。

例如,fgets不会逐字节读取(因为效率不高)。相反,它会以块读取,有时可能会读取太多,超出换行符。然后,在读取缓冲区中会有一些数据等待,fread可能会在没有系统调用的情况下立即返回。

+0

等待,'read'不被缓冲?手册页不谈论它。你怎么知道? (为什么在google上搜索它很困难?!) – Shahbaz 2013-04-29 09:30:39

+0

好的,没有针对fd的用户 - 陆地视图进行缓冲。 fd是一种抽象(像美国人的水龙头或水龙头?),tap是内核和你的代码之间的边界。 'read(2)'是没有缓冲的,因为任何出现的数据都是刚刚传输到您的进程中的数据:对于应用程序,数据只是刚刚存在(我们知道,网卡在板上处理TCP并直接进入应用程序的RAM的DMA)。作为一个实现细节,内核可能也有一个缓冲区,但概念上'read'确实没有缓冲。 – 2013-04-29 09:36:16

+0

对,从_that_观点:) – Shahbaz 2013-04-29 10:00:09

相关问题