J'ai lu dans une page de manuel que lorsque exit()
est appelé, tous les flux sont vidés et fermés automatiquement. Au début, j'étais sceptique quant à la façon dont cela a été fait et si c'est vraiment fiable, mais vu que je ne peux pas en savoir plus, je vais accepter que cela fonctionne - nous verrons si quelque chose explose. Quoi qu'il en soit, si ce comportement de fermeture de flux est présent dans exit()
, un tel comportement est-il également présent dans le gestionnaire par défaut pour SIGINT
(le signal d'interruption est généralement déclenché avec Ctrl + C)? Ou, serait-il nécessaire de faire quelque chose comme ceci:Les flux ouverts sont-ils automatiquement vidés et fermés sur SIGINT en C?
#include <signal.h>
#include <stdlib.h>
void onInterrupt(int dummy) { exit(0); }
int main() {
signal(SIGINT, onInterrupt);
FILE *file = fopen("file", "a");
for (;;) { fprintf(file, "bleh"); } }
pour obtenir file
à fermer correctement? Ou les lignes signal(SIG...
et void onInterrupt(...
peuvent-elles être omises en toute sécurité?
Veuillez limiter les réponses à C, C99 et POSIX car je n'utilise pas GNU libc. Merci.
C'est définitivement fermé. Tous les descripteurs de fichiers sont libérés à la fin du processus. Je ne suis pas sûr qu'ils soient rouges. –