2011-12-17 19 views
3

假設我在沒有執行fsync的情況下將一個塊寫入文件描述符,然後在一段時間後從相同的描述符中讀取相同的塊。是否有保證我會收到相同的信息?在Linux中寫入和讀取相同的fd而不使用fsync

該程序是單線程的,任何時候都不會有其他進程訪問該文件。

回答

5

是的,它是由操作系統保證的。

即使修改還沒有將其修改到磁盤,操作系統也會使用其緩衝區緩存來反映文件修改,並保證所有進程的讀取和寫入的原子級別。因此,不僅您的過程,而且任何其他過程都能夠看到變化。

至於fsync(),它只是指示操作系統盡力將內容刷新到磁盤。另見fdatasync()

另外,我建議你使用兩個文件描述符:一個用於讀取,另一個用於寫入。

+0

謝謝。是否有任何具體的理由使用2描述符? – 2011-12-17 18:48:57

+0

因爲它使工作更容易? ;) – fge 2011-12-17 18:49:19

+0

寫一個fd和讀另一個fd是什麼?如果我在不刷新文件的情況下在一個文件系統中寫入某些內容,不關閉文件,然後再讀取第二個文件描述符,該怎麼辦?我會在第二個文件描述符中得到我在第一次寫入時沒有進行刷新嗎? – 2015-01-30 13:23:58

2

fsync()同步緩存和磁盤。由於數據已存在於緩存中,因此將從該處讀取數據,而不是從磁盤讀取數據。

1

當您寫入文件描述符時,數據在發送到磁盤之前存儲在RAM高速緩存和緩衝區中。所以只要你不關閉描述符,你就可以訪問你剛寫的數據。如果關閉描述符,則必須通過自己刷新或等待操作系統提高效率來將文件內容放入磁盤,但是如果您希望確保在打開新的FD後訪問磁盤上剛剛寫入的數據,您必須使用fsync()刷新到磁盤。

相關問題