summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElena Pourmal <epourmal@hdfgroup.org>1999-06-25 18:11:08 (GMT)
committerElena Pourmal <epourmal@hdfgroup.org>1999-06-25 18:11:08 (GMT)
commit40abc593504c8f10a8e3c9935122aba7b4f3fd56 (patch)
tree56ce7b919709755a6a7773889b517af3559874f4
parent8c11a3a87ce15b80f108376d5d41be92db3622bc (diff)
downloadhdf5-40abc593504c8f10a8e3c9935122aba7b4f3fd56.zip
hdf5-40abc593504c8f10a8e3c9935122aba7b4f3fd56.tar.gz
hdf5-40abc593504c8f10a8e3c9935122aba7b4f3fd56.tar.bz2
[svn-r1379]
Two new examples h5_mount.c and h5_reference.c were added. h5_select.c was modified to use fill values, and h5_group.c was modified to show how H5Giterate can be used to get information about the objects in a group. Necessary changes were done to the Makefile.in. Tested on Solaris 2.6 (baldric)
-rw-r--r--examples/h5_group.c140
-rw-r--r--examples/h5_mount.c119
-rw-r--r--examples/h5_select.c3
3 files changed, 237 insertions, 25 deletions
diff --git a/examples/h5_group.c b/examples/h5_group.c
index 2a7ea48..00f9426 100644
--- a/examples/h5_group.c
+++ b/examples/h5_group.c
@@ -1,8 +1,9 @@
/*
- * 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.
+ * This program creates a group in the file and two datasets in the group.
+ * Hard link to the group object is created and one of the datasets is accessed
+ * under new name.
+ * Iterator functions are used to find information about the objects
+ * in the root group and in the created group.
*/
@@ -12,9 +13,10 @@
#define FILE "group.h5"
#define RANK 2
-
herr_t file_info(hid_t loc_id, const char *name, void *opdata);
/* Operator function */
+herr_t group_info(hid_t loc_id, const char *name, void *opdata);
+ /* Operator function */
int
main(void)
{
@@ -28,7 +30,7 @@ main(void)
hsize_t dims[2];
hsize_t cdims[2];
- int idx;
+ int idx_f, idx_g;
/*
* Create a file.
@@ -56,9 +58,23 @@ main(void)
H5Pset_deflate( plist, 6);
dataset = H5Dcreate(file, "/Data/Compressed_Data", H5T_NATIVE_INT,
dataspace, plist);
-
/*
- * Close the dataset and the file.
+ * Close the first dataset .
+ */
+ H5Sclose(dataspace);
+ H5Dclose(dataset);
+
+ /*
+ * Create the second dataset.
+ */
+ dims[0] = 500;
+ dims[1] = 20;
+ dataspace = H5Screate_simple(RANK, dims, NULL);
+ dataset = H5Dcreate(file, "/Data/Float_Data", H5T_NATIVE_FLOAT,
+ dataspace, H5P_DEFAULT);
+
+ /*
+ *Close the second dataset and file.
*/
H5Sclose(dataspace);
H5Dclose(dataset);
@@ -74,7 +90,7 @@ main(void)
* Access "Compressed_Data" dataset in the group.
*/
dataset = H5Dopen(grp, "Compressed_Data");
- if( dataset < 0) printf(" Dataset is not found. \n");
+ if( dataset < 0) printf(" Dataset 'Compressed-Data' is not found. \n");
printf("\"/Data/Compressed_Data\" dataset is open \n");
/*
@@ -100,11 +116,11 @@ main(void)
*/
status = H5Dclose(dataset);
+
/*
- * Use iterator to see the names of the objects in the file
- * root directory.
+ * Use iterator to see the names of the objects in the root group.
*/
- idx = H5Giterate(file, "/", NULL, file_info, NULL);
+ idx_f = H5Giterate(file, "/", NULL, file_info, NULL);
/*
* Unlink name "Data" and use iterator to see the names
@@ -115,8 +131,13 @@ main(void)
else
printf("\"Data\" is unlinked \n");
- idx = H5Giterate(file, "/", NULL, file_info, NULL);
-
+ idx_f = H5Giterate(file, "/", NULL, file_info, NULL);
+
+ /*
+ * Use iterator to see the names of the objects in the group
+ * /Data_new.
+ */
+ idx_g = H5Giterate(grp, "/Data_new", NULL, group_info, NULL);
/*
* Close the file.
@@ -126,25 +147,96 @@ main(void)
return 0;
}
+
/*
* Operator function.
*/
-herr_t
-file_info(hid_t loc_id, const char *name, void *opdata)
+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.
+ * Display group name. The name is passed to the function by
+ * the Library. Some magic :-)
*/
printf("\n");
printf("Name : ");
puts(name);
- H5Gclose(grp);
return 0;
}
+
+
+/*
+ * Operator function.
+ */
+herr_t group_info(hid_t loc_id, const char *name, void *opdata)
+{
+ hid_t did; /* dataset identifier */
+ hid_t tid; /* datatype identifier */
+ H5T_class_t class;
+ hid_t pid; /* data_property identifier */
+ hsize_t chunk_dims_out[2];
+
+ int rank_chunk;
+ /*
+ * Open the datasets using their names.
+ */
+ did = H5Dopen(loc_id, name);
+
+ /*
+ * Display dataset name.
+ */
+ printf("\n");
+ printf("Name : ");
+ puts(name);
+
+ /*
+ * Display dataset information.
+ */
+ tid = H5Dget_type(did); /* get datatype*/
+ pid = H5Dget_create_plist(did); /* get creation property list */
+
+ /*
+ * Check if dataset is chunked.
+ */
+ if(H5D_CHUNKED == H5Pget_layout(pid)){
+ /*
+ * get chunking information: rank and dimensions.
+ */
+ rank_chunk = H5Pget_chunk(pid, 2, chunk_dims_out);
+ printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+ (unsigned long)(chunk_dims_out[0]),
+ (unsigned long)(chunk_dims_out[1]));
+ }
+ else{
+ class = H5Tget_class(tid);
+ if(class < 0){
+ puts(" Invalid datatype.\n");
+ }
+ else {
+ if(class == H5T_INTEGER)
+ puts(" Datatype is 'H5T_NATIVE_INTEGER'.\n");
+ if(class == H5T_FLOAT)
+ puts(" Datatype is 'H5T_NATIVE_FLOAT'.\n");
+ if(class == H5T_STRING)
+ puts(" Datatype is 'H5T_NATIVE_STRING'.\n");
+ if(class == H5T_BITFIELD)
+ puts(" Datatype is 'H5T_NATIVE_BITFIELD'.\n");
+ if(class == H5T_OPAQUE)
+ puts(" Datatype is 'H5T_NATIVE_OPAQUE'.\n");
+ if(class == H5T_COMPOUND)
+ puts(" Datatype is 'H5T_NATIVE_COMPOUND'.\n");
+ }
+ }
+
+
+ H5Dclose(did);
+ H5Pclose(pid);
+ H5Tclose(tid);
+ return 0;
+ }
+
+
+
+
+
+
diff --git a/examples/h5_mount.c b/examples/h5_mount.c
new file mode 100644
index 0000000..452ad6e
--- /dev/null
+++ b/examples/h5_mount.c
@@ -0,0 +1,119 @@
+/*
+ * This program shows the concept of "mounting files".
+ * Program creates one file with group G in it, and another
+ * file with dataset D. Then second file is mounted in the first one
+ * under the "mounting point" G. Dataset D is accessed in the first file
+ * under name /G/D and data is printed out.
+ */
+
+#include<hdf5.h>
+
+#define FILE1 "mount1.h5"
+#define FILE2 "mount2.h5"
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+int main(void)
+{
+
+ hid_t fid1, fid2, gid; /* Files and group identifiers */
+ hid_t did, tid, sid; /* Dataset and datatype identifiers */
+
+ herr_t status;
+ hsize_t dims[] = {NX,NY}; /* Dataset dimensions */
+
+ int i, j;
+ int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+ /*
+ * Initialization of buffer matrix "bm"
+ */
+ for(i =0; i<NX; i++) {
+ for(j = 0; j<NY; j++)
+ bm[i][j] = i + j;
+ }
+
+ /*
+ * Create first file and a group in it.
+ */
+ fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ gid = H5Gcreate(fid1, "/G", 0);
+
+ /*
+ * Close group and file
+ */
+ H5Gclose(gid);
+ H5Fclose(fid1);
+
+ /*
+ * Create second file and dataset "D" in it.
+ */
+ fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ dims[0] = NX;
+ dims[1] = NY;
+ sid = H5Screate_simple(RANK, dims, NULL);
+ did = H5Dcreate(fid2, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+
+ /*
+ * Write data to the dataset.
+ */
+ status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm);
+
+ /*
+ * Close all identifiers.
+ */
+ H5Sclose(sid);
+ H5Dclose(did);
+ H5Fclose(fid2);
+
+ /*
+ * Reopen both files
+ */
+ fid1 = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+ fid2 = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+ /*
+ * Mount second file under G in the first file.
+ */
+ H5Fmount(fid1, "/G", fid2, H5P_DEFAULT);
+
+ /*
+ * Access dataset D in the first file under /G/D name.
+ */
+ did = H5Dopen(fid1,"/G/D");
+ tid = H5Dget_type(did);
+ status = H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm_out);
+
+ /*
+ * Print out the data.
+ */
+ for(i=0; i<NX; i++){
+ for(j=0; j<NY; j++)
+ printf(" %d", bm_out[i][j]);
+ printf("\n");
+ }
+
+ /*
+ * Close all identifers
+ */
+ H5Tclose(tid);
+ H5Dclose(did);
+
+ /*
+ * Unmounting second file
+ */
+ H5Funmount(fid1, "/G");
+
+ /*
+ * Close both files
+ */
+ H5Fclose(fid1);
+ H5Fclose(fid2);
+
+ return 0;
+}
+
+
+
diff --git a/examples/h5_select.c b/examples/h5_select.c
index fa8ec0c..5626e03 100644
--- a/examples/h5_select.c
+++ b/examples/h5_select.c
@@ -33,7 +33,8 @@
#define NPOINTS 4 /* Number of points that will be selected
and overwritten */
-int main (void)
+int
+main (void)
{
hid_t file, dataset; /* File and dataset identifiers */