gpt4 book ai didi

c - 使用一些 malloc 内存而不是使用文件来虚拟化 fopen

转载 作者:行者123 更新时间:2023-11-30 16:43:34 26 4
gpt4 key购买 nike

我有一段使用 FILE* 文件 和 fwrite 的代码:

test = fwrite(&object,sizeof(object),1,file);

我想使用索引结构序列化一些内部数据结构(因此,我既没有使用 Google 的 Protobuf 也没有使用 Cap'n Proto,因为那是具有一些特定索引要求的自定义数据结构)。现在,在我的项目中,我想使用 Google Test 来测试序列化,以检查已序列化的内容是否可以反序列化并轻松检索。在测试阶段,我想传递给 fwrite 一个 FILE* 对象,它不是一个文件,而是一些分配的主内存的处理程序,这样就不会生成文件,并且我可以直接检查主内存的结果序列化。是否可以虚拟化FILE*并直接写入主内存?出于性能原因,我想保留 fwrite 来写入数据结构,而不必被迫编写两种不同的序列化方法(有时我正在即时编写,而无需进一步占用内存进行转码)。提前致谢。

最佳答案

一种方法是使用所有这些 fopen/fwrite 函数创建一个动态库(这将为您的神奇文件名做一些事情,否则会回退到原始文件名)并使用 LD_PRELOAD 加载它。要回退到原始版本,请使用“dlsym”和 RTLD_NEXT 解析它们。

另一种方法是在库/测试的顶部包含一个特殊的 header ,其中包含类似“#define fopen my_fopen”的语句。在实现“my_fopen”的文件中,您需要在包含原始“stdio.h”之前放置“#undef fopen”。此方法仅适用于包含 header 的源代码文件,但不会 Hook 您链接的二进制库的函数。

关于c - 使用一些 malloc 内存而不是使用文件来虚拟化 fopen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45160934/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com