我需要使用循环文件来保存磁盘上的大量动态数据(一次写入,可能永远不会读取)。
为了更清楚,我想将文件视为循环缓冲区 - 即写入缓冲区将转到文件,读取将是文件读取。具体来说,我正在做日志。
我想知道boost是否具有我可以使用的任何功能(理想情况下是循环文件)。
我看到在boost中有一个循环缓冲区,但是我不能将它与文件一起用作某种后端。我甚至考虑过mmap()
将文件存入内存(如果我使用大小超过4GB的日志,这将不是一个好的解决方案),并从Allocator
返回映射的块。我会转到缓冲区
这似乎是一个糟糕的方法,因为循环缓冲区文档说Allocator
将用于任何内存分配(而不仅仅是缓冲区分配)。
圆形文件还有其他任何功能吗?
嗯,实际上我的意思是记录文件系统日志(即记录写入)。我有一个我想要记录的磁盘(写入它),以便我可以做CDP。我需要记录所有写入和标记,以便我可以将磁盘回滚到之前的位置。
日志可能有很大的空间(容易超过10GB),所以我不知道mmap解决方案是否可行。
答案 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。它足够灵活,可以做你想做的事。