之前的项目里写过一个用 mmap 实现的二进制日志库,把代码放到了 github。使用的例子代码可以看这个目录下的测试文件。
用 mmap 写日志的麻烦之处是 log 内容超过文件大小时必须要把文件变大才能继续往后写。这个库主要做的事情除了创建文件,调用 mmap 完成初始化之外就是增大日志文件了。
增大文件现在的处理方式是当文件不够大时通过 truncate
将文件变大,然后将扩大的部分 mmap 上来,同时归还之前 map 的内存。
其实 bprint 就是在写完这个 log 库之后写的。或许有同学会觉得有用。