写入磁盘回调的数据

时间:2011-10-22 21:41:21

标签: c++ linux unix

如果数据成功写入Linux中的磁盘,我该如何获得回调?

我希望将我的程序db文件映射到内存中以进行读/写操作,并在写入成功命中磁盘后接收回调。有点像旧的VMS曾经做过的事情..

2 个答案:

答案 0 :(得分:3)

你需要调用fdatasync(或fsync,如果你真的需要同步元数据)并等待它返回。

你可以从另一个线程执行此操作,但是如果一个线程写入文件而另一个线程正在执行fdatasync(),则不清楚哪些写操作是保持持久性的。

希望以保证持久的方式存储事务日志的数据库需要调用fdatasync。

数据库(例如innodb)通常在其主数据文件上使用直接IO(以及它们自己的数据缓存,而不是依赖于OS),这样他们就知道它将以可预测的方式编写。

答案 1 :(得分:1)

据我所知,当文件(或mmap ed区域)之间的实际同步发生时,您无法获得任何通知,甚至文件的时间戳也不会发生变化。但是,您可以使用fsync强制同步文件(或区域)。

很难看出你为什么会这么想的原因。文件IO应该是不透明的。

相关问题