如果数据成功写入Linux中的磁盘,我该如何获得回调?
我希望将我的程序db文件映射到内存中以进行读/写操作,并在写入成功命中磁盘后接收回调。有点像旧的VMS曾经做过的事情..
答案 0 :(得分:3)
你需要调用fdatasync(或fsync,如果你真的需要同步元数据)并等待它返回。
你可以从另一个线程执行此操作,但是如果一个线程写入文件而另一个线程正在执行fdatasync(),则不清楚哪些写操作是保持持久性的。
希望以保证持久的方式存储事务日志的数据库需要调用fdatasync。
数据库(例如innodb)通常在其主数据文件上使用直接IO(以及它们自己的数据缓存,而不是依赖于OS),这样他们就知道它将以可预测的方式编写。
答案 1 :(得分:1)
据我所知,当文件(或mmap
ed区域)之间的实际同步发生时,您无法获得任何通知,甚至文件的时间戳也不会发生变化。但是,您可以使用fsync
强制同步文件(或区域)。
很难看出你为什么会这么想的原因。文件IO应该是不透明的。