2012-10-01 195 views
1

我給了一個二進制文件(認爲它很大)和一些二進制blob,我應該在文件中間的某處插入/替換(偏移量已知)。如何自動更改文件內容?

同一時間用戶可以訪問該文件,因此我必須有「無所有」,如果用戶在我更新所有內容之前打開它,或者有新版本的文件如果我成功了。

我對Linux,Windows和OS X的解決方案感興趣。當然,實現可能會有所不同。

+0

你的問題在細節上有點稀缺。你如何打開文件?你正在創建一個應用程序?當文件被打開時,它是否總是通過我們的應用程序?你在用什麼語言? –

+0

是的,我正在創建一個應用程序。我想特定的語言並不重要,所以讓我們考慮一下C++。我的應用程序知道是否有人通過inotify/WinAPI打開文件。 – galadog

+0

請參閱:http://stackoverflow.com/questions/4662115/is-an-atomic-rename-possible-in-mac-vfs-hfs和http://stackoverflow.com/a/660679/371250 – ninjalj

回答

0

對於Linux:

  • 做的臨時文件中的一切。
  • fsync()該臨時文件。
  • rename()臨時文件到真實文件。

這個習語被稱爲原子重命名。

+0

這是一個直接的解決方案,但一個臨時文件至少需要兩次以上的空間。 – galadog