有效的交换文件内容的方式

Efficient way to exchange file contents

本文关键字:方式 文件 交换 有效      更新时间:2023-10-16

我有N个文件。File0 File1…文件(n - 1)。我的程序总是在这些文件上生成日志。我总是给File0写信。如果File0超过了预定义的大小,那么File1将其内容传递给File2, File2传递给File3…到File(n-1),之后fil0将其内容传递给File1。所以基本上日志是按照修改日期从file_0到file_1排序的。我的问题是如何有效地传递这些文件内容。每个文件大小可能为100mb。所以我不能深度复制它们。

我的方法

我将销毁文件(n-1)。然后将file(n-2)重命名为file(n-1),将file(n-3)重命名为file(n-2),以此类推,将fil0重命名为File1。然后再次创建File0,并在上面写。

我的问题是我能否以某种方式交换文件指针或fds,以便所有这些重命名和销毁的复杂性都不需要?或者有没有其他更简单、更有效的方式来进行交换?

我的问题是我能否以某种方式交换文件指针或fds,以便所有这些重命名和销毁的复杂性都不需要?或者有没有其他更简单、更有效的交换方式?

简短的回答(虽然不包含)是:不,这不会有效。

更长的答案是:取决于你想要什么。

  • 您是否希望file0始终保持满并"溢出"到file1?

    如果是这种情况,那么你需要保持所有的文件打开,保持文件描述符静态,这样你就可以控制溢出,可能实现递归日志write函数(IMHO…不好玩)。

    如果这是您的意图,那么是的,您绝对可以处理文件描述符,但是每当您写入日志文件时,您将受到严重的性能影响。

  • 你想要file0"变成"file1一旦它满了,就像把数据推到文件的后进先出堆栈,所以你从一个空的文件0开始?

    如果是这种情况,由于数据不会在文件之间"流动",那么保持所有文件打开并浪费系统资源就没有意义了。您将只在发生旋转时处理文件。

    您可能还需要实现一个自定义的write函数来锁定和同步写操作,这样在文件旋转有效时就不会出现竞争条件。

祝你好运!