Scroll to navigation

atexit(3) Library Functions Manual 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

STANDARDY

POSIX.1-2001, POSIX.1-2008, 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.

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

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 španělš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.

5. února 2023 Linux man-pages 6.03