/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * 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: Robb Matzke * Monday, August 2, 1999 * * Purpose: The public header file for the "multi" driver. */ #ifndef H5FDmulti_H #define H5FDmulti_H #define H5FD_MULTI (H5FDperform_init(H5FD_multi_init)) #ifdef __cplusplus extern "C" { #endif H5_DLL hid_t H5FD_multi_init(void); /** * \ingroup FAPL * * \brief Sets up use of the multi-file driver * * \fapl_id * \param[in] memb_map Maps memory usage types to other memory usage types * \param[in] memb_fapl Property list for each memory usage type * \param[in] memb_name Name generator for names of member files * \param[in] memb_addr The offsets within the virtual address space, from 0 * (zero) to #HADDR_MAX, at which each type of data storage begins * \param[in] relax Allows read-only access to incomplete file sets when \c TRUE * \returns \herr_t * * \details H5Pset_fapl_multi() sets the file access property list \p fapl_id to * use the multi-file driver. * * The multi-file driver enables different types of HDF5 data and * metadata to be written to separate files. These files are viewed by * the HDF5 library and the application as a single virtual HDF5 file * with a single HDF5 file address space. The types of data that can be * broken out into separate files include raw data, the superblock, * B-tree data, global heap data, local heap data, and object * headers. At the programmer's discretion, two or more types of data * can be written to the same file while other types of data are * written to separate files. * * The array \p memb_map maps memory usage types to other memory usage * types and is the mechanism that allows the caller to specify how * many files are created. The array contains #H5FD_MEM_NTYPES entries, * which are either the value #H5FD_MEM_DEFAULT or a memory usage * type. The number of unique values determines the number of files * that are opened. * * The array \p memb_fapl contains a property list for each memory * usage type that will be associated with a file. * * The array \p memb_name should be a name generator (a * \Code{printf}-style format with a \Code{%s} which will be replaced * with the name passed to H5FDopen(), usually from H5Fcreate() or * H5Fopen()). * * The array \p memb_addr specifies the offsets within the virtual * address space, from 0 (zero) to #HADDR_MAX, at which each type of * data storage begins. * * If \p relax is set to 1 (TRUE), then opening an existing file for * read-only access will not fail if some file members are * missing. This allows a file to be accessed in a limited sense if * just the meta data is available. * * Default values for each of the optional arguments are as follows: * * * * * * * * * * * * * * * * * *
\p memb_mapThe default member map contains the value #H5FD_MEM_DEFAULT for each element.
* \p memb_fapl * * The default value is #H5P_DEFAULT for each element. *
* \p memb_name * * The default string is \Code{%s-X.h5} where \c X is one of the following letters: * - \c s for #H5FD_MEM_SUPER * - \c b for #H5FD_MEM_BTREE * - \c r for #H5FD_MEM_DRAW * - \c g for #H5FD_MEM_GHEAP * - \c l for #H5FD_MEM_LHEAP * - \c o for #H5FD_MEM_OHDR *
* \p memb_addr * * The default setting is that the address space is equally divided * among all of the elements: * - #H5FD_MEM_SUPER \Code{-> 0 * (HADDR_MAX/6)} * - #H5FD_MEM_BTREE \Code{-> 1 * (HADDR_MAX/6)} * - #H5FD_MEM_DRAW \Code{-> 2 * (HADDR_MAX/6)} * - #H5FD_MEM_GHEAP \Code{-> 3 * (HADDR_MAX/6)} * - #H5FD_MEM_LHEAP \Code{-> 4 * (HADDR_MAX/6)} * - #H5FD_MEM_OHDR \Code{-> 5 * (HADDR_MAX/6)} *
* * \par Example: * The following code sample sets up a multi-file access property list that * partitions data into meta and raw files, each being one-half of the address:\n * \code * H5FD_mem_t mt, memb_map[H5FD_MEM_NTYPES]; * hid_t memb_fapl[H5FD_MEM_NTYPES]; * const char *memb[H5FD_MEM_NTYPES]; * haddr_t memb_addr[H5FD_MEM_NTYPES]; * * // The mapping... * for (mt=0; mt