Files

使用 stdio 庫時,它有 3 級緩衝還是 2 級緩衝?

  • March 12, 2020

來自Linux 程式介面:(

我已經閱讀了相關部分。我粘貼了這個總結圖只是為了說明。) 在此處輸入圖像描述

我知道對於使用readwrite系統呼叫的直接 IO。有 2 級緩衝。read/write buffer+ kernel buffer.

當使用stdio建立在直接系統 IO 呼叫之上的庫呼叫時,

  1. stdio buffer++ , 3 級緩衝read/write buffer,kernel buffer

或者

  1. stdiowrite/read共享同一個緩衝區,2級緩衝

stdio calls <—> user buffer<—–> read/write+kernel buffer

?

(我認為這是 2 級緩衝,但我想確定。)

在一般情況下,有兩個級別。使用者空間中的緩衝區由 stdio 庫分配,呼叫 puts/printf/fprintf 等將字元放入此緩衝區。在某個階段(例如緩衝區已滿或寫入換行符並且流處於行緩沖模式),stdio 庫呼叫write以要求核心寫入緩衝區。核心通常會將緩衝區復製到核心緩衝區中,啟動所需的一切以將數據發送到目的地並返回。然後使用者空間可以隨意使用使用者空間緩衝區。

有可能(但不尋常)有不同的 stdio 實現,它們以不同的方式執行此操作。sfio有一個 stdio 兼容層。已經提出了各種方案zero copy等。關鍵是stdio告訴你效果是什麼,而不是它是如何完成的。

引用自:https://unix.stackexchange.com/questions/572565