2011-10-24 18 views
21

Quiero desactivar el almacenamiento en búfer para la salida estándar para obtener el resultado exacto para el siguiente códigocómo desactivar el almacenamiento en búfer de salida estándar en C

while(1) { 
printf("."); 
sleep(1); 
} 

El montón de código de printf ''. solo cuando el buffer se llena

+3

'¿Por qué no fflush (stdout)'? –

+1

posible duplicado de [¿Por qué printf no descarga después de la llamada a menos que una nueva línea esté en la cadena de formato? (en C)] (http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin) – DarkDust

+1

Candidato para * preguntas que se solicitan más en StackOverflow *. – DarkDust

Respuesta

5

Use fflush(stdout). Puede llamarlo después de cada printf para forzar que el búfer se descargue.

+13

Esto realmente no "desactiva el almacenamiento en búfer de stdout en C". – hagello

-2

Usted puede hacer

write(1, ".", 1); 

en lugar de

printf("."); 
70

Puede utilizar el setvbuf function: Uso fflush

setvbuf(stdout, NULL, _IONBF, 0); 
+3

Bueno uno. Gracias. Por cierto 'setbuf (stream, NULL);' es equivalente a 'setvbuf (stream, NULL, _IONBF, BUFSIZ);' – sehe

+10

Una advertencia: es legal llamar 'setbuf' o' setvbuf' como el ** muy primero ** operación en una secuencia antes de realizar cualquier entrada o salida en ella. Por lo tanto, usar 'fflush' explícitamente suele ser una mejor idea. –

7

También puede utilizar setbuf

setbuf(stdout, NULL); 

Esto se hará cargo de todo lo

+0

esta no es una respuesta muy buena, citando Newlib: 'ANSI C y la definición de interfaz del Sistema V (Problema 2) requieren <>. Sin embargo, difieren en el significado de un <> puntero de buffer : la especificación SVID issue 2 dice que un <> buffer puntero solicita salida sin búfer. Para una máxima portabilidad, evite <> punteros de búfer. – MightyPork

Cuestiones relacionadas