Provided by: manpages-pl-dev_0.6-2_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-2001 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ą.

ZGODNE Z

       SVr4, 4.3BSD, C89, C99, POSIX.1-2001.

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

       POSIX.1-2001 określa, że 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), exit(3), on_exit(3)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.71  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą  wersję  oryginału  można
       znaleźć pod adresem http://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>  i   Robert
       Luberda <robert@debian.org>.

       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ą    3.71
       oryginału.