Bonsoir,
j'ai un doute sur un comportement assez spécifique. Soit le programme basique
Code :
- #include <stdlib.h>
- #include <stdio.h>
- #include <err.h>
- void bye(void)
- {
- printf("bye\n" );
- }
- int main(void)
- {
- atexit(&bye);
-
- errx(42, "oh non!" );
-
- return 0;
- }
|
.
Sur mon PC (Debian 12) j'ai bien la fonction bye() qui est appellée lors du errx(), en effet on peut voir dans le source de la glibc que errx() appelle exit() et donc les fonctions "enregistrées" avec atexit().
Très bien, sauf que je n'arrive pas à trouver si c'est un comportement standardisé ou dépendant de l'implémentation de la lib' standard qu'on utilise. J'ai regardé dans les man-page mais c'est pas clair (pour moi ). Quelqu'un sait si le standard C/C99 dit quelque chose là-dessus ou un standard POSIX ou autre?
C'est important car je me demande si je peux mettre le code qui va réellement écrire mon fichier log dans une fonction qui j'enregistre avec atexit() ou si c'est pas une bonne idée si j'utilise err()/errx().
(Le "fichier log" est un poil plus complexe qu'un simple fopen(), car sinon le buffer serait de toute façon écrit sur le HDD quand le programme se termine vu que tout les file descriptors sont fermés...)
Désolé pour le franglais.
Message édité par rat de combat le 26-08-2023 à 20:18:05
---------------
matos à vendre