C equivalente di autoflush (flush stdout dopo ogni scrittura)?
Domanda
In Perl, posso digitare:
$|++;
e qualsiasi cosa stampata su STDOUT verrà automaticamente fflush () ed.
Esiste un equivalente in C? In altre parole, c'è un modo in cui posso dire a stdio di scaricare automaticamente stdout dopo ogni printf (), il modo in cui scarica automaticamente stderr?
Soluzione
Prova setvbuf(stdout, NULL, _IONBF, 0)
. Cambia stdout
in modalità senza buffer (_IONBF
).
Altri suggerimenti
Non l'ho fatto, ma _IOLBF sarebbe la risposta giusta.
$ man setvbuf
...
NAME
setvbuf - assegna il buffering a uno stream
SINOSSI
#include < stdio.h >
int setvbuf(FILE *restrict stream, char *restrict buf, int type,
size_t size);
DESCRIZIONE
La funzione setvbuf () può essere utilizzata dopo che lo stream puntato da stream è associato a un file aperto ma prima che qualsiasi altra operazione (diversa da una chiamata non riuscita a setvbuf ()) venga eseguita sul
ruscello. Il tipo di argomento determina come deve essere bufferizzato lo stream, come segue:
* {_IOFBF} shall cause input/output to be fully buffered.
* {_IOLBF} shall cause input/output to be line buffered.
* {_IONBF} shall cause input/output to be unbuffered.
Dai un'occhiata a setbuf () e setvbuf ().