ATEXIT(3) | Library Functions Manual | ATEXIT(3)

# NAME

`atexit` — register a function to be called on exit

# SYNOPSIS

`#include <stdlib.h>`

int
`atexit`(void (*function)(void));

# DESCRIPTION

The `atexit`() function registers the given function to be called at program exit, whether via exit(3) or via return from the program's `main`(). Functions so registered are called in reverse order; no arguments are passed. At least 32 functions can always be registered, and more are allowed as long as sufficient memory can be allocated.

If a shared object is unloaded from process memory using dlclose(3), then any functions registered by calling `atexit`() from that shared object will be called in reverse order and unregistered. Note that it is the source of the call to `atexit`() that matters, not the source of the function that was registered.

`atexit`() is very difficult to use correctly without creating exit(3)-time races. Unless absolutely necessary, avoid using it.

# RETURN VALUES

The `atexit` function returns the value 0 if successful; otherwise a non-zero value is returned and the global variable errno is set to indicate the error.

# ERRORS

[`ENOMEM`]
  No memory was available to add the function to the list. The existing list of functions is unmodified.

# SEE ALSO

dlclose(3), exit(3)

# STANDARDS

The `atexit`() function conforms to ANSI X3.159-1989 (“ANSI C89”).

Setting errno on error and the behavior when a shared object is unloaded are extensions to that standard.

February 6, 2022 | Debian