Provided by: manpages-fr-dev_4.23.1-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  ⟨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⟩.