Provided by: manpages-fr-dev_4.13-4_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.10 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 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.

Linux                                              9 juin 2020                                         ATEXIT(3)