---
name: "pmReceiveNameAll"
section: "3"
platform: "linux"
package: "libpcp3-dev"
version: "3.3.3-squeeze3"
release: "Debian 6.0 (Squeeze)"
platforms: ["linux"]
url: "https://new.carta.tech/pmNameAll"
---

# pmReceiveNameAll(3)

translate a PMID to a set of performance metric names

Part of [pmNameAll(3)](/pmNameAll/3.md).

## NAME

**pmNameAll**, **pmRequestNameAll**, **pmReceiveNameAll** - translate a PMID to a set of performance metric names

## C SYNOPSIS

**#include \<pcp/pmapi.h\>**

```
int pmNameAll(pmID pmid, char ***nameset)
int pmRequestNameAll(int ctx, pmID pmid)
int pmReceiveNameAll(int ctx, char ***nameset)
```

**cc ... -lpcp**

## DESCRIPTION

Given a Performance Metric ID (PMID) via  *pmid*, **pmNameAll** will determine all the corresponding metric names, if any, in the  Performance Metrics Name Space (PMNS), and return these via *nameset*.

The resulting list of pointers *nameset* **and** the values (the relative names) that the pointers reference will have been allocated by **pmNameAll** with a single call to **malloc**(3C), and it is the responsibility of the **pmNameAll** caller to *free(nameset)* to release the space when it is no longer required.

In the absence of errors, **pmNameAll** returns the number of names in *nameset*.

For many examples of a PMNS, there will be a 1:1 mapping between a name and a PMID, and under these circumstances, [**pmNameID**(3)](/pmNameID/3.md) provides a slightly simpler interface in the absence of duplicate names for a particular PMID.

**pmRequestNameAll** and **pmReceiveNameAll** 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**). **pmRequestNameAll** sends request to PMCD to return names of all metrics matching a PMID and returns without waiting for the response, **pmReceiveNameAll** reads reply from PMCD. It is the responsibility of the application to make sure the data are ready before calling **pmReceiveNameAll** to avoid blocking.

## SEE ALSO

[**PMAPI**(3)](/PMAPI/3.md), [**pmGetChildren**(3)](/pmGetChildren/3.md), [**pmGetChildrenStatus**(3)](/pmGetChildrenStatus/3.md), [**pmGetConfig**(3)](/pmGetConfig/3.md), [**pmLoadASCIINameSpace**(3)](/pmLoadASCIINameSpace/3.md), [**pmLoadNameSpace**(3)](/pmLoadNameSpace/3.md), [**pmLookupName**(3)](/pmLookupName/3.md), [**pmNameID**(3)](/pmNameID/3.md), [**pmNewContext**(3)](/pmNewContext/3.md), [**pcp.conf**(4)](/pcp.conf/4.md), [**pcp.env**(4)](/pcp.env/4.md) and [**pmns**(4)](/pmns/4.md).

## DIAGNOSTICS

- **PM\_ERR\_NOPMNS**

  Failed to access a PMNS for operation. Note that if the application hasn't a priori called  [**pmLoadNameSpace**(3)](/pmLoadNameSpace/3.md) and wants to use the distributed PMNS, then a call to **pmNameAll** must be made after the creation of a context (see  [**pmNewContext**(3)](/pmNewContext/3.md)).

- **PM\_ERR\_PMID**

  *pmid* does not correspond to a defined PMID in the PMNS.

- **PM\_ERR\_\***

  Other diagnostics are for protocol failures when accessing the distributed PMNS.

- **PM\_ERR\_CTXBUSY**

  Context is currently in use by another asynchronous call.
