table of contents
ATEXIT(3) | Manuel du programmeur Linux | ATEXIT(3) |
NOM¶
atexit - Enregistrer une fonction à appeler à la fin d'un programmeSYNOPSIS¶
#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 requires that an implementation allow at least ATEXIT_MAX (32) such functions to be registered. The actual limit supported by an implementation can be obtained using 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.ATTRIBUTS¶
Pour une explication des termes utilisés dans cette section, consulter attributes(7).Interface | Attribut | Valeur |
atexit() | Sécurité des threads | MT-Safe |
CONFORMITɶ
POSIX.1-2001, POSIX.1-2008, 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.If one of the registered functions calls _exit(2), then any remaining functions are not invoked, and the other process termination steps performed by exit(3) are not performed.
POSIX.1 says that the result of calling exit(3) more than once (i.e., calling exit(3) within a function registered using atexit()) is undefined. On some systems (but not Linux), this can result in an infinite recursion; portable programs should not invoke exit(3) inside a function registered using atexit().
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.
According to POSIX.1, the result is undefined if longjmp(3) is used to terminate execution of one of the functions registered using 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, "cannot set exit function\n"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }
VOIR AUSSI¶
_exit(2), dlopen(3), exit(3), on_exit(3)COLOPHON¶
Cette page fait partie de la publication 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.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> et David Prévot <david@tilapin.org>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>.
9 juin 2020 | Linux |