回答
您需要调用fdatasync(或fsync,如果您确实需要同步元数据)并等待它返回。
你可以从另一个线程做到这一点,但是如果一个线程在另一个线程正在执行fdatasync()时写入该文件,那么将不清楚哪个写入保证是持久的或不是。
想要以保证持久的方式存储事务日志的数据库需要调用fdatasync。数据库(如innodb)通常在其主数据文件中使用直接IO(以及它们自己的数据缓存,而不是依赖于操作系统),以便他们知道它将以可预测的方式写入。
据我所知,当文件(或mmap
ed区域)发生实际同步时,甚至不是文件的时间戳将要改变。但是,您可以使用fsync
强制执行文件(或区域)的同步。
也很难看出你为什么要这样做的原因。文件IO应该是不透明的。
mmh ..我可以看到很多原因。 –
我需要它的原因是,一旦写入磁盘已被确认,我需要生成客户收据。不能承受一个数据写入磁盘的数据无法打开收据.. – gamedynamix
@gamedynamix我建议你只要做你的写和调用'fsync'这种方式,你可以确信数据被写入并生成您的收据。 – pmr
- 1. 返回数据帧vs写入磁盘并从磁盘读取csv的效率
- 2. NSUserDefaults写入磁盘?
- 3. 将HDFS数据写入外部磁盘/磁带
- 4. Element树写回磁盘
- 5. UIWebView写入磁盘方法
- 6. 将PFObject写入磁盘
- 7. FMDB databaseWithPath:不写入磁盘
- 8. 将reg文件传递给regedit而不写入磁盘(以避免将解密数据写入磁盘)
- 9. 要求Windows将数据写入磁盘的不同方法
- 10. 什么数据库写入磁盘真的很快?
- 11. 将大数据结构作为EDN写入clojure中的磁盘
- 12. cProfile - 保留Python对象中的数据/延迟写入磁盘
- 13. mysql插入计数与磁盘io写入计数的关系
- 14. 不写入磁盘的C++文件
- 15. golang的磁盘写入性能
- 16. 将System.Xml.XmlElement写入磁盘上的文件
- 17. 频繁的写入和磁盘磨损
- 18. 如何在VBScript中将二进制数据写入磁盘?
- 19. 不写入磁盘时,有可能丢失数据吗?
- 20. 在mapreduce作业中,何时将数据写入磁盘?
- 21. 将大型数据集摘要写入磁盘
- 22. 写CFArray到磁盘
- 23. 将数据写入每个数据节点中的本地磁盘
- 24. 将结构和类写入磁盘
- 25. 可以将HTML5 sessionStorage写入磁盘吗?
- 26. 磁盘写入队列长度
- 27. 防止RabbitMQ将消息写入磁盘
- 28. 挂钩磁盘写入操作? Win32/64
- 29. ZipArchive ExtractToFile延迟写入磁盘
- 30. 刷新磁盘写入缓存
您能否提供更多关于您已经尝试的内容以及您遇到问题的部分代码?在目前的形式下,这个问题可能会得到一个简单的“是”或“否”的答案。 – chown
我还没有尝试过任何东西。我正在寻找一种方法来确认数据实际上已被提交到磁盘。我研究过DBMS日志记录技术,但如果可能的话,我想尽量避免这种路径...希望操作系统发出一个信号,告诉我已经完成将这个块写入磁盘。有这样的事吗? – gamedynamix
无论如何,您可能需要使用日志记录 - 在发出写入和同步完成时,如果系统在此刻断电,则正在写入(甚至部分)任何数据块可能会完全丢失。 – bdonlan