【发布时间】:2020-04-16 04:56:52
【问题描述】:
如果没有得到很好的解释,我很抱歉。我到处寻找,但找不到解决方案。我正在尝试读取 c 中的二进制文件,但问题是它包含许多具有依赖关系的结构。我知道如何将一种结构类型读入变量,但在这种情况下不知道。这是我所说的结构之间的依赖关系的示例:
typedef struct
{
int a;
int b;
} Car;
typedef struct
{
char c[10];
int d;
Car* cars;
} Seller;
typedef struct
{
int e;
Seller* sellers;
} Maker;
阅读时,我必须能够将每辆车与其卖家联系起来,并将每个卖家与其制造商联系起来。
【问题讨论】:
-
在磁盘上存储数据时,您不能(有用地)存储地址,因为不能保证在读取数据时将数据读回相同的内存位置,即使它是同一个程序写入然后读取数据。因此,您必须为磁盘存储“序列化”数据。这是一个搜索词,但它会导致大量关于 Java 等的信息。搜索类似“
c language serialize structures”的内容。基本上,您需要在文件中创建定义大小的数组,并将索引记录到磁盘结构中的这些数组中。 -
文件结构是什么,可以分享一下格式吗?尝试使用有助于更好地理解您想要的方式的代码进行布局。
-
可以(有用地)存储地址,因为如果使用
mmap()创建特定地址空间映射,则可以保证在读取数据时将数据读回相同的内存位置。跨度> -
如果你打算使用
mmap()、@Armali,那么你必须使用只将数据放在映射内存中的内存分配——这意味着不使用malloc()等。
标签: c pointers struct binaryfiles