ATEXIT(3)

NOM
atexit - Enregistrer une fonction à appeler à la fin d'un programme

SYNOPSIS
#include <stdlib.h>

int atexit(void (*function)(void));

DESCRIPTION
La fonction atexit() enregistre la fonction function 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. 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-2001 exige que l'implémentation permette d'enregistrer au moins ATEXIT_MAX (32) de ces fonctions. La limite actuelle de l'implémentation peut être obtenue avec sysconf(3).

Lorsqu'un processus fils 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.

CONFORMITÉ
SVr4, BSD 4.3, C89, C99, POSIX.1-2001.

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 enregistrées ne seront pas appelées, et les étapes de fin de processus effectuées par exit(3) ne seront pas réalisées. POSIX.1-2001 dit que le résultat de plus d'un appel à exit(3) (par exemple, appelé 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 dit 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 sur 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.

EXEMPLE
#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, "cannot set exit function\n");
        exit(EXIT_FAILURE);
    }
    exit(EXIT_SUCCESS);
}

VOIR AUSSI
_exit(2), exit(3), on_exit(3)

COLOPHON
Cette page fait partie de la publication 3.40 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies peuvent être trouvées à l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet perkamon <URL:http://perkamon.alioth.debian.org/>.

Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003), Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Florentin Duneau et l'équipe francophone de traduction de Debian (2006-2009).

Veuillez signaler toute erreur de traduction en écrivant à <perkamon-fr@traduc.org>.

Vous pouvez toujours avoir accès à la version anglaise de ce document en utilisant la commande « LC_ALL=C man <section> <page_de_man> ».