boost是否支持循环文件?

时间:2011-03-04 01:19:44

标签: c++ linux file logging boost

我需要使用循环文件来保存磁盘上的大量动态数据(一次写入,可能永远不会读取)。

为了更清楚,我想将文件视为循环缓冲区 - 即写入缓冲区将转到文件,读取将是文件读取。具体来说,我正在做日志。

我想知道boost是否具有我可以使用的任何功能(理想情况下是循环文件)。

我看到在boost中有一个循环缓冲区,但是我不能将它与文件一起用作某种后端。我甚至考虑过mmap()将文件存入内存(如果我使用大小超过4GB的日志,这将不是一个好的解决方案),并从Allocator返回映射的块。我会转到缓冲区 这似乎是一个糟糕的方法,因为循环缓冲区文档说Allocator将用于任何内存分配(而不仅仅是缓冲区分配)。

圆形文件还有其他任何功能吗?

嗯,实际上我的意思是记录文件系统日志(即记录写入)。我有一个我想要记录的磁盘(写入它),以便我可以做CDP。我需要记录所有写入和标记,以便我可以将磁盘回滚到之前的位置。
日志可能有很大的空间(容易超过10GB),所以我不知道mmap解决方案是否可行。

3 个答案:

答案 0 :(得分:6)

如何使用Boost的循环缓冲区+ Boost IPC的内存映射文件? IPC文档说明了它可能:http://www.boost.org/doc/libs/1_46_0/doc/html/interprocess/allocators_containers.html(见最后一行)。

答案 1 :(得分:1)

RRDtool可以接受吗?它是在C语言而不是C ++中,但希望在API周围构建一个面向对象的垫片不会太糟糕。

答案 2 :(得分:0)

您将问题标记为Linux,并且您正在编写日志文件,因此请为您的应用程序配置logrotate。它足够灵活,可以做你想做的事。