NAZWA

atexit - rejestracja funkcji wywoływanej 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-Safe
 

STANDARDY

POSIX.1-2001, POSIX.1-2008, 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).
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().
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 <[email protected]>, Andrzej Krzysztofowicz <[email protected]>, Robert Luberda <[email protected]> i Michał Kułach <[email protected]>
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 [email protected]

Recommended readings

Pages related to atexit you should read also: