HDF5:如果Fletcher32校验和过滤器在数据输入时失败会发生什么?

时间:2015-10-29 19:14:46

标签: c++ c fortran hdf5

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

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

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

我将其标记为cfortranc++,因为我很乐意为这两种API提供答案。

1 个答案:

答案 0 :(得分:1)

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

  如果启用了错误检测代码并且在数据中发现错误,则写入和读取过程将失败。

这意味着H5Dread的返回值,例如,将是负数。

应用Fletcher32过滤器后(例如H5Pset_fletcher32),您可以使用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)

并返回H5Z_CB_FAILH5Z_CB_CONT。这样,您可以准确指定校验和失败时会发生什么。

design spec的附录中有一个非常难看的例子,说明了如何使用这一切。