有效的交换文件内容的方式
Efficient way to exchange file contents
我有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
函数来锁定和同步写操作,这样在文件旋转有效时就不会出现竞争条件。
祝你好运!
- 复制部分文件的C++/增强方式
- 文件追加的方式是,它在每次保存C++后结束行
- 以编程方式防止重命名或删除文件,但仍使其可写
- 是否可以在C++中以间接方式包含头文件
- 为Catch2中的外部文本文件指定路径的最佳方式
- 复制文件的最佳方式是什么,以便我可以在复制过程中轻松取消复制?
- 我需要帮助以连续的方式将对象的字段正确写入文件
- 使用 C++ 显示 (.lnk) 快捷方式文件的真实路径
- 如何以可移植方式删除名称为 wchar_t 类型的文件C++
- 在Visual C ++中与Stockfish(外部可执行文件)通信的最佳方式
- Newline更改了C 中打印从文件读取的字符串的方式
- QDIR入口列表可以使用文件夹快捷方式透明地工作
- 二进制文件中的某些数据如图所示,并以奇怪的方式显示OS
- 模板类静态在最终二进制文件中跨共享库以不同方式实例化是否一致
- 打开文件的正确模式是什么,以便 seekp() 的工作方式与在默认模式下打开的文件相同
- 了解文件页在技术级别的工作方式
- 是否可以以编程方式创建迷你转储文件而不会崩溃?
- 如何以编程方式查找从 html 引用的所有文件
- 更改输出文件外观(C )的方式 - 需要先阅读,然后以不同的格式写入
- 在Linux中寻找正确的方式,将C 应用程序从C 应用程序编写加密文本到加密的GPG文件