Provided by: manpages-fr-dev_4.27.0-1_all bug

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).
       ┌──────────────────────────────────────────────────────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├──────────────────────────────────────────────────────────────────────┼──────────────────────┼─────────┤
       │ 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 à
       debian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.9.1                    15 juin 2024                                         atexit(3)