问题:我想在单元测试中使用内存映射的HDF5文件。是否可以从头开始创建?
状态:我已经阅读了HDF5文件映像操作 文档,并尝试应用它。根据使用的确切参数,我会得到一个无效的文件标识符(-1),或者后续数据集的创建会失败。
通常情况下,我们的单元测试会编写新的测试文件,模拟用户将新创建的数据保存到磁盘上的文件中。因此,还没有现有的文件。在阅读hdf5文件图像操作的文档时,假定已设置初始文件图像。我没有任何东西-因为我正在尽可能接近我的测试实际用户场景。这样的文件是否可以从空缓冲区创建?
static const unsigned int FileSize = 1024 * 1024 * 100;
std::vector<unsigned char> buffer(FileSize, 0); // initialize buffer with zeroes
int flags = H5LT_FILE_IMAGE_DONT_COPY |
H5LT_FILE_IMAGE_OPEN_RW |
H5LT_FILE_IMAGE_DONT_RELEASE;
m_file = H5LTopen_file_image(static_cast<void*>(buffer.data()), buffer.size(), flags);
如果像示例中一样保留缓冲区的所有权,则无法获得有效的文件ID。我怀疑HDF5中存在错误,但不幸的是,省略标志H5LT_FILE_IMAGE_DONT_COPY | H5LT_FILE_IMAGE_DONT_RELEASE也没有起作用。
&_var
不会在长期使用中(比如几天)返回相同的地址,而hdf文件仍在使用。 - floatdropstatic int a=0;
再使用a++
来构造伪文件名将是唯一的(除非您溢出 int)。 - eudoxosa
。 - floatdropstatic std::atomic<int> a=0;
和a++
。 - eudoxos