ad83c3841b
- declare more args as const - H5GetFileAttribName() added
411 lines
12 KiB
C
411 lines
12 KiB
C
/*
|
|
Copyright (c) 2006-2016, The Regents of the University of California,
|
|
through Lawrence Berkeley National Laboratory (subject to receipt of any
|
|
required approvals from the U.S. Dept. of Energy) and the Paul Scherrer
|
|
Institut (Switzerland). All rights reserved.
|
|
|
|
License: see file COPYING in top level of source distribution.
|
|
*/
|
|
|
|
#ifndef __H5_FILE_H
|
|
#define __H5_FILE_H
|
|
|
|
#include "h5core/h5_log.h"
|
|
#include "h5core/h5_file.h"
|
|
|
|
#include <hdf5.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if H5HUT_API_VERSION == 2
|
|
#define H5OpenFile2 H5OpenFile
|
|
#elif H5HUT_API_VERSION == 1
|
|
#define H5OpenFile1 H5OpenFile
|
|
#endif
|
|
|
|
/**
|
|
\addtogroup h5_file
|
|
@{
|
|
*/
|
|
|
|
/**
|
|
Create a new, empty file property list.
|
|
|
|
File property lists are used to control optional behavior like file
|
|
creation, file access, dataset creation, dataset transfer. File
|
|
property lists are attached to file handles while opened with \ref
|
|
H5OpenFile().
|
|
|
|
\return empty file property list
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5SetPropFileMPIO()
|
|
\see H5SetPropFileMPIOCollective()
|
|
\see H5SetPropFileMPIOIndependent()
|
|
\see H5SetPropFileMPIOPosix() (HDF5 <= 1.8.12 only)
|
|
\see H5SetPropFileCoreVFD()
|
|
\see H5SetPropFileAlign()
|
|
\see H5SetPropFileThrottle()
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_prop_t
|
|
H5CreateFileProp (
|
|
void
|
|
) {
|
|
H5_API_ENTER (h5_prop_t, "%s", "");
|
|
H5_API_RETURN (h5_create_prop (H5_PROP_FILE));
|
|
}
|
|
|
|
/**
|
|
Stores MPI IO communicator information to given file property list. If used in
|
|
\ref H5OpenFile(), MPI collective IO will be used.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5SetPropFileMPIOIndependent()
|
|
\see H5SetPropFileMPIOPosix() (HDF5 <= 1.8.12 only)
|
|
\see H5SetPropFileCoreVFD()
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileMPIOCollective (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
MPI_Comm* comm ///< [in] MPI communicator
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
|
|
H5_API_RETURN (h5_set_prop_file_mpio_collective (prop, comm));
|
|
}
|
|
|
|
/**
|
|
Stores MPI IO communicator information to given file property list. If used in
|
|
\ref H5OpenFile(), MPI independent IO will be used.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5SetPropFileMPIOCollective()
|
|
\see H5SetPropFileMPIOPosix() (HDF5 <= 1.8.12 only)
|
|
\see H5SetPropFileCoreVFD()
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileMPIOIndependent (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
MPI_Comm* comm ///< [in] MPI communicator
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
|
|
H5_API_RETURN (h5_set_prop_file_mpio_independent (prop, comm));
|
|
}
|
|
|
|
#if H5_VERSION_LE(1,8,12)
|
|
/**
|
|
Stores MPI IO communicator information to given file property list. If used in
|
|
\ref H5OpenFile(), MPI POSIX IO will be used.
|
|
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5SetPropFileMPIOCollective()
|
|
\see H5SetPropFileMPIOIndependent()
|
|
\see H5SetPropFileCoreVFD()
|
|
|
|
\note This function is available only, if H5hut has been compiled with
|
|
HDF5 1.8.12 or older.
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileMPIOPosix (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
MPI_Comm* comm ///< [in] MPI communicator
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p, comm=%p", (void*)prop, comm);
|
|
H5_API_RETURN (h5_set_prop_file_mpio_posix (prop, comm));
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
Modifies the file property list to use the \c H5FD_CORE driver. The
|
|
\c H5FD_CORE driver enables an application to work with a file in memory.
|
|
File contents are stored only in memory until the file is closed.
|
|
|
|
The increment by which allocated memory is to be increased each time more
|
|
memory is required, must be specified with \c increment.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileCoreVFD (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
const h5_int64_t increment ///< [in] size, in bytes, of memory increments.
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p", (void*)prop);
|
|
H5_API_RETURN (h5_set_prop_file_core_vfd (prop, increment));
|
|
}
|
|
|
|
/**
|
|
Sets alignment properties of a file property list so that any file
|
|
object greater than or equal in size to threshold bytes will be
|
|
aligned on an address which is a multiple of alignment. The
|
|
addresses are relative to the end of the user block; the alignment
|
|
is calculated by subtracting the user block size from the absolute
|
|
file address and then adjusting the address to be a multiple of
|
|
alignment.
|
|
|
|
Default values for alignment is one, implying no
|
|
alignment. Generally the default value result in the best
|
|
performance for single-process access to the file. For MPI IO and
|
|
other parallel systems, choose an alignment which is a multiple of
|
|
the disk block size.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5SetPropFileCoreVFD()
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileAlign (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
const h5_int64_t align ///< [in] alignment
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p, align=%lld",
|
|
(void*)prop, (long long int)align);
|
|
H5_API_RETURN (h5_set_prop_file_align (prop, align));
|
|
}
|
|
|
|
/**
|
|
Set the `throttle` factor, which causes HDF5 write and read
|
|
calls to be issued in that number of batches.
|
|
|
|
This can prevent large concurrency parallel applications that
|
|
use independent writes from overwhelming the underlying
|
|
parallel file system.
|
|
|
|
Throttling only works with the H5_VFD_MPIO_POSIX or
|
|
H5_VFD_MPIO_INDEPENDENT drivers and is only available in
|
|
the parallel library.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5SetPropFileThrottle (
|
|
h5_prop_t prop, ///< [in,out] identifier for file property list
|
|
const h5_int64_t throttle ///< [in] throttle factor
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p, throttle=%lld",
|
|
(void*)prop, (long long int)throttle);
|
|
H5_API_RETURN (h5_set_prop_file_throttle (prop, throttle));
|
|
}
|
|
|
|
/**
|
|
Close file property list.
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Function introduced in this release. |
|
|
*/
|
|
static inline h5_err_t
|
|
H5CloseProp (
|
|
h5_prop_t prop ///< [in] identifier for file property list
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "prop=%p", (void*)prop);
|
|
H5_API_RETURN (h5_close_prop (prop));
|
|
}
|
|
|
|
/**
|
|
Open file with name \c filename.
|
|
|
|
File mode flags are:
|
|
- \c H5_O_RDONLY: Only reading allowed
|
|
- \c H5_O_WRONLY: create new file, dataset must not exist
|
|
- \c H5_O_APPENDONLY: allows to append new data to an existing file
|
|
- \c H5_O_RDWR: dataset may exist
|
|
- \c H5_FS_LUSTRE: enable optimizations for the Lustre file system
|
|
- \c H5_VFD_MPIO_POSIX: use the HDF5 MPI-POSIX virtual file driver
|
|
- \c H5_VFD_MPIO_INDEPENDENT: use MPI-IO in indepedent mode
|
|
|
|
The file is opened with the properties set in the file property list
|
|
\c prop. This argument can also be set to \c H5_PROP_DEFAULT to use
|
|
reasonable default values. In this case \c MPI_COMM_WORLD will be
|
|
used as MPI communicator in a parallel execution environment.
|
|
|
|
The typical file extension is \c .h5.
|
|
|
|
\return File handle
|
|
\return \c H5_FAILURE on error
|
|
|
|
\see H5CreateFileProp()
|
|
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | API changed, old implementation is available as \c H5OpenFile1() |
|
|
*/
|
|
static inline h5_file_t
|
|
H5OpenFile2 (
|
|
const char* const filename, ///< [in] name of file
|
|
const h5_int64_t mode, ///< [in] file mode
|
|
const h5_prop_t props ///< [in] identifier for file property list
|
|
) {
|
|
H5_API_ENTER (h5_file_t,
|
|
"filename='%s', mode=%lld, props=%p",
|
|
filename, (long long int)mode, (void*)props);
|
|
H5_API_RETURN (h5_open_file2 (filename, mode, props));
|
|
}
|
|
|
|
/**
|
|
Open file with name \c filename.
|
|
|
|
File mode flags are:
|
|
- \c H5_O_RDONLY: Only reading allowed
|
|
- \c H5_O_WRONLY: create new file, dataset must not exist
|
|
- \c H5_O_APPENDONLY: allows to append new data to an existing file
|
|
- \c H5_O_RDWR: dataset may exist
|
|
- \c H5_FS_LUSTRE - enable optimizations for the Lustre file system
|
|
- \c H5_VFD_MPIO_POSIX - use the HDF5 MPI-POSIX virtual file driver
|
|
(hdf5 <= 1.8.12 only)
|
|
- \c H5_VFD_MPIO_INDEPENDENT - use MPI-IO in indepedent mode
|
|
|
|
In the serial version of H5hut, \c comm can be set to any value.
|
|
|
|
\return File handle.
|
|
\return (h5_file_p*)H5_FAILURE
|
|
|
|
\note This function is deprecated!
|
|
|
|
\note
|
|
| Release | Change |
|
|
| :------ | :----- |
|
|
| \c 1.99.15 | Old implementation of \c H5OpenFile() |
|
|
*/
|
|
static inline h5_file_p
|
|
H5OpenFile1 (
|
|
const char* filename, ///< [in] file name
|
|
const h5_int32_t flags, ///< [in] file open flags
|
|
MPI_Comm comm ///< [in] MPI communicator
|
|
) {
|
|
H5_API_ENTER (h5_file_p, "filename='%s', flags=%d, ...",filename,flags);
|
|
H5_API_RETURN (h5_open_file1 (filename, flags, comm, 0));
|
|
}
|
|
|
|
/**
|
|
Close file and free all memory associated with the file handle.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
*/
|
|
static inline h5_err_t
|
|
H5CloseFile (
|
|
const h5_file_t f ///< [in] file handle.
|
|
) {
|
|
H5_API_ENTER (h5_err_t,
|
|
"f=%p",
|
|
(h5_file_p)f);
|
|
H5_API_RETURN (h5_close_file (f));
|
|
}
|
|
|
|
/**
|
|
Verify that the passed file handle is a valid H5hut file handle.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
*/
|
|
static inline h5_err_t
|
|
H5CheckFile (
|
|
const h5_file_t f ///< [in] file handle.
|
|
) {
|
|
H5_API_ENTER (h5_err_t,
|
|
"f=%p",
|
|
(h5_file_p)f);
|
|
H5_API_RETURN (h5_check_filehandle (f));
|
|
}
|
|
|
|
/**
|
|
Flush step data to disk.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
*/
|
|
static inline h5_err_t
|
|
H5FlushStep (
|
|
const h5_file_t f ///< [in] file handle.
|
|
) {
|
|
H5_API_ENTER (h5_err_t,
|
|
"f=%p",
|
|
(h5_file_p)f);
|
|
H5_API_RETURN (h5_flush_step (f));
|
|
}
|
|
|
|
/**
|
|
Flush all file data to disk.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
*/
|
|
static inline h5_err_t
|
|
H5FlushFile (
|
|
const h5_file_t f ///< [in] file handle.
|
|
) {
|
|
H5_API_ENTER (h5_err_t,
|
|
"f=%p",
|
|
(h5_file_p)f);
|
|
H5_API_RETURN (h5_flush_file (f));
|
|
}
|
|
|
|
/**
|
|
Close H5hut library. This function should be called before program exit.
|
|
|
|
\return \c H5_SUCCESS on success
|
|
\return \c H5_FAILURE on error
|
|
*/
|
|
static inline h5_err_t
|
|
H5Finalize (
|
|
void
|
|
) {
|
|
H5_API_ENTER (h5_err_t, "%s", "");
|
|
H5_API_RETURN (h5_close_hdf5 ());
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
///< @}
|
|
#endif
|