跨平台原子写入/重命名,C++中没有事务性 FS

Cross-platform atomic writes/renames without a transactional FS in C++

本文关键字:C++ FS 事务性 重命名 跨平台      更新时间:2023-10-16

我正在开发需要确保保存到磁盘的数据一致性的应用程序。我需要保证数据在转储到磁盘时永远不会损坏。即保存数据时可能会重新启动或应用程序关闭。

我知道需要完成的步骤:http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx

但我想知道是否已经有一个实现允许最好以跨平台的方式做到这一点?我认为 boost::filesystem 保证原子重命名(在 Windows 和 POSIX 上),所以想知道我是否在某个地方错过了 boost 中的此功能?谢谢

UPD:我希望 boost::interprocess::message_queue 但如果进程在添加到队列 + 内存映射文件的过程中被杀死,它只会挂起读取队列+内存映射文件占用磁盘上的最大大小,这应该是最坏的情况无论如何。

如果您使用重命名,您可能会降低性能和/或丢失所有应用程序数据。可以在每条记录后存储一些密钥信息(例如记录ID和指纹),并在应用程序启动时查找最后正确的密钥信息是更好的方法?