限制日志/缓冲区文件中的行数

时间:2013-10-25 17:04:52

标签: c file-io fwrite

我在OpenWRT路由器上运行了一个小程序,该路由器记录到远程MySQL数据库。如果数据库变得不可用,程序将写入缓冲区文件(/ var / buffer)以防止数据丢失。事实上,由于它存储在路由器本身上,如果数据库停机时间过长,很可能会很快耗尽空间。

我认为如果我将文件保留为最多20,000行,则丢弃最旧的文件(如果已达到最大大小),我可以最大限度地减少数据丢失而不必担心运行超出存储空间(有点损失不是世界末日,我宁愿保留最新的东西而不是最老的。)

从我的研究中我了解到,如果不重写整个文件就无法删除文件的第一行(不好,太费时),而且每当我认为我接近另一个解决方案时,它就会崩溃。 / p>

有更好的方法吗?或者每次我有一个新行添加我唯一的选项时重写20k行文件?

1 个答案:

答案 0 :(得分:1)

您可以拥有一个log_LastLineNo变量,该变量将存储当天在日志中写入的最后一行的行号(这是第一次,它一开始就是0)。

继续写入文件,直到您写入20,000行,并不断更新log_LastLineNo 之后开始从开始覆盖文件,并设置变量log_full = 1

现在
案例1: log_full = 0&amp; log_LastLineNo = [some value < 20000]
在这种情况下,从开始读到log_LastLineNo

案例2: log_full = 1&amp; log_LastLineNo = [some value < 20000]
在这种情况下,请从log_LastLineNo + 1开始阅读直至20000行,再从开始阅读log_LastLineNo