Attributes are small datasets that can be used to describe the nature and/or the intended usage of the object they are attached to. In this section, we show how to create and read/write an attribute.
Creating an attribute is similar to the creation of a dataset. To create an attribute the application must specify the object which the attribute is attached to, the data type and space of the attribute data and the creation properties.
The steps to create an attribute are as follows:
To create an attribute, the calling program must contain the following calls:
attr_id = H5Acreate(loc_id, attr_name, type_id, space_id, create_plist); H5Aclose(attr_id);
Attributes may only be read/written as an entire object. No partial I/O is currently supported. Therefore, to perform I/O operations on an attribute, the application needs only to specify the attribute and the attribute's memory data type.
The steps to read/write an attribute are as follows.
To read/write an attribute, the calling program must contain the following calls:
status = H5Aread(attr_id, mem_type_id, buf);or
status = H5Awrite(attr_id, mem_type_id, buf);
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #include <hdf5.h> #define FILE "dset.h5" main() { hid_t file_id, dataset_id, attribute_id, dataspace_id; /* identifiers */ hsize_t dims; int attr_data[2]; herr_t status; /* Initialize the attribute data. */ attr_data[0] = 100; attr_data[1] = 200; /* Open an existing file. */ file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT); /* Open an existing dataset. */ dataset_id = H5Dopen(file_id, "/dset"); /* Create the data space for the attribute. */ dims = 2; dataspace_id = H5Screate_simple(1, &dims, NULL); /* Create a dataset attribute. */ attribute_id = H5Acreate(dataset_id, "attr", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT); /* Write the attribute data. */ status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data); /* Close the attribute. */ status = H5Aclose(attribute_id); /* Close the dataspace. */ status = H5Sclose(dataspace_id); /* Close to the dataset. */ status = H5Dclose(dataset_id); /* Close the file. */ status = H5Fclose(file_id); } +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
hid_t H5Acreate (hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t create_plist)
herr_t H5Awrite (hid_t attr_id, hid_t mem_type_id, void *buf)
herr_t H5Aclose (hid_t attr_id)
The contents of 'dset.h5' and the attribute definition are given in the following:
Fig. 7.1 'dset.h5' in DDL
HDF5 "dset.h5" { GROUP "/" { DATASET "dset" { DATATYPE { H5T_STD_I32BE } DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) } DATA { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24 } ATTRIBUTE "attr" { DATATYPE { H5T_STD_I32BE } DATASPACE { SIMPLE ( 2 ) / ( 2 ) } DATA { 100, 200 } } } } }
<attribute> ::= ATTRIBUTE "<attr_name>" { <datatype> <dataspace> <data> }