Provided by: manpages-fr-dev_4.21.0-2_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 │
       └──────────────────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       POSIX.1-2001, POSIX.1-2008, 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 fonc‐
       tion 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)

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  <tvi‐
       gnaud@mandriva.com>,  François  Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fe‐
       vrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau  <jcristau@de‐
       bian.org>,   Thomas   Huriaux   <thomas.huriaux@gmail.com>,  Nicolas  François  <nicolas.francois@centra‐
       liens.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.sca‐
       no@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 à  de‐
       bian-l10n-french@lists.debian.org.

Pages du manuel de Linux 6.03                    5 février 2023                                        atexit(3)