我有一个在 OpenWRT 路由器上运行的小程序,它记录到远程 MySQL 数据库。如果数据库不可用,程序将写入缓冲文件 (/var/buffer) 以防止数据丢失。问题是,由于它存储在路由器本身上,因此如果数据库关闭时间过长,就有可能很快耗尽空间。
我认为,如果我将文件最多保留 20,000 行,并在写入新行时丢弃最旧的行(一旦达到最大大小),我可以最大限度地减少数据丢失,而不必担心运行存储空间不足(一点损失并不是世界末日,我宁愿保留最新的东西,也不愿保留最旧的)。
根据我的研究,我了解到,如果不重写整个文件,就无法删除文件的第一行(不好,太耗时),每次我认为我接近另一个解决方案时,它就会崩溃。
还有更好的办法吗?或者每次我有新行来添加我唯一的选项时都要重写 20k 行文件?
最佳答案
您可以拥有log_LastLineNo
变量将存储当时写入日志的最后一行的行号(第一次,一开始它将是 0
)。
继续写入文件,直到写入 20,000 行,并不断更新 log_LastLineNo
.
之后开始从头开始覆盖文件,并设置一个变量 log_full = 1
.
现在
案例1: log_full = 0
& log_LastLineNo = [some value < 20000]
在这种情况下,从开始读取到 log_LastLineNo
案例2: log_full = 1
& log_LastLineNo = [some value < 20000]
在这种情况下,从 log_LastLineNo + 1
开始阅读直到第 20000 行,然后再次从开始到 log_LastLineNo
.
关于c - 限制日志/缓冲区文件中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19595638/