我正在编写一个在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