errx() et appel fonctions atexit() - que dit le standard? [résolu] [C] - C - Programmation
Marsh Posté le 25-08-2023 à 22:44:18
Ça me semble assez clair que c'est bon:
man atexit dit:
> The atexit() function registers the given function to be called at normal process termination, either via exit(3) or via return from the program's main().
et man errx dit
> The err(), verr(), errx(), and verrx() functions do not return, but exit with the value of the argument eval.
On est bien dans le cas d'une normal process termination (contrairement à un kill, comme dit dans man atexit).
Marsh Posté le 26-08-2023 à 07:01:27
Ah ok, je butais sur le "normal process termination". Donc SIGKILL/SIGSEGV/... -> pas de fonctions atexit() mais sinon oui?
Merci!
Marsh Posté le 26-08-2023 à 10:25:54
Une erreur est toujours possible (c'est le cas de le dire ), mais je dirais oui
Marsh Posté le 25-08-2023 à 18:58:09
Bonsoir,
j'ai un doute sur un comportement assez spécifique. Soit le programme basique
.
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