---
name: "TPMLIB_Terminate"
section: "3"
platform: "linux"
package: "libtpms"
version: "0.10.2-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/TPMLIB_MainInit"
---

# TPMLIB\_Terminate(3)

Initialize the TPM TPMLIB\_Terminate - Terminate the TPM

Part of [TPMLIB\_MainInit(3)](/TPMLIB_MainInit/3.md).

## NAME

TPMLIB\_MainInit    - Initialize the TPM

TPMLIB\_Terminate   - Terminate the TPM

## LIBRARY

TPM library (libtpms, -ltpms)

## SYNOPSIS

**#include \<libtpms/tpm\_types.h**\>

**#include \<libtpms/tpm\_library.h**\>

**#include \<libtpms/tpm\_error.h**\>

**TPM\_RESULT TPMLIB\_MainInit(void);**

**TPM\_RESULT TPMLIB\_Terminate(void);**

## DESCRIPTION

The **TPMLIB\_MainInit()** and **TPMLIB\_Terminate()** functions are used to initialize and terminate the TPM respectively. The **TPMLIB\_MainInit()** function must be called before the TPM processes any TPM command. The **TPMLIB\_Terminate()** function is called to free all the internal  resources (memory allocations) the TPM has used and must be called after the last TPM command was processed by the TPM. The **TPMLIB\_MainInit()** function can then be called again.

Use **TPMLIB\_RegisterCallbacks()** to set callback functions for initialization and writing and restoring the internal state in a portable format.

## ERRORS

- **TPM\_SUCCESS**

  The function completed successfully.

- **TPM\_FAIL**

  General failure.

For a complete list of TPM error codes please consult the include file **libtpms/tpm\_error.h**

## EXAMPLE

```
 #include <stdio.h>
 #include <libtpms/tpm_types.h>
 #include <libtpms/tpm_library.h>
 #include <libtpms/tpm_error.h>
 int main(void) {
     TPM_RESULT res;
     unsigned char *respbuffer = NULL;
     uint32_t resp_size = 0;
     uint32_t respbufsize = 0;
     unsigned char *command;
     uint32_t command_size;
     [...]
     if (TPMLIB_MainInit() != TPM_SUCCESS) {
         fprintf(stderr, "Could not start the TPM.\n");
         return 1;
     }
     [...]
     /* build TPM command */
     [...]
     res = TPMLIB_Process(&respbuffer, &resp_size,
                          &respbufsize,
                          command, command_size);
     [...]
     TPMLIB_Terminate();
     return 0;
 }
```

## SEE ALSO

[**TPMLIB\_Process**(3)](/TPMLIB_Process/3.md), [**TPMLIB\_RegisterCallbacks**(3)](/TPMLIB_RegisterCallbacks/3.md), [**TPMLIB\_GetVersion**(3)](/TPMLIB_GetVersion/3.md) [**TPMLIB\_GetTPMProperty**(3)](/TPMLIB_GetTPMProperty/3.md), [**TPMLIB\_DecodeBlob**(3)](/TPMLIB_DecodeBlob/3.md)
