gpt4 book ai didi

c++ - 如何保持文件中变量的最新值?

转载 作者:行者123 更新时间:2023-12-02 06:34:14 27 4
gpt4 key购买 nike

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

附注我所说的“其他部分的错误”的意思是 - 它是由我无法控制的其他开发人员开发的。或者,例如 - 直流电源断电。或者陨石坠落到它身上=)我实际上不仅限于变量的文件保存。几乎任何你可以发明的技术 - sqlite、内存映射文件 - 无论什么......但我认为 sqlite 甚至比文件访问还要慢。内存映射文件很有趣,我会测试一下,谢谢=)

最佳答案

"open file in overwrite mode - write value - close file"

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

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

此外,这里还有两件事:

  • B 需要保证永远不会收到重复项。最简单、最明显的解决方案:A 永远不应该因崩溃而发送重复项!我可能假设您不是最有经验的程序员,所以事情是这样的:如果您有这样的要求,您将需要进行故障预防 A. 调试它。为什么会崩溃?
  • 这听起来像是您应该在 A 和 B 之间进行适当的双向 IPC(进程间通信)。对于 A 来说,有办法询问 B 它期望的下一个值是什么才是正常的。
  • 根据您的操作系统,有一个类似文件的对象,就像一个管道,其中的字节一旦被读取就会消失:FIFO。这在消费者崩溃的 Unixoid 上效果不佳,但是嘿,这是一个开始。
  • 有很多 IPC 框架可以构建稳定的管道,所以也许文件读取器 -> IPC 管道 -> A -> B 是您想要的解决方案?看一下 ZeroMQ 的 REQ/REP 套接字。

关于c++ - 如何保持文件中变量的最新值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32566226/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com