将具有不同大小的结构写入二进制文件并读取它

时间:2017-02-18 05:27:16

标签: c binaryfiles

如果您使用postgresql,您可能知道它会在内部视图中存储各种统计信息。我希望获得一些间隔的统计数据并将其存储到二进制文件中。我通过以下方式看到它:

  1. 使用libpq中的PQexec()读取统计信息。
  2. 使用有关结果中行数和列数的信息,分配一个3d指针数组。
  3. 将结果放入3d数组(已经是struct的一部分)
  4. 将带有3d数组的结构写入二进制文件
  5. 转到第1步并重复
  6. 接下来,可以读取这个二进制文件,将struct读入类似的3d数组,然后对值进行排序,查看等等。

    一切看起来都很好,直到行数不变,但在postgresql中有一些视图,其中行数永久更改。因此,书面结构的大小总是不同的,我不知道如何从文件中正确读取这些结构(因为我需要知道结构的大小)。

    您能告诉我或建议更好的方法吗?

2 个答案:

答案 0 :(得分:1)

基本上你需要采用一种文件格式。像这样的最基本的格式是先写入大小然后再写入数据。然后读者将读取大小,分配内存然后读取数据。

答案 1 :(得分:0)

您需要TLV上的变体 - Type, Length, Value - 编码。您存储(固定大小)有关下一个可变长度数据的信息。阅读时,您会读取固定大小的信息,并使用它来分配正确的空间来读取后面的数据。