jammy (3) atexit.3.gz

Provided by: manpages-pl-dev_4.13-4_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 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)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 5.10 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 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⟩.