focal (3) atexit.3.gz

Provided by: manpages-pl-dev_0.7-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 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.