如何在文件中保留变量的最新值?

时间:2015-09-14 13:34:16

标签: c++ file crash

假设我有一个用C ++编写的应用程序A,它向应用程序B发送消息。 严格的要求是B永远不会收到重复。 应用程序A从文件中读取消息(每条消息1行),并将最后读取消息的行号保存在变量中,例如lineNo。 假设应用程序A的某些其他部分存在导致整个应用程序A崩溃的错误。 重新启动时,应用程序A应该开始不是从开头读取文件,而是从lineNo开始。它应该从某个地方得到那条线。 所以,问题是 - 如何以安全的方式保持A的价值? 我的第一个想法是将它写入一个文件,但由于没有办法(至少我知道)覆盖文件的一部分 - 我想我必须参考"打开文件覆盖模式 - 写入值 - 关闭文件"对于我遇到的每一行,这对OS处理程序而言都不是一件好事。 你能想到的任何其他选择吗?

P.S。我的意思是"其他部分的错误"是 - 它是由我无法控制的其他开发人员开发的。或者,例如 - DC的电源关闭。或者陨石坠毁了=) 我实际上不仅限于保存变量的文件。几乎任何你可以发明的技术--sqlite,内存映射文件 - 无论如何......但我认为sqlite甚至比文件访问更慢。内存映射文件很有趣,我会测试它,谢谢=)

1 个答案:

答案 0 :(得分:-1)

  

“以覆盖模式打开文件 - 写入值 - 关闭文件”

文件没有其他打开模式。您可以附加到文件,但这只不过是在打开时将写指针设置为文件末尾。

然而,对于那样的存储,面向行的文件是错误的格式 - 事物必须严格地在相同的字节位置。

此外,这里有两件事:

  • B需要保证永远不会收到重复项。最简单,最明显的解决方案:A永远不应该通过崩溃发送重复项!我可能认为你不是最有经验的程序员,所以这就是问题:如果你有这样的要求,你需要进行故障保护A.调试它。为什么会崩溃?
  • 这听起来像你应该在A和B之间进行适当的双向IPC(进程间通信).A只有这样一种方法可以让B询问它期望的下一个值是什么。
  • 取决于你的操作系统,有一个类似文件的对象就像一个管道,一旦读取它们就会消失:FIFO。这对于破坏消费者的Unixoid来说效果不佳,但是嘿,这是一个开始。
  • 有很多IPC框架可以构建稳定的管道,所以可能是文件阅读器 - > IPC管 - > A - > B会成为你追求的解决方案吗?看看ZeroMQ的REQ / REP插座。