dwww Home | Manual pages | Find package

atexit(3)                  Library Functions Manual                  atexit(3)

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  normale-
       ment 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 appe-
       lé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 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)

TRADUCTION
       La traduction française de cette page de manuel a été créée par  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.org>,  David  Prévot  <david@tilapin.org>  et Grégoire Scano <gre-
       goire.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⟩.

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

Generated by dwww version 1.15 on Sat Jun 29 01:35:22 CEST 2024.