NOM¶
atexit - Enregistrer une fonction à appeler à la fin d'un programme
SYNOPSIS¶
#include <stdlib.h>
int atexit(void (*function)(void));
DESCRIPTION¶
La fonction
atexit() enregistre la fonction
function 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. 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-2001 exige que l'implémentation permette d'enregistrer au moins
ATEXIT_MAX (32) de ces fonctions. La limite actuelle de
l'implémentation peut être obtenue avec
sysconf(3).
Lorsqu'un processus fils 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.
SVr4, BSD 4.3, C89, C99, POSIX.1-2001.
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 enregistrées ne seront pas appelées, et les
étapes de fin de processus effectuées par
exit(3) ne seront
pas réalisées.
POSIX.1-2001 dit que le résultat de plus d'un appel à
exit(3)
(par exemple, appelé
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).
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 dit 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 sur 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.
EXEMPLE¶
#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, "cannot set exit function\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
VOIR AUSSI¶
_exit(2),
exit(3),
on_exit(3)
COLOPHON¶
Cette page fait partie de la publication 3.44 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
<
http://www.kernel.org/doc/man-pages/>.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Christophe Blaess <
http://www.blaess.fr/christophe/> (1996-2003), Alain
Portal <
http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et
l'équipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce document
en utilisant la commande «
man -L C
<section> <page_de_man> ».