2013-04-29 78 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

相關問題