【发布时间】:2018-11-06 17:24:30
【问题描述】:
我正在为带有 OS Linux 的微控制器编写日志程序。还有一个计算功能,将这些结果存储在硬盘上,并在记录仪重新启动时加载。
我的问题是,当我从当前拔下 µC 时,同时 µC 正在覆盖一些数据,被覆盖的数据可能会丢失。
那么我怎么可能覆盖一些数据,但是如果在uC覆盖的同时发生拔出,我会确保覆盖的数据或写入的数据是否一致?
编程语言是 C++,所以如果有 boost 库或者更好的 stl 类型,我会爱上的。
【问题讨论】:
我正在为带有 OS Linux 的微控制器编写日志程序。还有一个计算功能,将这些结果存储在硬盘上,并在记录仪重新启动时加载。
我的问题是,当我从当前拔下 µC 时,同时 µC 正在覆盖一些数据,被覆盖的数据可能会丢失。
那么我怎么可能覆盖一些数据,但是如果在uC覆盖的同时发生拔出,我会确保覆盖的数据或写入的数据是否一致?
编程语言是 C++,所以如果有 boost 库或者更好的 stl 类型,我会爱上的。
【问题讨论】:
使用stream << flush; 将C++ 输出缓冲区刷新到操作系统,并使用Linux fsync() 从操作系统缓冲区刷新到磁盘。
后者需要 Unix 文件描述符,因此您需要使用依赖于实现的方法从 C++ 流中获取 FD。见Retrieving file descriptor from a std::fstream
为了获得额外的保护,您需要使用具有日志功能的抗故障文件系统。示例见https://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html。
【讨论】: