atexit
Table des matières
Retour à l'index
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
|
VERSIONS
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 atexit(3))
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 atexit(3).
STANDARDS
C11, POSIX.1-2008.
HISTORIQUE
POSIX.1-2001, C89, 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.
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 <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Grégoire Scano <gregoire.scano@malloc.fr>
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ATTRIBUTS
-
- VERSIONS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- Notes pour Linux
-
- EXEMPLES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:08 GMT, September 19, 2025