c ++永久离线计数器

时间:2018-10-02 12:39:11

标签: c++ counter transactional

我有一个嵌入式服务器,可以随时拔出。是否有一种优雅的方法来实现事务性c ++计数器?在最坏的情况下,它应该返回以前的ID。

我有一个嵌入式服务器,它会定期生成报告文件。服务器没有时间或网络连接,因此我想逐步生成报告文件。但是,在下载报告文件后,我想在保留计数器的同时删除报告文件:

report00001.txt
report00002.txt
report00003.txt
report00004.txt
// all the files have been deleted
report00005.txt
...

我想使用这样的代码:

 int last = read_current_id("counter.txt");
 last++;
 // transaction begin
 write_id("counter.txt", last);
 // transaction end

1 个答案:

答案 0 :(得分:1)

(假设您的服务器正在运行某种unixy操作系统)

您可以尝试使用写入和重命名习惯。

您要做的是将新的计数器值写入另一个文件,例如counter.txt~,然后将临时文件rename写入常规counter.txtrename保证文件的新版本或旧版本将随时存在。

还应该使用sync选项挂载文件系统,以使文件内容不被缓冲在RAM中。但是请注意,这会降低性能,并可能缩短闪存的寿命。