fsync() - Unix,Linux 系統呼叫 - 技術教學
Tutorials Point


  Unix 初學者指南
  Unix Shell 程式設計
  高階 Unix
  Unix 有用參考
  Unix 有用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於TP  

fsync() - Unix,Linux 系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

fsync、fdatasync - 將檔案的記憶體中狀態與儲存裝置同步

語法

#include <unistd.h> 

int fsync(int fd);

int fdatasync(int fd);

描述

fsync() 將檔案描述符 fd 所引用的檔案的所有已修改的記憶體中資料(即,已修改的檔案緩衝區快取記憶體頁)傳輸(“重新整理”)到該檔案所在的磁碟裝置(或其他永久儲存裝置)。該呼叫會阻塞,直到裝置報告傳輸已完成。它還會重新整理與檔案關聯的元資料資訊(請參閱 stat(2))。

呼叫 fsync() 並不一定能確保包含該檔案的目錄中的條目也已寫入磁碟。為此,還需要對該目錄的檔案描述符進行顯式 fsync()。

fdatasync() 與 fsync() 類似,但不會重新整理已修改的元資料,除非需要該元資料才能正確處理隨後的資料檢索。例如,對 st_atimest_mtime(分別為上次訪問時間和上次修改時間;請參閱 stat(2))的更改不需要重新整理,因為它們對於正確處理隨後的資料讀取不是必需的。另一方面,對檔案大小(st_size,例如由 ftruncate(2) 建立)的更改將需要重新整理元資料。

fdatasync(2) 的目的是減少不需要將所有元資料與磁碟同步的應用程式的磁碟活動。

返回值

成功時,返回零。出錯時,返回 -1,並且 errno 會相應地設定。

錯誤

標籤描述
EBADF fd 不是一個有效的用於寫入的檔案描述符。
EIO 同步期間發生錯誤。
EROFSEINVAL fd 繫結到不支援同步的特殊檔案。

備註

如果底層硬碟啟用了寫快取,則當 fsync() / fdatasync() 返回時,資料可能實際上並不在永久儲存中。

當 ext2 檔案系統以 sync 選項掛載時,fsync() 也會隱式同步目錄條目。

在 2.4 之前的核心中,對大型檔案使用 fsync() 效率低下。另一種方法可能是使用 O_SYNC 標誌開啟 open(2)。

符合標準

POSIX.1-2001

另請參閱



previous next Printer Friendly

廣告


  

廣告



廣告