Provided by: manpages-pl-dev_0.7-1_all bug

NAZWA

       atexit - rejestracja funkcji wywoływanej po normalnym zakończeniu procesu

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

       ┌──────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────┼────────────────────────┼─────────┤
       │atexit()  │ Bezpieczeństwo wątkowe │ MT-Safe │
       └──────────┴────────────────────────┴─────────┘

ZGODNE Z

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

       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 przez 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ŁAD

       #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)

O STRONIE

       Angielska wersja tej strony  pochodzi  z  wydania  4.07  projektu  Linux  man-pages.  Opis
       projektu,  informacje  dotyczące  zgłaszania  błędów oraz najnowszą wersję oryginału można
       znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika man  są:  Adam  Byrtek  (PTM)
       <abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
       <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów  na
       stronie   http://sourceforge.net/projects/manpages-pl/.   Jest   zgodne   z  wersją   4.07
       oryginału.