NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
NOTE: The netcdf-hdf
mailing list is no longer active. The list archives are made available for historical reasons.
Ed, You are using file datatype to read your data. Please use H5Tget_native_type to get memory type for the H5Dread call. Elena At 10:39 AM 4/28/2005, Ed Hartnett wrote:
Howdy HDF5 People! I have a program called tst_h_wrt_cmp, which write a little array of a compound type. Then I have another program called tst_h_rd_cmp.c, which reads them back in and checks the value. This works on any one machine, but when I run tst_h_wrt_cmp on a Sun, and try to read the resulting file on a Linux machine, I get garbled data because the two machines use different padding for the struct. Is this expected behavior? tst_h_wrt_cmp.c: #include "tests.h" #define FILE_NAME "tst_h_wrt_cmp.h5" #define DIM1_LEN 3 #define COMPOUND_NAME "cmp" #define VAR_NAME "var" int main() { hid_t fileid, access_plist, spaceid, typeid; hid_t datasetid, datasetid1, typeid1; int bool_out[DIM1_LEN] = {0, 1, 0}, bool_in[DIM1_LEN]; hsize_t dims[1]; struct s1 { unsigned char c1; double d; } data[DIM1_LEN]; int i; for (i=0; i<DIM1_LEN; i++) { data[i].c1 = 126; data[i].d = -9999999; } printf("*** Checking packing of HDF5 compound types..."); /* Open file and create group. */ if ((access_plist = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; if (H5Pset_fclose_degree(access_plist, H5F_CLOSE_STRONG)) ERR; if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, access_plist)) < 0) ERR; /* Create a simple compound type. */ if ((typeid = H5Tcreate(H5T_COMPOUND, sizeof(struct s1))) < 0) ERR;if (H5Tinsert(typeid, "c1", HOFFSET(struct s1, c1), H5T_NATIVE_UCHAR) < 0) ERR; if (H5Tinsert(typeid, "d", HOFFSET(struct s1, d), H5T_NATIVE_DOUBLE) < 0) ERR;if (H5Tcommit(fileid, COMPOUND_NAME, typeid) < 0) ERR; /* Create a space. */ dims[0] = DIM1_LEN; if ((spaceid = H5Screate_simple(1, dims, dims)) < 0) ERR; /* Create a dataset of this compound type. */ if ((datasetid = H5Dcreate(fileid, VAR_NAME, typeid, spaceid, H5P_DEFAULT)) < 0) ERR; /* Write some data. */ if (H5Dwrite(datasetid, typeid, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0) ERR; /* Release all resources. */ if (H5Fclose(fileid) < 0) ERR; SUMMARIZE_ERR; /* Print out our number of errors, if any, and exit badly. */ if (total_err) { printf("%d errors detected! Sorry!\n", total_err); return 2; } printf("*** Tests successful!\n"); return 0; } tst_h_rd_cmp.c: #include "tests.h" #define FILE_NAME "tst_h_wrt_cmp.h5" #define DIM1_LEN 3 #define COMPOUND_NAME "cmp" #define VAR_NAME "var" int main() { hid_t fileid, access_plist, spaceid, typeid; hid_t datasetid, datasetid1, typeid1; int bool_out[DIM1_LEN] = {0, 1, 0}, bool_in[DIM1_LEN]; hsize_t dims[1]; struct s1 { unsigned char c1; double d; } data[DIM1_LEN]; int i; printf("*** Checking packing of HDF5 compound types..."); /* Open file. */ if ((access_plist = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR; if (H5Pset_fclose_degree(access_plist, H5F_CLOSE_STRONG)) ERR; if ((fileid = H5Fopen(FILE_NAME, H5F_ACC_RDONLY, access_plist)) < 0) ERR; /* Open dataset. */ if ((datasetid = H5Dopen(fileid, VAR_NAME)) < 0) ERR; /* Check space. */ if ((spaceid = H5Dget_space(datasetid)) < 0) ERR; if (H5Sget_simple_extent_ndims(spaceid) != 1) ERR; if (H5Sget_simple_extent_npoints(spaceid) != DIM1_LEN) ERR; /* Get type. */ if ((typeid = H5Dget_type(datasetid)) < 0) ERR; /* Read the data. */ if (H5Dread(datasetid, typeid, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0) ERR; /* Check the data. */ for (i=0; i<DIM1_LEN; i++) if (data[i].c1 != 126 || data[i].d != -9999999) ERR; /* Release all resources. */ if (H5Fclose(fileid) < 0) ERR; SUMMARIZE_ERR; /* Print out our number of errors, if any, and exit badly. */ if (total_err) { printf("%d errors detected! Sorry!\n", total_err); return 2; } printf("*** Tests successful!\n"); return 0; } -- Ed Hartnett -- ed@xxxxxxxxxxxxxxxx
----------------------------------------------------------------------------------------------- Elena Pourmal, HDF QA, Maintenance and Support Team Leader NCSA University of Illinois at Urbana-Champaign 605 E. Springfield Ave. Champaign, IL 61820 epourmal@xxxxxxxxxxxxx (217)333-0238 (office) (217)244-1987 (fax) ----------------------------------------------------------------------------------------------
netcdf-hdf
archives: