summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--examples/h5_group.c162
1 files changed, 97 insertions, 65 deletions
diff --git a/examples/h5_group.c b/examples/h5_group.c
index 1c5ab12..2a7ea48 100644
--- a/examples/h5_group.c
+++ b/examples/h5_group.c
@@ -1,25 +1,34 @@
/*
- * This example shows how to create groups within the file and
- * datasets within the file and groups.
+ * This example creates a group in the file and dataset in the group.
+ * Hard link to the group object is created and the dataset is accessed
+ * under different names.
+ * Iterator function is used to find the object names in the root group.
*/
#include "hdf5.h"
-#define FILE "DIR.h5"
+#define FILE "group.h5"
#define RANK 2
+
+herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+ /* Operator function */
int
main(void)
{
- hid_t file, dir;
+ hid_t file;
+ hid_t grp;
hid_t dataset, dataspace;
+ hid_t plist;
herr_t status;
hsize_t dims[2];
- hsize_t size[1];
+ hsize_t cdims[2];
+
+ int idx;
/*
* Create a file.
@@ -27,92 +36,115 @@ main(void)
file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
/*
- * Create two groups in a file.
+ * Create a group in the file.
*/
- dir = H5Gcreate(file, "/IntData", 0);
- status = H5Gclose(dir);
-
- dir = H5Gcreate(file,"/FloatData", 0);
- status = H5Gclose(dir);
+ grp = H5Gcreate(file, "/Data", 0);
+ /*
+ * Create dataset "Compressed Data" in the group using absolute
+ * name. Dataset creation property list is modified to use
+ * GZIP compression with the compression effort set to 6.
+ * Note that compression can be used only when dataset is chunked.
+ */
+ dims[0] = 1000;
+ dims[1] = 20;
+ cdims[0] = 20;
+ cdims[1] = 20;
+ dataspace = H5Screate_simple(RANK, dims, NULL);
+ plist = H5Pcreate(H5P_DATASET_CREATE);
+ H5Pset_chunk(plist, 2, cdims);
+ H5Pset_deflate( plist, 6);
+ dataset = H5Dcreate(file, "/Data/Compressed_Data", H5T_NATIVE_INT,
+ dataspace, plist);
+
/*
- * Create dataspace for the character string
+ * Close the dataset and the file.
*/
- size[0] = 80;
- dataspace = H5Screate_simple(1, size, NULL);
+ H5Sclose(dataspace);
+ H5Dclose(dataset);
+ H5Fclose(file);
/*
- * Create dataset "String" in the root group.
+ * Now reopen the file and group in the file.
*/
- dataset = H5Dcreate(file, "String", H5T_NATIVE_CHAR, dataspace,
- H5P_DEFAULT);
- H5Dclose(dataset);
+ file = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+ grp = H5Gopen(file, "Data");
- /*
- * Create dataset "String" in the /IntData group.
+ /*
+ * Access "Compressed_Data" dataset in the group.
*/
- dataset = H5Dcreate(file, "/IntData/String", H5T_NATIVE_CHAR, dataspace,
- H5P_DEFAULT);
- H5Dclose(dataset);
+ dataset = H5Dopen(grp, "Compressed_Data");
+ if( dataset < 0) printf(" Dataset is not found. \n");
+ printf("\"/Data/Compressed_Data\" dataset is open \n");
/*
- * Create dataset "String" in the /FloatData group.
+ * Close the dataset.
*/
- dataset = H5Dcreate(file, "/FloatData/String", H5T_NATIVE_CHAR, dataspace,
- H5P_DEFAULT);
- H5Sclose(dataspace);
- H5Dclose(dataset);
+ status = H5Dclose(dataset);
/*
- * Create IntArray dataset in the /IntData group by specifying full path.
+ * Create hard link to the Data group.
*/
- dims[0] = 2;
- dims[1] = 3;
- dataspace = H5Screate_simple(RANK, dims, NULL);
- dataset = H5Dcreate(file, "/IntData/IntArray", H5T_NATIVE_INT, dataspace,
- H5P_DEFAULT);
- H5Sclose(dataspace);
- H5Dclose(dataset);
+ status = H5Glink(file, H5G_LINK_HARD, "Data", "Data_new");
- /*
- * Set current group to /IntData and attach to the dataset String.
+ /*
+ * We can access "Compressed_Data" dataset using created
+ * hard link "Data_new".
*/
- status = H5Gset (file, "/IntData");
- dataset = H5Dopen(file, "String");
- if (dataset > 0) printf("String dataset in /IntData group is found\n");
- H5Dclose(dataset);
+ dataset = H5Dopen(file, "/Data_new/Compressed_Data");
+ if( dataset < 0) printf(" Dataset is not found. \n");
+ printf("\"/Data_new/Compressed_Data\" dataset is open \n");
/*
- * Set current group to /FloatData.
+ * Close the dataset.
*/
- status = H5Gset (file, "/FloatData");
+ status = H5Dclose(dataset);
/*
- * Create two datasets FlatArray and DoubleArray.
+ * Use iterator to see the names of the objects in the file
+ * root directory.
*/
- dims[0] = 5;
- dims[1] = 10;
- dataspace = H5Screate_simple(RANK, dims, NULL);
- dataset = H5Dcreate(file, "FloatArray", H5T_NATIVE_FLOAT, dataspace,
- H5P_DEFAULT);
- H5Sclose(dataspace);
- H5Dclose(dataset);
+ idx = H5Giterate(file, "/", NULL, file_info, NULL);
- dims[0] = 4;
- dims[1] = 6;
- dataspace = H5Screate_simple(RANK, dims, NULL);
- dataset = H5Dcreate(file, "DoubleArray", H5T_NATIVE_DOUBLE, dataspace,
- H5P_DEFAULT);
- H5Sclose(dataspace);
- H5Dclose(dataset);
+ /*
+ * Unlink name "Data" and use iterator to see the names
+ * of the objects in the file root direvtory.
+ */
+ if (H5Gunlink(file, "Data") < 0)
+ printf(" H5Gunlink failed \n");
+ else
+ printf("\"Data\" is unlinked \n");
- /*
- * Attach to /FloatData/String dataset.
+ idx = H5Giterate(file, "/", NULL, file_info, NULL);
+
+
+ /*
+ * Close the file.
*/
- dataset = H5Dopen(file, "/FloatData/String");
- if (dataset > 0) printf("/FloatData/String dataset is found\n");
- H5Dclose(dataset);
- H5Fclose(file);
+
+ status = H5Fclose(file);
return 0;
}
+/*
+ * Operator function.
+ */
+herr_t
+file_info(hid_t loc_id, const char *name, void *opdata)
+{
+ hid_t grp;
+ /*
+ * Open the group using its name.
+ */
+ grp = H5Gopen(loc_id, name);
+
+ /*
+ * Display group name.
+ */
+ printf("\n");
+ printf("Name : ");
+ puts(name);
+
+ H5Gclose(grp);
+ return 0;
+ }