Loading

NOM

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

SYNOPSIS

       #include <stdlib.h>

       int atexit(void (*function)(void));

       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.

       Une  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’un  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.

CONFORMITÉ

       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 plusieurs appels à 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.23 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

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Florentin Duneau <fduneau@gmail.com> et l’équipe
       francophone de traduction de Debian.

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