HDF5:如果 Fletcher32 校验和过滤器在数据输入时失败会怎样?
HDF5: what happens if the Fletcher32 checksum filter fails upon data input?
HDF5 支持为输出数据管道指定的各种过滤器,特别是各种压缩算法和 Fletcher32 校验和。
在输入数据时,HDF5 库会自动检测已应用于文件数据的任何过滤器并应用反向过滤器(解压缩),无需用户执行任何操作。
然而,在内容广泛(且有些令人困惑)的 HDF5 documentation 中,我找不到任何提及在阅读时检测到错误校验和的后果的内容。
我将其标记为 c
、fortran
和 c++
,因为我很乐意回答 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_FAIL
或 H5Z_CB_CONT
。这样,您可以准确指定校验和失败时发生的情况。
的附录中有一个非常丑陋的示例说明如何使用所有这些
HDF5 支持为输出数据管道指定的各种过滤器,特别是各种压缩算法和 Fletcher32 校验和。
在输入数据时,HDF5 库会自动检测已应用于文件数据的任何过滤器并应用反向过滤器(解压缩),无需用户执行任何操作。
然而,在内容广泛(且有些令人困惑)的 HDF5 documentation 中,我找不到任何提及在阅读时检测到错误校验和的后果的内容。
我将其标记为 c
、fortran
和 c++
,因为我很乐意回答 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_FAIL
或 H5Z_CB_CONT
。这样,您可以准确指定校验和失败时发生的情况。