我使用的是使用HDF5的Fortran代码(1. 10 .1)。在某些时候,有人打电话使用h5fopen_f
打开文件:
H5FileName = "+hdf5/Temperature_00000_00001.h5"
CALL h5fopen_f(H5FileName, H5F_ACC_RDWR_F, file, hdferr)
Scalardataset = 'Temperature_00001_0000'
call h5ltget_dataset_info_f(file, Scalardataset, dimstmp, type_class, type_size, hdferr)
call h5fclose_f(file,hdferr)
这给了我一个错误:
HDF5-DIAG: Error detected in HDF5 (1.10.1) MPI-process 0:
#000: H5F.c line 586 in H5Fopen(): unable to open file
major: File accessibilty
minor: Unable to open file
#001: H5Fint.c line 1305 in H5F_open(): unable to lock the file
major: File accessibilty
minor: Unable to open file
#002: H5FD.c line 1839 in H5FD_lock(): driver lock request failed
major: Virtual File Layer
minor: Can't update object
#003: H5FDsec2.c line 940 in H5FD_sec2_lock(): unable to lock file, errno = 11, error message = 'Resource temporarily unavailable'
major: File accessibilty
minor: Bad file ID accessed
我已经检查过该文件是否存在,它应该在哪里以及我拥有正确的权限。此外,当我只使用一个进程时,代码工作正常,当我使用多个进程时,其中一个进程能够打开文件(err=0
),但其余进程可以({{{{ 1}})。最后,我在其他地方安装了相同的代码并且工作得很好(版本1. 8 .14)。
这可能是版本的问题吗?
答案 0 :(得分:2)
我找到了解决这个问题的两种方法:
H5F_ACC_RDONLY_F
代替H5F_ACC_RDWR_F
将文件打开为只读(这对我来说很好,因为我不需要写。HDF5 1.8.14
重新编译所有内容。我想版本1.10.x中的读写权限比版本1.8.x更严格。理想情况下,我希望能够与HDF5
一起使用更新版H5F_ACC_RDWR_F
,但现在它适用于我。
答案 1 :(得分:0)
我在HDF5 1.10.1中有一个非常相似的问题。我们正在使用多个读取器以H5F_ACC_RDONLY模式访问文件。
通过设置环境变量来禁用文件锁定似乎可以解决H5FDsec2.c line 940 in H5FD_sec2_lock(): unable to lock file, errno = 11, error message = 'Resource temporarily unavailable'
:
export HDF5_USE_FILE_LOCKING="FALSE"
此env var在运行时由hdf5检查。参见:https://support.hdfgroup.org/ftp/HDF5/current/src/unpacked/release_docs/RELEASE.txt