mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-12-27 08:01:04 +08:00
fc88fcde10
* Merge examples repo into library * Change grepTest to be more fault-tolerant * Update examples macro file * Exclude all Fortran examples from doxygen
100 lines
2.9 KiB
C
100 lines
2.9 KiB
C
/************************************************************
|
|
|
|
This example shows how to create intermediate groups with
|
|
a single call to H5Gcreate.
|
|
|
|
************************************************************/
|
|
|
|
#include "hdf5.h"
|
|
|
|
#define FILE "h5ex_g_intermediate.h5"
|
|
|
|
/*
|
|
* Operator function to be called by H5Ovisit.
|
|
*/
|
|
herr_t op_func(hid_t loc_id, const char *name, const H5O_info_t *info, void *operator_data);
|
|
|
|
int
|
|
main(void)
|
|
{
|
|
hid_t file = H5I_INVALID_HID;
|
|
hid_t group = H5I_INVALID_HID;
|
|
hid_t gcpl = H5I_INVALID_HID;
|
|
herr_t status;
|
|
|
|
/*
|
|
* Create a new file using the default properties.
|
|
*/
|
|
file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
|
|
|
|
/*
|
|
* Create group creation property list and set it to allow creation
|
|
* of intermediate groups.
|
|
*/
|
|
gcpl = H5Pcreate(H5P_LINK_CREATE);
|
|
status = H5Pset_create_intermediate_group(gcpl, 1);
|
|
|
|
/*
|
|
* Create the group /G1/G2/G3. Note that /G1 and /G1/G2 do not
|
|
* exist yet. This call would cause an error if we did not use the
|
|
* previously created property list.
|
|
*/
|
|
group = H5Gcreate(file, "/G1/G2/G3", gcpl, H5P_DEFAULT, H5P_DEFAULT);
|
|
|
|
/*
|
|
* Print all the objects in the files to show that intermediate
|
|
* groups have been created. See h5ex_g_visit for more information
|
|
* on how to use H5Ovisit.
|
|
*/
|
|
printf("Objects in the file:\n");
|
|
#if H5_VERSION_GE(1, 12, 0) && !defined(H5_USE_110_API) && !defined(H5_USE_18_API) && !defined(H5_USE_16_API)
|
|
status = H5Ovisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, op_func, NULL, H5O_INFO_ALL);
|
|
#else
|
|
status = H5Ovisit(file, H5_INDEX_NAME, H5_ITER_NATIVE, op_func, NULL);
|
|
#endif
|
|
|
|
/*
|
|
* Close and release resources.
|
|
*/
|
|
status = H5Pclose(gcpl);
|
|
status = H5Gclose(group);
|
|
status = H5Fclose(file);
|
|
|
|
return 0;
|
|
}
|
|
|
|
/************************************************************
|
|
|
|
Operator function for H5Ovisit. This function prints the
|
|
name and type of the object passed to it.
|
|
|
|
************************************************************/
|
|
herr_t
|
|
op_func(hid_t loc_id, const char *name, const H5O_info_t *info, void *operator_data)
|
|
{
|
|
printf("/"); /* Print root group in object path */
|
|
|
|
/*
|
|
* Check if the current object is the root group, and if not print
|
|
* the full path name and type.
|
|
*/
|
|
if (name[0] == '.') /* Root group, do not print '.' */
|
|
printf(" (Group)\n");
|
|
else
|
|
switch (info->type) {
|
|
case H5O_TYPE_GROUP:
|
|
printf("%s (Group)\n", name);
|
|
break;
|
|
case H5O_TYPE_DATASET:
|
|
printf("%s (Dataset)\n", name);
|
|
break;
|
|
case H5O_TYPE_NAMED_DATATYPE:
|
|
printf("%s (Datatype)\n", name);
|
|
break;
|
|
default:
|
|
printf("%s (Unknown)\n", name);
|
|
}
|
|
|
|
return 0;
|
|
}
|