int pmGetChildren(const char *name, char ***offspring) int pmRequestNamesOfChildren(int ctx, const char *name, int wantstatus) int pmReceiveNamesOfChildren(int ctx, char ***offspring, int **status)
As a special case, if name is an empty string (i.e.""), the immediate descendents of the root node in the PMNS will be returned.
Normally, pmGetChildren will return the number of descendent names discovered, else a value less than zero for an error. The value zero indicates that name is a valid metric name, i.e. is associated with a leaf node in the PMNS.
The resulting list of pointers offspring and the values (the relative names) that the pointers reference will have been allocated by pmGetChildren with a single call to malloc(3C), and it is the responsibility of the pmGetChildren caller to free(offspring) to release the space when it is no longer required.
When an error occurs, or name is a leaf node (i.e. the result of pmGetChildren is less than one), offspring is undefined (no space will have been allocated, and so calling free(3C) is a singularly bad idea).
pmRequestNamesOfChildren and pmReceiveNamesOfChildren are used by applications which must communicate with the PMCD asynchronously. These functions take explict context handle ctx which must refer to a host context (i.e. created by passing PM_CONTEXT_HOST to pmNewContext). pmRequestNamesOfChildren sends request to PMCD to enumerate names of the children of PMNS node and returns without waiting for the response, pmReceiveNamesOfChildren reads reply from PMCD. It is the responsibility of the application to make sure the data are ready before calling pmReceiveNamesOfChildren to avoid blocking.
If in the call to pmRequestNamesOfChildren wantstatus was set to non-zero value then pmReceiveNamesOfChildren will return the status of each child via status. The status will refer to either a leaf node (with value PMNS_LEAF_STATUS) or a non-leaf node (with value PMNS_NONLEAF_STATUS), otherwise the status is undefined and should not be referenced.