atexit(3) Library Functions Manual atexit(3)

atexit - registruje funkci, která se má vyvolat při ukončení procesu

Standardní knihovna C (libc, -lc)

#include <stdlib.h>
int atexit(void (*function)(void));

Funkce atexit() zařadí function do seznamu funkcí, které jsou vyvolány při normálním ukončení programu, ať už funkcí exit(3) nebo návratem z funkce main. Funkce takto registrované jsou volány v obráceném pořadí jejich registrace; nejsou jim poskytnuty žádné argumenty.

The same function may be registered multiple times: it is called once for each registration.

POSIX.1 vyžaduje, aby implementace dovolovala minimálně ATEXIT_MAX(32) registrací takovýchto funkcí. Skutečný počet možných registrací podporovaných v dané implementaci je možné zjistit pomocí sysconf(3).

Při vytvoření procesu pomocí fork(2), zdědí potomek registrace svých rodičů. Při úspěšném volání funkce exec(3), jsou všechny registrace odstraněny.

Funkce atexit() vrací hodnotu 0, byla-li úspěšná, jinak je vrácena nenulová hodnota.

Vysvětlení pojmů použitých v této části viz attributes(7).

Rozhraní Atribut Hodnota
atexit() Thread safety MT-Safe

POSIX.1 says that the result of calling exit(3) more than once (i.e., calling exit(3) within a function registered using atexit()) is undefined. On some systems (but not Linux), this can result in an infinite recursion; portable programs should not invoke exit(3) inside a function registered using atexit().

C11, POSIX.1-2008.

POSIX.1-2001, C89, C99, SVr4, 4.3BSD.

Funkce registrované pomocí atexit() (a on_exit(3)) nejsou volány, pokud je proces abnormálně ukončen, například kvůli doručení signálu.

If one of the registered functions calls _exit(2), then any remaining functions are not invoked, and the other process termination steps performed by exit(3) are not performed.

The atexit() and on_exit(3) functions register functions on the same list: at normal process termination, the registered functions are invoked in reverse order of their registration by these two functions.

According to POSIX.1, the result is undefined if longjmp(3) is used to terminate execution of one of the functions registered using atexit().

Od verze glibc 2.2.3, mohou být atexit() (a on_exit(3)) použity uvnitř sdílených knihoven, aby spouštěly funkce, které jsou volány, je-li knihovna uvolněna z paměti.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void
bye(void)
{
    printf("That was all, folks\n");
}
int
main(void)
{
    long a;
    int i;
    a = sysconf(_SC_ATEXIT_MAX);
    printf("ATEXIT_MAX = %ld\n", a);
    i = atexit(bye);
    if (i != 0) {
        fprintf(stderr, "cannot set exit function\n");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}

_exit(2), dlopen(3), exit(3), on_exit(3)

Překlad této příručky do češtiny vytvořili Pavel Heimlich <tropikhajma@gmail.com>

Tento překlad je bezplatná dokumentace; Přečtěte si GNU General Public License Version 3 nebo novější ohledně podmínek autorských práv. Neexistuje ŽÁDNÁ ODPOVĚDNOST.

Pokud narazíte na nějaké chyby v překladu této příručky, pošlete e-mail na adresu translation-team-cs@lists.sourceforge.net.

15. června 2024 Linux man-pages 6.9.1