123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Copyright by The HDF Group. *
- * Copyright by the Board of Trustees of the University of Illinois. *
- * All rights reserved. *
- * *
- * This file is part of HDF5. The full HDF5 copyright notice, including *
- * terms governing use, modification, and redistribution, is contained in *
- * the COPYING file, which can be found at the root of the source code *
- * distribution tree, or in https://www.hdfgroup.org/licenses. *
- * If you do not have access to either file, you may request a copy from *
- * help@hdfgroup.org. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
- /*
- * Programmer: Raymond Lu
- * Wednesday, 20 September 2006
- *
- * Purpose: The public header file for the direct driver.
- */
- #ifndef H5FDdirect_H
- #define H5FDdirect_H
- #ifdef H5_HAVE_DIRECT
- #define H5FD_DIRECT (H5FDperform_init(H5FD_direct_init))
- #define H5FD_DIRECT_VALUE H5_VFD_DIRECT
- #else
- #define H5FD_DIRECT (H5I_INVALID_HID)
- #define H5FD_DIRECT_VALUE H5_VFD_INVALID
- #endif /* H5_HAVE_DIRECT */
- #ifdef H5_HAVE_DIRECT
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Default values for memory boundary, file block size, and maximal copy buffer size.
- * Application can set these values through the function H5Pset_fapl_direct. */
- #define MBOUNDARY_DEF 4096
- #define FBSIZE_DEF 4096
- #define CBSIZE_DEF 16 * 1024 * 1024
- H5_DLL hid_t H5FD_direct_init(void);
- /**
- * \ingroup FAPL
- *
- * \brief Sets up use of the direct I/O driver
- *
- * \fapl_id
- * \param[in] alignment Required memory alignment boundary
- * \param[in] block_size File system block size
- * \param[in] cbuf_size Copy buffer size
- * \returns \herr_t
- *
- * \details H5Pset_fapl_direct() sets the file access property list, \p fapl_id,
- * to use the direct I/O driver, #H5FD_DIRECT. With this driver, data
- * is written to or read from the file synchronously without being
- * cached by the system.
- *
- * File systems usually require the data address in memory, the file
- * address, and the size of the data to be aligned. The HDF5 library’s
- * direct I/O driver is able to handle unaligned data, though that will
- * consume some additional memory resources and may slow
- * performance. To get better performance, use the system function \p
- * posix_memalign to align the data buffer in memory and the HDF5
- * function H5Pset_alignment() to align the data in the file. Be aware,
- * however, that aligned data I/O may cause the HDF5 file to be bigger
- * than the actual data size would otherwise require because the
- * alignment may leave some holes in the file.
- *
- * \p alignment specifies the required alignment boundary in memory.
- *
- * \p block_size specifies the file system block size. A value of 0
- * (zero) means to use HDF5 library’s default value of 4KB.
- *
- * \p cbuf_size specifies the copy buffer size.
- *
- * \since 1.8.0
- *
- */
- H5_DLL herr_t H5Pset_fapl_direct(hid_t fapl_id, size_t alignment, size_t block_size, size_t cbuf_size);
- /**
- * \ingroup FAPL
- *
- * \brief Retrieves direct I/O driver settings
- *
- * \fapl_id
- * \param[out] boundary Required memory alignment boundary
- * \param[out] block_size File system block size
- * \param[out] cbuf_size Copy buffer size
- * \returns \herr_t
- *
- * \details H5Pget_fapl_direct() retrieves the required memory alignment (\p
- * alignment), file system block size (\p block_size), and copy buffer
- * size (\p cbuf_size) settings for the direct I/O driver, #H5FD_DIRECT,
- * from the file access property list \p fapl_id.
- *
- * See H5Pset_fapl_direct() for discussion of these values,
- * requirements, and important considerations.
- *
- * \since 1.8.0
- *
- */
- H5_DLL herr_t H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary /*out*/, size_t *block_size /*out*/,
- size_t *cbuf_size /*out*/);
- #ifdef __cplusplus
- }
- #endif
- #endif /* H5_HAVE_DIRECT */
- #endif
|