atexit(3) Library Functions Manual atexit(3)

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

Biblioteca C standard (libc, -lc)

#include <stdlib.h>
int atexit(void (*function)(void));

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.

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

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

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

C11, POSIX.1-2008.

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

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

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

#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);
}

_exit(2), dlopen(3), exit(3), on_exit(3)

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

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 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.

31 octombrie 2023 Pagini de manual de Linux 6.06