Provided by: manpages-pl-dev_4.21.0-2_all bug

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

       ┌──────────────────────────────────────────────────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────────────────────────────────────────────────┼────────────────────────┼─────────┤
       │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
       <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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.