gpt4 book ai didi

c++ - 读取随时间变化的文件 C++

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:33 25 4
gpt4 key购买 nike

我要用 C++ 读取一个文件。读取本身是在一个 while 循环中发生的,并且是从一个文件中读取的。

当函数从文件中读取信息时,它会将这些信息推送到系统中的某个位置。问题是这个文件可能会在循环进行时发生变化。

我怎样才能在文件中捕捉到新信息?我尝试 std::ifstream 在我的计算机上手动读取和更改我的文件,因为无限循环(每个循环之间有一个 sleep(2) )正在进行中,但是不出所料——什么也没发生。

编辑:文件将在文件的每个新数据条目处覆盖自身。

帮忙吗?

在虚拟机 Ubuntu Linux 12.04 上运行,如果这可能是有用的信息。这不是家庭作业。

最佳答案

通常的解决方案是类似于 MichaelH建议:写进程以追加方式打开文件,并总是写到最后。阅读过程做了什么MichaelH 建议。

这适用于每次运行中的少量数据。如果进程应该运行很长时间,并产生很多数据,文件最终会变得太大,因为它会也包含所有处理过的数据。在这种情况下,解决方案是使用一个目录,在其中生成编号的文件,每个数据记录一个文件。写过程会写每一个数据集到一个新文件(递增数字),并且读取过程将尝试打开新文件,并将其删除当它完成时。这比第一个建议,但即使对流程也有效每秒生成大量数据并运行年。

编辑:

OP 后来的评论说该设备实际上是一个 FIFO。在那种情况下:

  • 你不能寻找,所以不能使用 MichaelH 的建议从字面上看,但是

  • 您不需要搜索,因为数据会自动删除每当它被读取时从 FIFO 中取出,并且

  • 根据数据的大小和写入方式,写入可能是原子的,所以你不必担心部分记录,即使你碰巧恰好在中间阅读一个写。

关于后者:确保 read 和写缓冲区足够大以包含完整的记录,并且作者在每条记录后刷新。并确保记录小于保证所需的大小原子性。 (从历史上看,在我所知道的早期 Unix 上,这是4096,但如果自那以后它没有增加,我会感到惊讶然后。虽然...在 Posix 下,这是由 PIPE_BUF 定义的,仅保证至少为 512,并且仅为 4096在现代 Linux 下。)

关于c++ - 读取随时间变化的文件 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17525089/

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