atexit(3)

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

KNIHOVNA
Standardní knihovna C (libc, -lc)

POUŽITÍ
#include <stdlib.h>

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

POPIS
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.

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

ATRIBUTY
Vysvětlení pojmů použitých v této části viz attributes(7).
Rozhraní | Atribut | Hodnota
atexit() | Thread safety | MT-Safe

VERZE
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().

STANDARDY
C11, POSIX.1-2008.

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

POZNÁMKY
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().

  Linuxová poznámka
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.

PŘÍKLADY
    #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);
    }

DALŠÍ INFORMACE
_exit(2), dlopen(3), exit(3), on_exit(3)

PŘEKLAD
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.