atexit(3)

NUME
atexit - înregistrează o funcție care să fie apelată la terminarea normală a procesului

BIBLIOTECA
Biblioteca C standard (libc, -lc)

REZUMAT
#include <stdlib.h>

int atexit(void (*function)(void));

DESCRIERE
Funcția atexit() înregistrează funcția dată pentru a fi apelată la terminarea normală a procesului, fie prin exit(3), fie prin întoarcerea de la main() a programului. Funcțiile astfel înregistrate sunt apelate în ordinea inversă a înregistrării lor; nu se transmit argumente.

Aceeași funcție poate fi înregistrată de mai multe ori: aceasta este apelată o singură dată pentru fiecare înregistrare.

POSIX.1 impune ca o implementare să permită înregistrarea a cel puțin ATEXIT_MAX (32) astfel de funcții. Limita reală acceptată de o implementare poate fi obținută cu ajutorul sysconf(3).

Atunci când un proces-copil este creat prin fork(2), acesta moștenește procesele-copil ale înregistrărilor părintelui său. La un apel reușit la una dintre funcțiile exec(3), toate înregistrările sunt eliminate.

VALOAREA RETURNATĂ
Funcția atexit() returnează valoarea 0 în caz de succes; în caz contrar, returnează o valoare diferită de zero.

ATRIBUTE
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare
atexit() | Siguranța firelor | MT-Safe

VERSIUNI
POSIX.1 precizează că rezultatul apelării exit(3) de mai multe ori (adică apelarea exit(3) în cadrul unei funcții înregistrate cu atexit()) este nedefinit. Pe unele sisteme (dar nu și pe Linux), acest lucru poate duce la o recursivitate infinită; programele portabile nu ar trebui să invoce exit(3) în interiorul unei funcții înregistrate cu atexit().

STANDARDE
C11, POSIX.1-2008.

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

NOTE
Funcțiile înregistrate folosind atexit() (și on_exit(3)) nu sunt apelate dacă un proces se termină în mod anormal din cauza transmiterii unui semnal.

În cazul în care una dintre funcțiile înregistrate apelează _exit(2), atunci toate funcțiile rămase nu sunt invocate, iar celelalte etape de încheiere a procesului efectuate de exit(3) nu sunt efectuate.

Funcțiile atexit() și on_exit(3) înregistrează funcții în aceeași listă: la terminarea normală a procesului, funcțiile înregistrate sunt invocate în ordinea inversă a înregistrării lor de către aceste două funcții.

În conformitate cu POSIX.1, rezultatul este nedefinit dacă longjmp(3) este utilizată pentru a încheia execuția uneia dintre funcțiile înregistrate cu atexit().

  Note Linux
Începând cu glibc 2.2.3, atexit() (și on_exit(3)) poate fi utilizată în cadrul unei biblioteci partajate pentru a stabili funcții care sunt apelate atunci când biblioteca partajată este descărcată).

EXEMPLE
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>

    void
    bye(void)
    {
        printf("Asta a fost tot, prieteni\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, "nu poate defini funcția de ieșire\n");
            exit(EXIT_FAILURE);
        }

        exit(EXIT_SUCCESS);
    }

CONSULTAȚI ȘI
_exit(2), dlopen(3), exit(3), on_exit(3)

TRADUCERE
Traducerea în limba română a acestui manual a fost creată de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă Nicio RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.