#include "hdf5.h" #include /* Timestamp macros */ #define FILENAME "a_file.h5" #define TIMESTAMP_GROUP_1 "timestamp1" #define DSET_NAME "dataset 1" #define DSET_DIM 4 #define RANK 1 void error_exit(const char *msg) { fprintf(stderr, "%s failed\n", msg); exit(1); } void print_time(const char *msg, H5O_info_t* oinfo) { /* fprintf(stderr, "%s: atime=%s, mtime=%s, ctime=%s, btime=%s\n", msg, ctime(&(oinfo.atime)), ctime(&(oinfo.mtime)), ctime(&(oinfo.ctime)), ctime(&(oinfo.btime))); */ if(oinfo->atime > 0) fprintf(stderr, "%s: atime=%s\n", msg, ctime(&(oinfo->atime))); else fprintf(stderr, "atime = 0\n"); if(oinfo->mtime) fprintf(stderr, "%s: mtime=%s\n", msg, ctime(&(oinfo->mtime))); else fprintf(stderr, "mtime = 0\n"); if(oinfo->ctime > 0) fprintf(stderr, "%s: ctime=%s\n", msg, ctime(&(oinfo->ctime))); else fprintf(stderr, "ctime = 0\n"); if(oinfo->btime > 0) fprintf(stderr, "%s: btime=%s\n", msg, ctime(&(oinfo->btime))); else fprintf(stderr, "btime = 0\n"); /* else fprintf(stderr, "%s: all times are 0\n", msg); */ } int main() { hid_t file_id=-1; /* File ID */ hid_t group_id=-1; /* Group ID */ hid_t group_id2=-1; /* Group ID */ hid_t dataset_id=-1; /* Dataset ID */ hid_t dataspace_id=-1; /* Dataspace ID */ hid_t memspace_id=-1; /* Dataspace ID */ H5O_info_t oinfo_open, oinfo_group, oinfo_dataset; /* Object info for various objects */ hbool_t track_times = 0; /* The object timestamp setting */ hid_t fcpl=-1, gcpl=-1, dcpl=-1; hsize_t dims[1], dimsm[1]; int dset_data[DSET_DIM]; int mod_value[1] = {100}; int ii; hsize_t count[1]; /* size of subset in the file */ hsize_t offset[1]; /* subset offset in the file */ hsize_t stride[1]; hsize_t block[1]; herr_t status = 0; /* fprintf(stderr, "ctime 1628102895 = %s\n", ctime(&(1628102895))); */ time_t temptime = 1628102895; fprintf(stderr, "ctime 1628102895 = %s\n", ctime(&temptime)); /* Set track times for file, group, and dataset */ if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) error_exit("H5Pcreate"); if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) error_exit("H5Pcreate"); if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) error_exit("H5Pcreate"); if(H5Pset_obj_track_times(fcpl, 1) < 0) error_exit("H5Pset_obj_track_times"); if(H5Pset_obj_track_times(gcpl, 1) < 0) error_exit("H5Pset_obj_track_times"); if(H5Pset_obj_track_times(dcpl, 1) < 0) error_exit("H5Pset_obj_track_times"); if(H5Pget_obj_track_times(fcpl, &track_times) < 0) error_exit("H5Pget_obj_track_times"); printf("track times = %d\n", track_times); track_times = 0; if(H5Pget_obj_track_times(gcpl, &track_times) < 0) error_exit("H5Pget_obj_track_times"); printf("track times = %d\n", track_times); track_times = 0; if(H5Pget_obj_track_times(dcpl, &track_times) < 0) error_exit("H5Pget_obj_track_times"); printf("track times = %d\n", track_times); track_times = 0; /* Create file */ if((file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT)) < 0) error_exit("H5Fcreate"); if((group_id = H5Gcreate2(file_id, TIMESTAMP_GROUP_1, H5P_DEFAULT, gcpl, H5P_DEFAULT)) < 0) error_exit("H5Gcreate2"); if(H5Oget_info(group_id, &oinfo_group) < 0) error_exit("H5Oget_info"); print_time("After H5Gcreate2 TIMESTAMP_GROUP_1:", &oinfo_group); /* Create the data space for the dataset. */ dims[0] = DSET_DIM; dataspace_id = H5Screate_simple(RANK, dims, NULL); for(ii = 0; ii < DSET_DIM; ii++) dset_data[ii] = ii; /* Create, write, print times, and close everything */ if((dataset_id = H5Dcreate2(group_id, DSET_NAME, H5T_STD_I32BE, dataspace_id, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) error_exit("H5Dcreate2"); if(H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data) < 0) error_exit("H5Dwrite"); if(H5Oget_info(group_id, &oinfo_group) < 0) error_exit("H5Oget_info"); print_time("Group info, after creating and writing dataset:", &oinfo_group); if(H5Oget_info(group_id, &oinfo_dataset) < 0) error_exit("H5Oget_info"); print_time("Dataset info, after creating and writing dataset:", &oinfo_dataset); /* Close everything */ if(H5Dclose(dataset_id) < 0) error_exit("H5Dclose"); if(H5Gclose(group_id) < 0) error_exit("H5Gclose"); if(H5Fclose(file_id) < 0) error_exit("H5Fclose"); if(H5Pclose(fcpl) < 0) error_exit("H5Pclose"); if(H5Pclose(gcpl) < 0) error_exit("H5Pclose"); if(H5Pclose(dcpl) < 0) error_exit("H5Pclose"); /* Re-open the file */ if((file_id = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) error_exit("H5Fopen"); if(H5Oget_info(file_id, &oinfo_open) < 0) error_exit("H5Oget_info"); print_time("File info, just open, do nothing:", &oinfo_open); /* Open groups */ if((group_id = H5Gopen2(file_id, TIMESTAMP_GROUP_1, H5P_DEFAULT)) < 0) error_exit("H5Gopen2"); if(H5Oget_info(group_id, &oinfo_group) < 0) error_exit("H5Oget_info"); print_time("Group info, just open, do nothing:", &oinfo_group); if((dataset_id = H5Dopen(group_id, DSET_NAME, H5P_DEFAULT)) < 0) error_exit("H5Dopen"); print_time("Dataset info, just open, do nothing:", &oinfo_dataset); /* Close all */ if(H5Dclose(dataset_id) < 0) error_exit("H5Dclose"); if(H5Gclose(group_id) < 0) error_exit("H5Gclose"); if(H5Fclose(file_id) < 0) error_exit("H5Fclose"); /* Reopen the file, modify the dataset, print time */ if((file_id = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) error_exit("H5Fopen"); if(H5Oget_info(file_id, &oinfo_open) < 0) error_exit("H5Oget_info"); print_time("File info, just re-open file, do nothing yet:", &oinfo_open); /* Open groups */ if((group_id = H5Gopen2(file_id, TIMESTAMP_GROUP_1, H5P_DEFAULT)) < 0) error_exit("H5Gopen2"); if(H5Oget_info(group_id, &oinfo_group) < 0) error_exit("H5Oget_info"); print_time("Group info, just re-open group, do nothing yet:", &oinfo_group); if((dataset_id = H5Dopen(group_id, DSET_NAME, H5P_DEFAULT)) < 0) error_exit("H5Dopen"); if(H5Oget_info(dataset_id, &oinfo_dataset) < 0) error_exit("H5Oget_info"); print_time("Dataset info, just re-open dataset, do nothing yet:", &oinfo_dataset); /* Modify first element */ offset[0] = 0; count[0] = 1; stride[0] = 1; block[0] = 1; /* Create memory space with size of subset. Get file dataspace and select subset from file dataspace. */ dimsm[0] = 1; memspace_id = H5Screate_simple (RANK, dimsm, NULL); offset[0] = 0; dataspace_id = H5Dget_space (dataset_id); if(H5Sselect_hyperslab (dataspace_id, H5S_SELECT_SET, offset, stride, count, block) < 0) error_exit("H5Sselect_hyperslab"); if(H5Dwrite (dataset_id, H5T_STD_I32BE, memspace_id, dataspace_id, H5P_DEFAULT, mod_value) < 0) error_exit("H5Sselect_hyperslab"); if(H5Oget_info(dataset_id, &oinfo_dataset) < 0) error_exit("H5Oget_info"); print_time("Dataset info, after modifying one element:", &oinfo_dataset); if(H5Dclose(dataset_id) < 0) error_exit("H5Dclose"); if(H5Sclose(dataspace_id) < 0) error_exit("H5Sclose"); /* Close the file */ if(H5Fclose(file_id) < 0) error_exit("H5Fclose"); return 0; } /* end timestamps() */