atexit(3) Library Functions Manual atexit(3) NUME atexit - inregistreaza o funcie care sa fie apelata la terminarea normala a procesului BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int atexit(void (*function)(void)); DESCRIERE Funcia atexit() inregistreaza funcia data pentru a fi apelata la terminarea normala a procesului, fie prin exit(3), fie prin intoarcerea de la main() a programului. Funciile astfel inregistrate sunt apelate in ordinea inversa a inregistrarii lor; nu se transmit argumente. Aceeai funcie poate fi inregistrata de mai multe ori: aceasta este apelata o singura data pentru fiecare inregistrare. POSIX.1 impune ca o implementare sa permita inregistrarea a cel puin ATEXIT_MAX (32) astfel de funcii. Limita reala acceptata de o implementare poate fi obinuta cu ajutorul sysconf(3). Atunci cand un proces-copil este creat prin fork(2), acesta motenete procesele-copil ale inregistrarilor parintelui sau. La un apel reuit la una dintre funciile exec(3), toate inregistrarile sunt eliminate. VALOAREA RETURNATA Funcia atexit() returneaza valoarea 0 in caz de succes; in caz contrar, returneaza o valoare diferita de zero. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |atexit() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ VERSIUNI POSIX.1 precizeaza ca rezultatul apelarii exit(3) de mai multe ori (adica apelarea exit(3) in cadrul unei funcii inregistrate cu atexit()) este nedefinit. Pe unele sisteme (dar nu i pe Linux), acest lucru poate duce la o recursivitate infinita; programele portabile nu ar trebui sa invoce exit(3) in interiorul unei funcii inregistrate cu atexit(). STANDARDE C11, POSIX.1-2008. ISTORIC POSIX.1-2001, C89, C99, SVr4, 4.3BSD. NOTE Funciile inregistrate folosind atexit() (i on_exit(3)) nu sunt apelate daca un proces se termina in mod anormal din cauza transmiterii unui semnal. In cazul in care una dintre funciile inregistrate apeleaza _exit(2), atunci toate funciile ramase nu sunt invocate, iar celelalte etape de incheiere a procesului efectuate de exit(3) nu sunt efectuate. Funciile atexit() i on_exit(3) inregistreaza funcii in aceeai lista: la terminarea normala a procesului, funciile inregistrate sunt invocate in ordinea inversa a inregistrarii lor de catre aceste doua funcii. In conformitate cu POSIX.1, rezultatul este nedefinit daca longjmp(3) este utilizata pentru a incheia execuia uneia dintre funciile inregistrate cu atexit(). Note Linux Incepand cu glibc 2.2.3, atexit() (i on_exit(3)) poate fi utilizata in cadrul unei biblioteci partajate pentru a stabili funcii care sunt apelate atunci cand biblioteca partajata este descarcata). EXEMPLE #include #include #include 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 funcia de ieire\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); } CONSULTAI I _exit(2), dlopen(3), exit(3), on_exit(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 atexit(3)