diff options
-rw-r--r-- | examples/h5_group.c | 162 |
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; + } |