FILE IO到InMemory IO

时间:2014-08-17 13:09:21

标签: c++ c file-io static-libraries

我有一个遗留C库,它接受一个文件,处理文件有效负载并将处理过的有效负载写入输出文件。库中的函数与FILE紧密耦合,即它将FILE句柄传递给函数和函数执行文件IO以检索必要的数据。

我想修改这个库,使其适用于内存数据(无文件IO)。即传递二进制数组并返回二进制数组。

我有2个解决方案

  1. 实现InMemory文件模块(将所有操作植入C FILE)并使用typedef或#define
  2. 覆盖默认文件操作和新实现
  3. 将二进制数组传递给库的所有函数,并从中检索必要的数据。
  4. 其中哪一个更好或任何其他更好的方法来解决问题

2 个答案:

答案 0 :(得分:3)

如果任何其他代码依赖它,我建议不要更改遗留代码。

如果您正在构建适合POSIX的平台,可以使用fmemopen http://pubs.opengroup.org/onlinepubs/9699919799/functions/fmemopen.html

对于Windows,这可能会有所帮助 C - create file in memory

答案 1 :(得分:0)

我不知道更改遗留代码的确切目的是什么。我理解的问题是读写造成的开销。但是有很多方法可用于解决开销问题:

  1. 如前所述,您可以使用fmemopen
  2. 你也可以mmap使用普通read/write应该没什么区别;无论哪种方式,一切都通过文件系统缓存/缓冲区发生。
  3. 您还可以使用tmpfs将内存作为(临时)文件(也称为RAMDisk)用作存储。由于文件很容易被淘汰,因为文件本质上是暂时存在的
  4. 另一种解决方案 - 您可以使用内存数据库(TimesTen作为样本)