oracular (3) atexit.3.gz

Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       atexit - rejestruje funkcję wywoływaną 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-bezpieczne │
       └───────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘

WERSJE

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

STANDARDY

       C11, POSIX.1-2008.

HISTORIA

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

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