C equivalente a autoflush (stdout nivelada depois de cada gravação)?
Pergunta
Em Perl, eu posso digitar:
$|++;
e qualquer coisa impressa em STDOUT será fflush automaticamente () ed.
Existe um equivalente em C? Em outras palavras, existe alguma maneira eu posso dizer stdio para stdout automaticamente fflush após cada printf (), a forma como ele automaticamente libera stderr?
Solução
setvbuf(stdout, NULL, _IONBF, 0)
tentativa. Ele muda stdout
para o modo sem buffer (_IONBF
).
Outras dicas
Eu não fiz isso, mas _IOLBF seria a resposta certa.
$ man setvbuf
...
NOME
setvbuf - buffer atribuir a um fluxo
SINOPSE
#include
int setvbuf(FILE *restrict stream, char *restrict buf, int type,
size_t size);
DESCRIÇÃO
A função setvbuf () pode ser usado depois que o fluxo apontado por stream está associada com um arquivo aberto, mas antes de qualquer outra operação (que não seja uma chamada sem êxito para setvbuf ()) é realizada no
corrente. O tipo de argumento determina como fluxo deve ser tamponado, como 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.
Dê uma olhada setbuf () e setvbuf ().