我知道當您調用fwrite
或fprintf
或者其他任何寫入文件的函數時,內容不會立即刷新到磁盤,而是緩衝在內存中。操作系統如何爲文件執行緩衝
首先,OS在哪裏管理這些緩衝區以及如何管理這些緩衝區。其次,如果您寫入文件,然後讀入您編寫的內容,並假設操作系統在您寫入和讀取之間沒有刷新內容,如何知道它必須從緩衝區中返回讀取?它如何處理這種情況。
我想知道這一點的原因是我有興趣在用戶空間中實現自己的緩衝方案,而不是像OS那樣在內核空間中實現。也就是說,寫入文件將被緩存在用戶空間中,而實際寫入只會在某個點發生。通常,我還需要處理對仍在緩衝區中的內容調用read的情況。是否有可能在用戶空間中完成所有這些。
cnicutar,thanx。但我認爲,出於我的目的,我可以使用stdio緩衝區概念,將寫入緩存在用戶空間中,然後再調用實際的寫入。因爲在我的情況下,寫操作不能立即執行。我每隔50毫秒左右檢查一次系統中的錯誤,只有在確定沒有錯誤時才寫入文件。請注意,我正在討論應用程序使用可靠性的庫,因此它應該適用於所有情況。也就是說,它不應該是特定於應用程序的。 – MetallicPriest
@MetallicPriest從某種意義上講,它將重塑stdio。只要你不期望一致性(其他進程立即看到你的修改)應該沒問題。 – cnicutar
因此,您的意思是,在用戶級別,當stdio尚未實際進行系統調用時,讀取仍保存在stdio寫入緩衝區中的內容將被返回以進行讀取? – MetallicPriest