我正在編寫一個在Linux和FreeBSD上運行的程序,並且我想確保當每個write()
返回時,數據實際寫入物理設備上的文件,所以我的數據不會意外丟失(例如,電力丟失,過程意外中斷等)。O_DIRECT與Linux/FreeBSD上的O_SYNC
根據OPEN(2)手冊頁,在Linux(高於2.6)上,O_DIRECT
是同步的,但可能存在性能問題;在FreeBSD上,O_DIRECT
不能保證同步,也可能有問題。
因此,在Linux上,O_DIRECT
或O_SYNC
保證同步寫入,但哪一個具有更好的性能?
在FreeBSD,以保證同步寫入,該選項具有最佳性能:(1)O_DIRECT
+ fsync()
(2)O_DIRECT | O_SYNC
或(3)單獨O_SYNC
?
我認爲你根本無法比較這些,因爲它們是根本不同的東西(即使它們看起來像是做了類似的事情)。 – Damon