Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
947 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [résolu] [C] errx() et appel fonctions atexit() - que dit le standard?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] [C] errx() et appel fonctions atexit() - que dit le standard?

n°2453094
rat de com​bat
attention rongeur méchant!
Posté le 25-08-2023 à 18:58:09  profilanswer
 

Bonsoir,
 
j'ai un doute sur un comportement assez spécifique. Soit le programme basique

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <err.h>
  4. void bye(void)
  5. {
  6.     printf("bye\n" );
  7. }
  8. int main(void)
  9. {
  10.     atexit(&bye);
  11.    
  12.     errx(42, "oh non!" );
  13.    
  14.     return 0;
  15. }

.
 
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 :o ). 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. :o


Message édité par rat de combat le 26-08-2023 à 20:18:05

---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
mood
Publicité
Posté le 25-08-2023 à 18:58:09  profilanswer
 

n°2453116
kajoux
Posté le 25-08-2023 à 22:44:18  profilanswer
 

Ç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).

n°2453122
rat de com​bat
attention rongeur méchant!
Posté le 26-08-2023 à 07:01:27  profilanswer
 

Ah ok, je butais sur le "normal process termination". Donc SIGKILL/SIGSEGV/... -> pas de fonctions atexit() mais sinon oui?
 
Merci! :jap:


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!
n°2453125
kajoux
Posté le 26-08-2023 à 10:25:54  profilanswer
 

Une erreur est toujours possible (c'est le cas de le dire :o ), mais je dirais oui  :)

n°2453144
rat de com​bat
attention rongeur méchant!
Posté le 26-08-2023 à 20:17:47  profilanswer
 

Très bien, merci! :jap:  On apprend tout les jours. :hello:


---------------
Si vous ouvrez un sujet merci de ne pas le "laisser mourir" subitement et de le marquer comme "résolu" le cas échéant!

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [résolu] [C] errx() et appel fonctions atexit() - que dit le standard?

 

Sujets relatifs
Samba en C++[C] Core dumped avec pthread
[C] permettre à l’utilisateur de modifier une chaîne de caractères[C#] Class, Struct, c'est quoi maintenant la différence ?
[C#/WPF] PresentMon -> interface graphique ( FPS monitoring )[RESOLU] Algorithme (pour dans un deuxième temps traduire en C)
[EXCEL]somme de valeurs associées à une date sans fonctions matriciellC Custom Bubble Sort
Recherche Framework pour appel d'APIModule standard, module de classe et Userform
Plus de sujets relatifs à : [résolu] [C] errx() et appel fonctions atexit() - que dit le standard?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR