2008-10-18 8 views
27

En Perl, I puede escribir:C equivalente de autoflush (flush stdout después de cada escritura)?

$|++; 

y cualquier cosa impresa a STDOUT habrá automáticamente fflush ed().

¿Hay un equivalente en C? En otras palabras, ¿hay alguna forma en que pueda decirle a stdio que elimine automáticamente stdout después de cada printf(), la manera en que vacía automáticamente stderr?

Respuesta

38

Pruebe setvbuf(stdout, NULL, _IONBF, 0). Cambia stdout al modo sin búfer (_IONBF).

6

Eche un vistazo a setbuf() y setvbuf().

13

No he hecho esto, pero _IOLBF sería la respuesta correcta.

$ man setvbuf
...
NOMBRE
setvbuf - asignar almacenamiento temporal con un flujo

SINOPSIS
#include stdio.h < >

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

DESCRIPCIÓN
La setvbuf() la función se puede usar después de que la secuencia a la que apunta la transmisión esté asociada con una apertura archivo pero antes de cualquier otra operación (que no sea una llamada fallida a setvbuf()) se realiza en la secuencia . El tipo de argumento determina cómo se almacenará en búfer la secuencia, de la siguiente manera:

* {_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. 
Cuestiones relacionadas