2008-10-18 4 views
27

En Perl, je peux taper:C équivalent de autoflush (flush stdout après chaque écriture)?

$|++; 

et quoi que ce soit imprimé à STDOUT sera automatiquement ed fflush().

Existe-t-il un équivalent en C? En d'autres termes, est-ce que je peux dire à stdio de fflush automatiquement stdout après chaque printf(), la façon dont il stderr automatiquement stderr?

Répondre

38

Essayez setvbuf(stdout, NULL, _IONBF, 0). Il passe du mode stdout au mode sans tampon (_IONBF).

6

Jetez un oeil à setbuf() et setvbuf().

13

Je n'ai pas fait cela, mais _IOLBF serait la bonne réponse.

$ man setvbuf
...
NOM
setvbuf - assigner en mémoire tampon à un flux

SYNOPSIS
#include <stdio.h>

int setvbuf(FILE *restrict stream, char *restrict buf, int type, 
      size_t size); 

DESCRIPTION
Le setvbuf La fonction() peut être utilisée après que le flux pointé par stream soit associé à un open fichier, mais avant toute autre opération (autre qu'un appel infructueux à setvbuf()) est effectuée sur le flux . 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.