atexit(3) Library Functions Manual atexit(3) NAZWA atexit - rejestracja funkcji wywolywanej po normalnym zakonczeniu procesu BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include int atexit(void (*funkcja)(void)); OPIS Funkcja atexit() powoduje, ze podana funkcja bedzie wywolana po normalnym zakonczeniu pracy procesu, ktore moze nastapic przez exit(3) lub przez powrot z funkcji main() procesu. Funkcje zarejestrowane w ten sposob sa wywolywane w kolejnosci odwrotnej do ich rejestracji; nie sa im przekazywane zadne argumenty. Te sama funkcje mozna zarejestrowac kilka razy: zostanie wywolana tyle razy, ile razy zostala zarejestrowana. POSIX.1 wymaga, aby implementacja pozwalala na zarejestrowanie co najmniej ATEXIT_MAX (32) takich funkcji. Biezace ograniczenie obslugiwane przez implementacje mozna odczytac za pomoca funkcji sysconf(3). Kiedy proces potomny jest tworzony za pomoca fork(2), dziedziczy kopie zarejestrowan funkcji rodzica. Po pomyslnym wywolaniu jednej z funkcji exec(3), wszystkie zarejestrowane funkcje sa usuwane. WARTOSC ZWRACANA Funkcja atexit() zwraca wartosc 0, jesli zakonczy sie pomyslnie. W przeciwnym wypadku zwraca wartosc niezerowa. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |atexit() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ WERSJE POSIX.1 okresla, ze wynik wywolania exit(3) wiecej niz raz (np. wywolanie exit(3) przez funkcje zarejestrowana przez atexit()) jest niezdefiniowany. Na niektorych systemach (ale nie pod Linuksem) moze to spowodowac nieskonczona rekurencje. Programy przenosne nie powinny wywolywac exit(3) z ciala 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 sa uruchamiane w przypadku nienormalnego zakonczenia procesu po otrzymaniu sygnalu. Jesli jedna z zarejestrowanych funkcji wywola _exit(2), to pozostale zarejestrowane funkcje nie beda uruchamiane i zadne inne kroki konczenia procesu nie beda podejmowane przez exit(3). Funkcje atexit() i on_exit(3) rejestruja funkcje, uzywajac tej samej listy: podczas normalnego zakonczenia procesu, zarejestrowane funkcje sa uruchamiane w kolejnosci odwrotnej do kolejnosci ich rejestracji przez ktorakolwiek z dwu powyzszych funkcji. Zgodnie z POSIX.1 wynik jest niezdefiniowany, jesli longjmp(3) jest uzywane do zakonczenia wykonywania funkcji zarejestrowanej za pomoca atexit(). Uwagi linuksowe Od wersji 2.2.3 biblioteki glibc funkcji atexit() (oraz on_exit(3)) mozna uzyc w obrebie biblioteki wspoldzielonej do zarejestrowania funkcji wywolywanych podczas wyladowywania biblioteki wspoldzielonej. PRZYKLADY #include #include #include 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); } ZOBACZ TAKZE _exit(2), dlopen(3), exit(3), on_exit(3) TLUMACZENIE Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.06 31 pazdziernika 2023 r. atexit(3)