NOM

atexit - Enregistrer une fonction à appeler à la fin d'un programme

BIBLIOTHÈQUE

Bibliothèque C standard ( libc, -lc)

SYNOPSIS

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

DESCRIPTION

La fonction atexit() enregistre la fonction donnée pour que celle-ci soit automatiquement appelée lorsque le programme se termine normalement avec exit(3) ou lors de la fin de la fonction main() du programme. Les fonctions ainsi enregistrées sont invoquées dans l'ordre inverse de leur enregistrement ; aucun argument n'est transmis.
La même fonction peut être enregistrée plusieurs fois : elle sera appelée une fois pour chaque enregistrement.
POSIX.1 exige de l'implémentation qu'elle permette d'enregistrer au moins ATEXIT_MAX (32) de ces fonctions. La limite effective prise en charge par une implémentation peut être obtenue avec sysconf(3).
Lorsqu'un processus enfant est créé avec fork(2), il hérite d'une copie des enregistrements de son parent. À la suite d'un appel réussi à l'une des fonctions exec(3), tous les enregistrements sont supprimés.

VALEUR RENVOYÉE

La fonction atexit() renvoie 0 en cas de succès et une valeur non nulle en cas d'échec.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes(7).
Interface Attribut Valeur
atexit() Sécurité des threads MT-Safe
 

STANDARDS

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

NOTES

Les fonctions enregistrées avec atexit() (et on_exit(3)) ne sont pas appelées si le programme se termine anormalement à cause de l'envoi d'un signal.
Si l'une des fonctions enregistrées appelle _exit(2), alors toutes les autres fonctions restantes ne sont pas appelées, et les autres étapes de fin de processus effectuées par exit(3) ne sont pas réalisées.
POSIX.1 stipule que le résultat de plus d'un appel à exit(3) (par exemple, appeler exit(3) dans une fonction enregistrée avec ) est indéfini. Sur quelques systèmes (mais pas sous Linux), cela peut produire une boucle infinie ; les programmes portables ne doivent pas appeler exit(3) dans une fonction enregistrée avec .
Les fonctions atexit() et on_exit(3) enregistrent les fonctions dans la même liste : les fonctions ainsi enregistrées sont invoquées dans l'ordre inverse de leur enregistrement par ces deux fonctions.
POSIX.1-2001 stipule que le résultat est indéfini si longjmp(3) est utilisée pour terminer l'exécution d'une fonction enregistrée avec atexit().

Notes pour Linux

Depuis la version 2.2.3 de la glibc, atexit() (et on_exit(3)) peut être utilisée dans une bibliothèque partagée pour définir les fonctions qui sont appelées lorsque la bibliothèque partagée est déchargée.

EXEMPLES

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
void bye(void) { printf("That was all, folks\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, "impossible de définir la fonction de sortie\n"); exit(EXIT_FAILURE); }
exit(EXIT_SUCCESS); }

VOIR AUSSI

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

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <[email protected]>, Thierry Vignaud <[email protected]>, François Micaux, Alain Portal <[email protected]>, Jean-Philippe Guérard <[email protected]>, Jean-Luc Coulon (f5ibh) <[email protected]>, Julien Cristau <[email protected]>, Thomas Huriaux <[email protected]>, Nicolas François <[email protected]>, Florentin Duneau <[email protected]>, Simon Paillard <[email protected]>, Denis Barbier <[email protected]>, David Prévot <[email protected]> et Grégoire Scano <[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à [email protected]

Recommended readings

Pages related to atexit you should read also: