【问题标题】:Write struct with different sizes into binary file and read it将不同大小的结构写入二进制文件并读取
【发布时间】:2017-02-18 13:34:23
【问题描述】:

如果您使用过 postgresql,您可能知道它在内部视图中存储各种统计信息。我想以一定的间隔获取统计信息并将其存储到二进制文件中。我是这样看的:

  1. 使用 PQexec() 从 libpq 读取统计信息。
  2. 使用结果中有关行数和列数的信息,分配一个 3d 指针数组。
  3. 将结果放入 3d 数组(已经是 struct 的一部分)
  4. 将结构体与 3d 数组写入二进制文件
  5. 转到步骤 1 并重复

接下来,可以读取这个二进制文件,将结构读取到类似的 3d 数组中,然后对值进行排序,查看等等。

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

您能给我建议或提出更好的方法吗?

【问题讨论】:

  • 听起来您只需要在实际数据之前将一些元数据作为标题写入文件中。那么你对元素大小进行编码就没有问题了。
  • 是的,我想到了标题,有一个时刻让我感到困惑——标题在文件中具有 固定 大小,因此我们可以在文件中放入有限的统计快照的数量。也许最好为每个统计信息使用用户专用标题。并首先读取行标题(大小所在的位置),然后读取日期。

标签: c binaryfiles


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多