跨平台原子写入/重命名,C++中没有事务性 FS
Cross-platform atomic writes/renames without a transactional FS in C++
我正在开发需要确保保存到磁盘的数据一致性的应用程序。我需要保证数据在转储到磁盘时永远不会损坏。即保存数据时可能会重新启动或应用程序关闭。
我知道需要完成的步骤:http://blogs.msdn.com/b/adioltean/archive/2005/12/28/507866.aspx
但我想知道是否已经有一个实现允许最好以跨平台的方式做到这一点?我认为 boost::filesystem 保证原子重命名(在 Windows 和 POSIX 上),所以想知道我是否在某个地方错过了 boost 中的此功能?谢谢
UPD:我希望 boost::interprocess::message_queue 但如果进程在添加到队列 + 内存映射文件的过程中被杀死,它只会挂起读取队列+内存映射文件占用磁盘上的最大大小,这应该是最坏的情况无论如何。
如果您使用重命名,您可能会降低性能和/或丢失所有应用程序数据。可以在每条记录后存储一些密钥信息(例如记录ID和指纹),并在应用程序启动时查找最后正确的密钥信息是更好的方法?
相关文章:
- 使用文件系统时仍然需要链接到带有 C++20 的 stdc++fs?
- Node.js fs.open() 在尝试打开 4 个以上的命名管道 (FIFO) 后挂起
- 如何将C++17 stdc++fs库链接到混合语言(C++和Fortran)CMake项目
- OpenCV 与 C++,使用 cv::utils::fs::glob() 函数
- OpenCV: fs.open fails
- C++程序在调用'mkfifo'时挂起(Lustre FS)
- 当我使用fs.rdbuf()复制文件时,我会丢失一些数据
- 在 boost::fs::p ath 中转义空白
- 跨平台原子写入/重命名,C++中没有事务性 FS
- 内联 asm 分配给"FS:0":处理程序未注册为安全处理程序
- GCC6 中对 'rt'、'pthread'、'stdc++fs' 的未定义引用
- 如何使用boost::fs只加载30个最新文件,而不是整个目录
- "fs::path::string"的未解析重载函数类型
- 实验::在使用-lsdc++fs选项后使用GCC6时出现文件系统链接器错误
- 使用侦查工具函数tsk_fs_open_img()返回一个错误,认为该FS不是FAT FS
- 通过 FS 寄存器访问生成进程的 TIB?
- 使用nmake编译Qt给出命令行错误D8021:无效的数字参数' /FS '
- 如何跟踪emscripten包含FS的原因
- 如何在 Vista 和 Win7 上连接 FS 微筛选器驱动程序和我的应用程序?