如何在不读取整个现有行的情况下移动光标以在文件中写入新行?

时间:2019-05-19 18:31:21

标签: c file logging

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

我的代码运行几天,每1分钟循环一次。我想在每个循环的末尾写入日志文件,因此该日志文件将包含数千行。所以,我的两点要点是:

  1. 我希望能够在每个循环中打开和关闭文件(完成操作后,我打开文件,编写所需内容,然后关闭它)。这样,我可以随时打开日志文件来检查代码的运行情况。
  2. 日志文件的每一行都有不同的长度,具体取决于循环中发生的情况。由于该文件将包含数千行,因此我希望能够转到下一行,而不必阅读以前的所有现有行。

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

fseek(fp,-1,SEEK_END);

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

我在其他问题上发现的所有内容都表明人们正在阅读整行,而我不需要阅读或存储现有行。 我只是想打开文件并写换行。有人知道我该怎么做吗?

1 个答案:

答案 0 :(得分:0)

以追加模式(class AlarmRingtoneManager(val context: Context) { private lateinit var mediaPlayer: MediaPlayer fun start() { mediaPlayer = MediaPlayer.create(context, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM)) .apply { setAudioAttributes(AudioAttributes.Builder() .setFlags(AudioAttributes.FLAG_AUDIBILITY_ENFORCED) .setLegacyStreamType(AudioManager.STREAM_ALARM) .setUsage(AudioAttributes.USAGE_ALARM) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build()) isLooping = true start() } } fun stop() { mediaPlayer.stop() } } 中的"a")打开文件。这样,所有写操作都将到达文件的末尾。无需搜索。

此外,重复打开/关闭同一文件没有任何意义。在循环开始之前,只需打开文件一次。保持文件打开并不妨碍其他人读取它。如果您担心由缓冲引起的延迟,则只需在输出的每一行之后fopen处理即可。