Files
使用 stdio 庫時,它有 3 級緩衝還是 2 級緩衝?
來自Linux 程式介面:(
我知道對於使用
read
和write
系統呼叫的直接 IO。有 2 級緩衝。read/write buffer
+kernel buffer
.當使用
stdio
建立在直接系統 IO 呼叫之上的庫呼叫時,
stdio buffer
++ , 3 級緩衝read/write buffer
,kernel buffer
或者
stdio
並write/read
共享同一個緩衝區,2級緩衝
stdio calls
<—>user buffer
<—–>read/write
+kernel buffer
?
(我認為這是 2 級緩衝,但我想確定。)
在一般情況下,有兩個級別。使用者空間中的緩衝區由 stdio 庫分配,呼叫 puts/printf/fprintf 等將字元放入此緩衝區。在某個階段(例如緩衝區已滿或寫入換行符並且流處於行緩沖模式),stdio 庫呼叫
write
以要求核心寫入緩衝區。核心通常會將緩衝區復製到核心緩衝區中,啟動所需的一切以將數據發送到目的地並返回。然後使用者空間可以隨意使用使用者空間緩衝區。有可能(但不尋常)有不同的 stdio 實現,它們以不同的方式執行此操作。sfio有一個 stdio 兼容層。已經提出了各種方案
zero copy
等。關鍵是stdio
告訴你效果是什麼,而不是它是如何完成的。