版權所有 © 2014 tutorialspoint
fsync、fdatasync - 將檔案的記憶體中狀態與儲存裝置同步
#include <unistd.h> int fsync(int fd); int fdatasync(int fd);
int fsync(int fd);
int fdatasync(int fd);
fsync() 將檔案描述符 fd 所引用的檔案的所有已修改的記憶體中資料(即,已修改的檔案緩衝區快取記憶體頁)傳輸(“重新整理”)到該檔案所在的磁碟裝置(或其他永久儲存裝置)。該呼叫會阻塞,直到裝置報告傳輸已完成。它還會重新整理與檔案關聯的元資料資訊(請參閱 stat(2))。
呼叫 fsync() 並不一定能確保包含該檔案的目錄中的條目也已寫入磁碟。為此,還需要對該目錄的檔案描述符進行顯式 fsync()。
fdatasync() 與 fsync() 類似,但不會重新整理已修改的元資料,除非需要該元資料才能正確處理隨後的資料檢索。例如,對 st_atime 或 st_mtime(分別為上次訪問時間和上次修改時間;請參閱 stat(2))的更改不需要重新整理,因為它們對於正確處理隨後的資料讀取不是必需的。另一方面,對檔案大小(st_size,例如由 ftruncate(2) 建立)的更改將需要重新整理元資料。
fdatasync(2) 的目的是減少不需要將所有元資料與磁碟同步的應用程式的磁碟活動。
成功時,返回零。出錯時,返回 -1,並且 errno 會相應地設定。
如果底層硬碟啟用了寫快取,則當 fsync() / fdatasync() 返回時,資料可能實際上並不在永久儲存中。
當 ext2 檔案系統以 sync 選項掛載時,fsync() 也會隱式同步目錄條目。
在 2.4 之前的核心中,對大型檔案使用 fsync() 效率低下。另一種方法可能是使用 O_SYNC 標誌開啟 open(2)。
POSIX.1-2001
bdflush (2)
open (2)
sync (2)
sync_file_range (2)
hdparm (8)
mount (8)
sync (8)
update (8)
廣告