Bonjour,
La commande exit(1) exécute-t'elle la fermeture de tous les fichiers ouverts dans le prog ?
Merci de vos réponses. :)
Version imprimable
Bonjour,
La commande exit(1) exécute-t'elle la fermeture de tous les fichiers ouverts dans le prog ?
Merci de vos réponses. :)
Heu normalement le C ne fait rien à ta place, il faut tout faire toi même, d'où l'utilité d'enregistrer une fonction de nettoyage apres le chargement de ton programme avec la fonction atexit, ceci normalement, devrait pouvoir t'aider un peu dans ta tâche mais reste à toi de créer ta fonction de nettoyage :wink:
Merci CSoldier. :wink:
Si les fichiers sont fermes par exit(). Mais la memoire n'est pas liberee, par contre, donc autant se fabriquer une jolie fonction de nettoyage. Ce n'est pas simple, notamment si exit() est appelee dans une sous-fonction ou l'on ne dispose pas en local des pointeurs vers les fichiers ouverts et la memoire allouee.
Le plus propre est que chaque sous-fonction retourne un code d'erreur a la fonction appelante (apres avoir effectue son nettoyage local), jusqu'a atteindre main() qui est seule responsable de terminer le programme (un return EXIT_??? suffit, alors).
Pour reference, la derniere version de la norme du langage C:
Citation:
7.20.4.3 The exit function
Synopsis
1 #include <stdlib.h>
void exit(int status);
Description
2 The exit function causes normal program termination to occur. If more than one call to
the exit function is executed by a program, the behavior is undefined.
First, all functions registered by the atexit function are called, in the reverse order of
their registration,256) except that a function is called after any previously registered
functions that had already been called at the time it was registered. If, during the call to
any such function, a call to the longjmp function is made that would terminate the call
to the registered function, the behavior is undefined.
4 Next, all open streams with unwritten buffered data are flushed, all open streams are
closed, and all files created by the tmpfile function are removed.
5 Finally, control is returned to the host environment. If the value of status is zero or
EXIT_SUCCESS, an implementation-defined form of the status successful termination is
returned. If the value of status is EXIT_FAILURE, an implementation-defined form
of the status unsuccessful termination is returned. Otherwise the status returned is
implementation-defined.
Returns
6 The exit function cannot return to its caller.
Ha tiens j'ai au moins appris quelque chose aujourd'hui :!: Le mieux reste tout de même de tout faire soi même je pense, enfin c'est dans mes habitudes :wink:
Citation:
Envoyé par licorne
- Il n'y a pas de 'commandes' en C. exit() est une fonction.
- 1 n'est pas une valeur portable. Pour retourner une information 'défaut' au système, passer la valeur portable EXIT_FAILURE. C'est fait pour.
Oui, mais compter dessus est faire preuve d'une fénéantise à toute épreuve. Et puis de nombreuses applications réelles tournent en permanence (pas de exit(), sauf erreur) 24/7.Citation:
exécute-t'elle la fermeture de tous les fichiers ouverts dans le prog ?