【发布时间】:2011-07-08 12:00:51
【问题描述】:
我需要使用循环文件在磁盘上保存大量动态数据(一次写入,可能永远不会读取)。
为了更清楚,我想将文件视为循环缓冲区 - 即写入缓冲区将转到文件,读取将是文件读取。具体来说,我正在做日志。
我想知道 boost 是否有任何我可以使用的功能(最好是循环文件)。
我看到 boost 中有一个循环缓冲区,但我不能将它与文件一起用作某种后端。我什至考虑过mmap()-将文件放入内存(如果我使用大小超过 4GB 的日志,这将不是一个好的解决方案),然后从我将传递给的Allocator 返回映射块缓冲区。
这似乎是一种不好的方法,因为循环缓冲区文档说Allocator 将用于任何内存分配(而不仅仅是缓冲区分配)。
循环文件是否有其他功能,或者有其他方法可以做到这一点?
嗯,我实际上是指在文件系统日志的意义上记录(即记录写入)。我有一个要记录的磁盘(对它的写入),以便我可以执行 CDP。我需要记录所有写入和标记,以便我可以将磁盘回滚到之前的位置。
日志可能有很多空间(很容易超过 10GB),所以我不知道 mmap 解决方案是否有效。
【问题讨论】:
-
如果日志条目是固定长度的,那么是随机访问文件? r+ 模式 - fseek?
标签: c++ linux file logging boost