PROGRAM main USE HDF5 USE ISO_C_BINDING IMPLICIT NONE INTEGER, PARAMETER :: max_len = 132 CHARACTER(LEN=max_len), PARAMETER :: filename = "GW1AM2_201207022318_175D_L1SGADNR_0000000.h5" CHARACTER(LEN=max_len), PARAMETER :: attribute = "ProductName" INTEGER(HID_T) :: file, space, attr ! Handles INTEGER :: hdferr INTEGER(HSIZE_T), DIMENSION(1:1) :: maxdims INTEGER(hsize_t) :: i INTEGER :: len TYPE(C_PTR), DIMENSION(:), ALLOCATABLE, TARGET :: rdata ! Read buffer INTEGER(hsize_t), DIMENSION(1:1) :: dims = (/1/) TYPE(C_PTR) :: f_ptr CHARACTER(len=max_len, kind=c_char), POINTER :: data ! A pointer to a Fortran string ! ! Initialize FORTRAN interface. ! CALL h5open_f(hdferr) ! ! Open file and attribute. ! CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, hdferr) CALL h5aopen_f(file, attribute, attr, hdferr) CALL h5aget_space_f(attr, space, hdferr) CALL h5sget_simple_extent_dims_f(space, dims, maxdims, hdferr) ALLOCATE(rdata(1:dims(1))) ! ! Read the data. ! f_ptr = C_LOC(rdata(1)) CALL h5aread_f(attr, H5T_STRING, f_ptr, hdferr) ! ! Output the variable-length data to the screen. ! DO i = 1, dims(1) CALL C_F_POINTER(rdata(i), data) len = 0 DO WHILE(DATA(len+1:len+1).NE.C_NULL_CHAR) len = len + 1 ENDDO WRITE(*,'(A)') data(1:len) END DO ! ! Close and release resources. ! CALL h5aclose_f(attr , hdferr) CALL h5sclose_f(space, hdferr) CALL h5fclose_f(file , hdferr) END PROGRAM main