#include "hdf5.h" /* Create the following HDF5 "file2.h5" { GROUP "/" { GROUP "G2" { } } } */ void createfile2() { herr_t status; hid_t file_id = H5Fcreate("file2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); hid_t group2_id = H5Gcreate(file_id, "G2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); status = H5Gclose(group2_id); if (status) puts("Error 1"); status = H5Fclose(file_id); if (status) puts("Error 2"); } /* Given a file_id, initialize the following HDF5 "file1.h5" { GROUP "/" { GROUP "G1" { } GROUP "G4" { GROUP "G5" { } } } } */ void initialize(hid_t file_id) { herr_t status; hid_t group1_id = H5Gcreate(file_id, "G1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); status = H5Gclose(group1_id); if (status) puts("Error 3"); hid_t group4_id = H5Gcreate(file_id, "G4", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); hid_t group5_id = H5Gcreate(file_id, "G4/G5", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); status = H5Gclose(group5_id); if (status) puts("Error 4"); status = H5Gclose(group4_id); if (status) puts("Error 5"); } int main(int argc, char*argv[]) { herr_t status; createfile2(); /* Open and initialize file1 */ hid_t file_id = H5Fcreate("file1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); initialize(file_id); /* I can copy an object within the same file */ status = H5Ocopy(file_id, "/G4", file_id, "/G1/G4", H5P_DEFAULT, H5P_DEFAULT); if (status) puts("Error 6"); /* I can create external links */ status = H5Lcreate_external("file2.h5", "G2", file_id, "G2", H5P_DEFAULT, H5P_DEFAULT); if (status) puts("Error 7"); /* I can create a group in the externally-linked file */ hid_t group3_id = H5Gcreate(file_id, "/G2/G3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT); status = H5Gclose(group3_id); if (status) puts("Error 8"); /* I cannot copy to the externally-linked file */ status = H5Ocopy(file_id, "/G4", file_id, "/G2/G3/G4", H5P_DEFAULT, H5P_DEFAULT); if (status) puts("Error 9"); /* Close file1 */ status = H5Fclose(file_id); if (status) puts("Error 10"); /* */ return 0; }