1
我給了一個二進制文件(認爲它很大)和一些二進制blob,我應該在文件中間的某處插入/替換(偏移量已知)。如何自動更改文件內容?
同一時間用戶可以訪問該文件,因此我必須有「無所有」,如果用戶在我更新所有內容之前打開它,或者有新版本的文件如果我成功了。
我對Linux,Windows和OS X的解決方案感興趣。當然,實現可能會有所不同。
我給了一個二進制文件(認爲它很大)和一些二進制blob,我應該在文件中間的某處插入/替換(偏移量已知)。如何自動更改文件內容?
同一時間用戶可以訪問該文件,因此我必須有「無所有」,如果用戶在我更新所有內容之前打開它,或者有新版本的文件如果我成功了。
我對Linux,Windows和OS X的解決方案感興趣。當然,實現可能會有所不同。
對於Linux:
fsync()
該臨時文件。rename()
臨時文件到真實文件。這個習語被稱爲原子重命名。
這是一個直接的解決方案,但一個臨時文件至少需要兩次以上的空間。 – galadog
你的問題在細節上有點稀缺。你如何打開文件?你正在創建一個應用程序?當文件被打開時,它是否總是通過我們的應用程序?你在用什麼語言? –
是的,我正在創建一個應用程序。我想特定的語言並不重要,所以讓我們考慮一下C++。我的應用程序知道是否有人通過inotify/WinAPI打開文件。 – galadog
請參閱:http://stackoverflow.com/questions/4662115/is-an-atomic-rename-possible-in-mac-vfs-hfs和http://stackoverflow.com/a/660679/371250 – ninjalj