c - 如何移动光标以在文件中写入新行而不必读取整个现有行?
问题描述
我正在尝试将日志文件写入我的代码,但我有一些限制,不知道如何超越它们。
我的代码运行了几天,每 1 分钟循环一次。我想在每个循环结束时写入日志文件,因此日志文件将有数千行。所以,我对此的两个主要观点是:
- 我希望能够在每个循环中打开和关闭文件(完成操作后,我打开文件,写下我想要的然后关闭它)。这样我就可以随时打开日志文件来检查代码的运行情况。
- 根据循环中发生的情况,日志文件的每一行都有不同的长度。由于该文件将有数千行,我希望能够转到下一行而不必读取所有先前存在的行。
我试过像这样使用 fseek 函数:
fseek(fp,-1,SEEK_END);
但没有成功(我最终写了已经存在的行)。重要的是要说我正在 linux 中编写此代码,但希望它是可移植的。
我在其他问题上找到的所有内容都显示人们阅读了整行,我不需要阅读或存储现有的行。我只是想打开文件并在新行中写入。有谁知道我该怎么做?
解决方案
"a"
以附加模式( in fopen
)打开文件。这样所有的写入都将转到文件的末尾;无需寻找。
此外,重复打开/关闭同一个文件也没有意义。只需在循环开始之前打开文件一次。保持文件打开不会阻止其他人阅读它。如果您担心缓冲引起的延迟,您可以fflush()
在每行输出之后处理。
推荐阅读
- javascript - 使用模型将 PHP 数组转换为 javascript 数组
- javascript - 可以从 for 条件中省略“el &&”吗?
- migration - 如何在 Eventstore 中进行复制和转换技术?
- git - VS Code Git:恢复到特定的提交
- ios - SwiftUI:在预览中渲染一个对象,在设备上渲染另一个
- machine-learning - 多元线性回归 - 回归方程中 X1 的系数和 y 的值?
- c# - 添加到关联表而不加载
- html - 为什么会出现溢出?
- javascript - 为什么 iPhone 显示正确的图像方向而桌面却没有?
- php - 特定端点在升级后的最新 Joomla 上除了默认一种 (en) 以外的所有语言都不起作用 (404)