2009-11-25 45 views
0

只需创建所需大小的文件(CreateFileMapping或mmap)的映射,将行写入缓冲区并在达到最大数量时重新开始。 - 你的答案是写一个循环文件​​在c。使用内存映射技术的记录机制

我也在写LogWriter模块。在这个caase中,我使用mmap()将整个文件映射到内存。

我正在维护读写指针。我想以附加模式将日志写入文件。然后,当记录器服务第一次启动时,它会写入它追加日志。但是当系统下次关闭时,当我运行该服务时,它不会在最后追加数据。即使系统关闭,我也想保持写入和读取偏移量。如何实现这个..?

如何查找将多少数据写入日志文件。 ??

回答

1

如何保留文件的前16个字节来存储两个uint64_t值(当然是网络字节顺序)。只要保持你的阅读&在那里写入偏移量,当文件打开时它们将始终可用。

当然,如果您希望能够使用像less这样的工具读取文件,这可能是一个小问题,但是您没有提到这样的要求,所以我假设没有。

0

正如约翰提到的,您可以将指针保存在缓冲区中 - 但要确保它们按照正确的顺序更新缓冲区中的数据是非常困难的。

你可能要考虑这个替换,简单的系统:

  • 写数据正常追加模式日志文件(无MMAP),直到当达到临界大小达到临界
  • ,切换到新的日志文件
  • 当您有超过一定数量的日志文件时,请删除最早的日志文件。