【发布时间】:2017-05-06 13:47:33
【问题描述】:
如果我打开带有O_DIRECT 标志的文件,是否意味着每当对该文件的写入(阻塞模式)返回时,数据就在磁盘上?
【问题讨论】:
-
没有。手册页对此非常明确。有一个单独的部分专门讨论具有同步 I/O 的
O_DIRECT和O_SYNC。 -
感谢您的回复:-) 我阅读了手册页,它说“I/O 是同步的,也就是说,在读(2)或写(2)完成时,数据保证已被传输。”并且似乎使用 O_SYNC 来保证元数据也被传输。那么,我想知道 O_DIRECT 能否保证在写入返回时数据(而不是元数据)已传输?
-
顺便问一下,“传输”是指数据在磁盘上吗?
-
来自手册页:“O_DIRECT..不提供 O_SYNC 标志的保证,即 数据 和必要的元数据被传输”。阅读 O_SYNC 以了解 Linux 做出的相关保证。此外,“传输”永远不能保证数据在磁盘上。这是一个非常复杂的问题,由于底层系统(I/O 控制器、总线等),永远无法完全保证