【发布时间】:2020-10-21 16:41:54
【问题描述】:
现有应用程序在运行时不断写入输出文件。我希望能够在另一个 (C++) 应用程序中逐行读取此文件以进行外部处理。
一个现实的场景是现有应用程序已经运行了一段时间。我的新应用程序启动并通过输出文件工作,“赶上”最近的条目。然后等待新行写入文件。
我确实不需要 需要解析整个文件,只需逐行读取它 - 它不是 XML 或 JSON 或类似的东西。由于文件可能非常大,我绝对不想将其全部加载到内存中。自从我在 C++ 中从事低级文件访问以来已经有很长时间了,所以我的问题是:
- 标准文件 API 是否允许我读取文件而不将其缓存在内存中,如果可以,我该如何控制?
- 是否需要特别注意读取正在写入的文件?
我知道这可以在操作系统级别完成,但我不确定这是如何通过标准库中的 C++ API 公开的。
【问题讨论】:
-
这能回答你的问题吗? Implement "tail -f" in C++
-
你想对文件做什么?逐行阅读但不解析 - 你会丢弃这些行吗?目前尚不清楚最终目标是什么。
-
只要写作应用创建具有写入权限和读取共享的文件,而阅读应用以只读访问权限打开文件,您应该可以。就我而言,我有一个写入日志文件的服务,以及一个实时显示日志的查看器。我使用文件的内存映射视图来快速访问数据,并让服务在写入新数据时通知查看器,以便查看器可以映射和显示它,但在这种情况下,这些不是严格要求。
-
@SergeyA 我不确定这是否重要,但我稍微编辑了一下......基本上在定制逻辑中处理每一行
-
@Botje 我不确定。没有公认的答案,评价很高的答案基本上是说要按照我的要求做,但不是如何做。所以我不认为这是一个骗局