Provided by: manpages-fr-dev_4.15.0-9_all bug

NOM

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

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

       ┌────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │InterfaceAttributValeur  │
       ├────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │atexit()                                                │ Sécurité des threads │ MT-Safe │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       POSIX.1-2001, POSIX.1-2008, 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.

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

       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)

COLOPHON

       Cette page fait partie de la publication 5.13 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

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> et David Prévot <david@tilapin.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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 à ⟨debian-l10n-french@lists.debian.org⟩.