Scroll to navigation

atexit(3) Library Functions Manual atexit(3)

NUME

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

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#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

STANDARDE

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

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

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

5 februarie 2023 Pagini de manual de Linux 6.03