首页 > 解决方案 > 如何移动光标以在文件中写入新行而不必读取整个现有行?

问题描述

我正在尝试将日志文件写入我的代码,但我有一些限制,不知道如何超越它们。

我的代码运行了几天,每 1 分钟循环一次。我想在每个循环结束时写入日志文件,因此日志文件将有数千行。所以,我对此的两个主要观点是:

  1. 我希望能够在每个循环中打开和关闭文件(完成操作后,我打开文件,写下我想要的然后关闭它)。这样我就可以随时打开日志文件来检查代码的运行情况。
  2. 根据循环中发生的情况,日志文件的每一行都有不同的长度。由于该文件将有数千行,我希望能够转到下一行而不必读取所有先前存在的行。

我试过像这样使用 fseek 函数:

fseek(fp,-1,SEEK_END);

但没有成功(我最终写了已经存在的行)。重要的是要说我正在 linux 中编写此代码,但希望它是可移植的。

我在其他问题上找到的所有内容都显示人们阅读了整行,我不需要阅读或存储现有的行。我只是想打开文件并在新行中写入。有谁知道我该怎么做?

标签: cfilelogging

解决方案


"a"以附加模式( in fopen)打开文件。这样所有的写入都将转到文件的末尾;无需寻找。

此外,重复打开/关闭同一个文件也没有意义。只需在循环开始之前打开文件一次。保持文件打开不会阻止其他人阅读它。如果您担心缓冲引起的延迟,您可以fflush()在每行输出之后处理。


推荐阅读