C equivalente de autoflush (fd stdout después de cada escritura)?
Pregunta
En Perl, puedo escribir:
$|++;
y todo lo que se imprima en STDOUT se eliminará automáticamente () 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 forma en que elimina automáticamente stderr?
Solución
Prueba setvbuf(stdout, NULL, _IONBF, 0)
. Cambia stdout
al modo sin búfer (_IONBF
).
Otros consejos
No he hecho esto, pero _IOLBF sería la respuesta correcta.
$ man setvbuf
...
NOMBRE
setvbuf: asignar almacenamiento en búfer a una secuencia
SINOPSIS
#include < stdio.h >
int setvbuf(FILE *restrict stream, char *restrict buf, int type,
size_t size);
DESCRIPCIÓN
La función setvbuf () se puede usar después de que la secuencia a la que apunta la secuencia esté asociada con un archivo abierto, pero antes de que se realice cualquier otra operación (que no sea una llamada fallida a setvbuf ())
corriente. El tipo de argumento determina cómo se almacenará 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.
Eche un vistazo a setbuf () y setvbuf ().