C équivalent de autoflush (flush stdout après chaque écriture)?
Question
En Perl, je peux taper:
$|++;
et tout ce qui sera imprimé sur STDOUT sera automatiquement modifié ().
Existe-t-il un équivalent en C? En d’autres termes, y at-il un moyen de dire à stdio d’effacer automatiquement stdout après chaque printf (), de la même manière qu’il efface stderr?
La solution
Essayez setvbuf(stdout, NULL, _IONBF, 0)
. Il change stdout
en mode sans tampon (_IONBF
).
Autres conseils
Je n'ai pas fait cela, mais _IOLBF serait la bonne réponse.
$ man setvbuf
...
NOM
setvbuf - Assigne la mise en mémoire tampon à un flux
SYNOPSIS
#include < stdio.h >
int setvbuf(FILE *restrict stream, char *restrict buf, int type,
size_t size);
DESCRIPTION
La fonction setvbuf () peut être utilisée après que le flux pointé par stream est associé à un fichier ouvert, mais avant toute autre opération (autre qu'un appel infructueux à setvbuf ()), effectuée sur le fichier.
courant. Le type d'argument détermine comment le flux doit être mis en mémoire tampon, comme suit:
* {_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.
Jetez un coup d'œil à setbuf () et setvbuf ().