2015-12-17 27 views
0

我們正在編寫一個C++/Objective C應用程序,可以在OSX上從版本10.7到現在(10.11)運行。使用什麼API在OS X中執行讀一致文件操作,類似於Windows卷影服務

在windows下,有一個影子文件的概念,它允許您在某個時間點讀取文件,而不必擔心其他進程在此期間寫入該文件。

但是,我找不到任何文檔或在線文章討論OS X中的類似功能。我知道,OS X在寫入文件時不會鎖定文件,因此有必要做一些特殊的操作確定我沒有拿起正在修改中的文件?

或者日誌文件系統是否不需要特殊處理?我擔心的是,如果我有一個創建或修改文件的進程(在一個單一的上下文中,比如打開一個文件) - 如果寫入過程打開和關閉文件,顯然我不能保證「完整性」在應該是原子操作的過程中重複),讀取過程最終會得到一個「不完整」的文件。

如果JFS確保讀者只能看到「整個」文件,這是否擴展到可以作爲外部驅動器掛載的Fat32卷?

回答

0

有幾件事情:

  • 在Unix上,一旦你打開一個文件,如果它是取代(而不是修改),你的文件描述符繼續訪問你打開文件,而不是它的替代。
  • 許多應用程序將替換而不是修改文件,使用-[NSData writeToFile:atomically:]YESatomically:
  • 當他們寫信給他們,但該鎖是諮詢不是強制性的,所以其他程序也必須選擇加入諮詢鎖定系統受到影響。
  • 現代的做法是File Coordination。同樣,這是一個應用程序必須選擇的自願系統。

沒有什麼功能與您在Windows上描述的非常相似。如果標準方法不能滿足您的需求,您將不得不構建自定義的東西。例如,您可以製作您感興趣的文件的副本,並在完成副本後將其與原始文件進行比較,以查看是否在複製時修改了該文件。如果原稿已經改變,您將不得不重新開始新的複製操作(或放棄)。您可以使用「文件協調」來至少最小化合作程序爭用的可能性。

相關問題