Uscita non si stampa senza fflush (stdout)
Domanda
Non capisco il motivo per cui a volte ho bisogno di usare fflush()
ea volte no.
Il mio programma in segfault al momento e io sono il debug con istruzioni di stampa. Quando un programma segfaults, non stdout
non svuotare automaticamente il buffer?
Soluzione
Non capisco il motivo per cui a volte ho bisogno di usare fflush () e, talvolta, no.
A volte i buffer stdio
sono lavata a volte non lo sono. Ad esempio semplicemente compreso un "\ n" nella stoffa stampata tipicamente dilavare (perché stdout
è per difetto linea tamponata quando collegato a un terminale).
Quando un programma segfaults, fa stdout non lavare il suo buffer automaticamente?
buffer stdio sono svuotate dai exit
. Quando un segnale (come SIGSEGV
) uccide un processo, exit
non si chiama . Un altro modo per uscire da un processo senza risciacquo i buffer stdio
è quello di utilizzare il _exit
chiamata Unix-specifico.
Altri suggerimenti
No, perché dovrebbe. Il programma viene ucciso dal sistema operativo. Se si verifica un segfault, il programma non è più in uno stato significativo è, quindi niente di possono accadere in modo sicuro, a quel punto diverso immediata risoluzione.
(E non nessuno cercare di registrare un gestore di segnale per SIGSEGV
.)
"Non riesco a capire perché fflush (stdout) viene chiamato qui, in questo codice Io cerco di commentare questa linea e comportamento è stato esattamente lo stesso ".
perché non siete garantiti per vedere printf precedente () Uscita se questo uscita non termina in una riga.
In sostanza, è necessario solo se si sta visualizzando dire un prompt senza un ritorno a capo, e si vuole fare in modo che l'utente può vederlo.