勵志

勵志人生知識庫

fsync用法

`fsync` 是一個在 UNIX 和類 UNIX 系統中用於同步檔案數據到磁碟的函式。它的用法與 `sync` 函式有所不同:

`sync` 函式將所有修改過的塊緩衝區排入寫佇列,然後立即返回,並不等待實際的寫磁碟操作完成。系統守護進程通常會定期調用 `sync` 函式,以確保核心的塊緩衝區定期被刷新。

`fsync` 函式則只對由檔案描述符指定的單一檔案起作用,並且會等待寫磁碟操作結束後再返回。這意味著 `fsync` 確保了檔案數據的修改立即寫入磁碟,這對於需要數據持久性的應用程式,如資料庫,是非常重要的。

`fsync` 除了同步數據外,還會同步更新檔案的屬性,確保檔案的元數據與磁碟上的實際檔案系統保持一致。

當系統發生故障時,`fsync` 可以防止檔案更新內容的丟失,因為它在返回之前會等待寫操作完成。

為了確保磁碟上實際檔案系統與緩衝區高速快取中的內容一致性,UNIX 系統提供了 `sync`、`fsync` 和 `fdatasync` 三個函式。其中,`fdatasync` 與 `fsync` 類似,但它只同步檔案的數據部分,而不包括檔案的屬性。

記憶體映射檔案(memory-mapped file)是一種將檔案直接映射到進程地址空間的機制,它允許直接對檔案進行讀寫操作,而不需要通過系統調用。記憶體映射檔案的物理存儲器來自一個已經存在於磁碟上的檔案,且在對該檔案進行操作之前必須首先對檔案進行映射。