HDF5:如果 Fletcher32 校验和过滤器在数据输入时失败会怎样?

HDF5: what happens if the Fletcher32 checksum filter fails upon data input?

HDF5 支持为输出数据管道指定的各种过滤器,特别是各种压缩算法和 Fletcher32 校验和。

在输入数据时,HDF5 库会自动检测已应用于文件数据的任何过滤器并应用反向过滤器(解压缩),无需用户执行任何操作。

然而,在内容广泛(且有些令人困惑)的 HDF5 documentation 中,我找不到任何提及在阅读时检测到错误校验和的后果的内容。

我将其标记为 cfortranc++,因为我很乐意回答 API。

它似乎根本没有在文档中提及,但是 Fletcher32 过滤器的这个 design spec 表示用户可以提供回调函数来处理失败(即不正确的校验和)。如果没有提供回调函数,

the write and read processes will fail if the Error-detecting code is enabled and finds error in the data.

这意味着 H5Dread 的 return 值将为负数。

应用 Fletcher32 过滤器后(例如 H5Pset_fletcher32), you can set the callback with H5Pset_filter_callback。回调函数必须匹配原型:

typedef H5Z_cb_return_t (H5Z_filter_func_t) (H5Z_filter_t filter_id, void *buf, size_t buf_size, void *op_data)

和 return H5Z_CB_FAILH5Z_CB_CONT。这样,您可以准确指定校验和失败时发生的情况。

design spec.

的附录中有一个非常丑陋的示例说明如何使用所有这些