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-2001, POSIX.1-2008, 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.
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().
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
španělštiny vytvořili Pavel Heimlich
<
[email protected]>
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
[email protected]