2 c++ file-io logging file filestream
我正在用C++编写一个程序,并想知道是否有人可以帮助我解决这里解释的情况.
假设,我有一个大约30MB的日志文件,我已经将最后2MB的文件复制到程序中的缓冲区.
我删除文件(或清除内容),然后将我的2MB写回文件.
一切都很好,直到这里.但是,关注的是我读取文件(最后2MB)并清除文件(30MB文件)然后写回最后2MB.如果在我从1GB文件复制最后300MB文件的情况下,将需要大部分时间.
有没有人想过让这个过程更简单?
拥有大型日志文件时,应考虑以下原因.
磁盘空间:日志文件是未压缩的纯文本,占用大量空间.典型压缩会将文件大小减小10:1.但是,文件在使用(锁定)时无法压缩.因此必须将日志文件轮换不使用.
系统资源:定期打开和关闭文件会占用大量系统资源,这会降低服务器的性能.
文件大小:小文件在发生故障时更容易备份和恢复.
我只是不想复制,清除并重新写入文件的最后一行.只是一个更简单的过程...... :-)
编辑:没有任何内部进程来支持日志轮换. logrotate是工具.
我建议采用略有不同的方法.
为了提高副本的性能,您可以以块的形式复制数据,您可以使用块大小来查找最佳值.