Provided by: manpages-pl-dev_4.26.0-1_all 

NAZWA
atexit - rejestruje funkcję wywoływaną po normalnym zakończeniu procesu
BIBLIOTEKA
Standardowa biblioteka C (libc, -lc)
SKŁADNIA
#include <stdlib.h>
int atexit(void (*funkcja)(void));
OPIS
Funkcja atexit() powoduje, że podana funkcja będzie wywołana po normalnym zakończeniu pracy procesu,
które może nastąpić przez exit(3) lub przez powrót z funkcji main() procesu. Funkcje zarejestrowane w ten
sposób są wywoływane w kolejności odwrotnej do ich rejestracji; nie są im przekazywane żadne argumenty.
Tę samą funkcję można zarejestrować kilka razy: zostanie wywołana tyle razy, ile razy została
zarejestrowana.
POSIX.1 wymaga, aby implementacja pozwalała na zarejestrowanie co najmniej ATEXIT_MAX (32) takich
funkcji. Bieżące ograniczenie obsługiwane przez implementację można odczytać za pomocą funkcji
sysconf(3).
Kiedy proces potomny jest tworzony za pomocą fork(2), dziedziczy kopie zarejestrowań funkcji rodzica. Po
pomyślnym wywołaniu jednej z funkcji exec(3), wszystkie zarejestrowane funkcje są usuwane.
WARTOŚĆ ZWRACANA
Funkcja atexit() zwraca wartość 0, jeśli zakończy się pomyślnie. W przeciwnym wypadku zwraca wartość
niezerową.
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
┌──────────────────────────────────────────────────────────────┬────────────────────────┬───────────────┐
│ Interfejs │ Atrybut │ Wartość │
├──────────────────────────────────────────────────────────────┼────────────────────────┼───────────────┤
│ atexit() │ Bezpieczeństwo wątkowe │ MT-bezpieczne │
└──────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘
WERSJE
POSIX.1 określa, że wynik wywołania exit(3) więcej niż raz (np. wywołanie exit(3) przez funkcję
zarejestrowaną przez atexit()) jest niezdefiniowany. Na niektórych systemach (ale nie pod Linuksem) może
to spowodować nieskończoną rekurencję. Programy przenośne nie powinny wywoływać exit(3) z ciała funkcji
rejestrowanej przez atexit().
STANDARDY
C11, POSIX.1-2008.
HISTORIA
POSIX.1-2001, C89, C99, SVr4, 4.3BSD.
UWAGI
Funkcje zarejestrowane przez atexit() (i on_exit(3)) nie są uruchamiane w przypadku nienormalnego
zakończenia procesu po otrzymaniu sygnału.
Jeśli jedna z zarejestrowanych funkcji wywoła _exit(2), to pozostałe zarejestrowane funkcje nie będą
uruchamiane i żadne inne kroki kończenia procesu nie będą podejmowane przez exit(3).
Funkcje atexit() i on_exit(3) rejestrują funkcje, używając tej samej listy: podczas normalnego
zakończenia procesu, zarejestrowane funkcje są uruchamiane w kolejności odwrotnej do kolejności ich
rejestracji przez którąkolwiek z dwu powyższych funkcji.
Zgodnie z POSIX.1 wynik jest niezdefiniowany, jeśli longjmp(3) jest używane do zakończenia wykonywania
funkcji zarejestrowanej za pomocą atexit().
Uwagi linuksowe
Od wersji 2.2.3 biblioteki glibc funkcji atexit() (oraz on_exit(3)) można użyć w obrębie biblioteki
współdzielonej do zarejestrowania funkcji wywoływanych podczas wyładowywania biblioteki współdzielonej.
PRZYKŁADY
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void
bye(void)
{
printf("I to by było wszystko\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, "nie można ustawić funkcji wyjścia\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
ZOBACZ TAKŻE
_exit(2), dlopen(3), exit(3), on_exit(3)
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej
Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach
<michal.kulach@gmail.com>
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać
zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ
ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-
list@lists.sourceforge.net.
Linux man-pages 6.9.1 15 czerwca 2024 r. atexit(3)