flushall - funcion para limpiar buffer en c
Vaciar tampones en C (1)
Nunca he escuchado que no se descargue el búfer de salida, y me gustaría escuchar su fuente al respecto. Lavado de los buffers de salida:
printf("Buffered, will be flushed");
fflush(stdout); // Prints to screen or whatever your standard out is
o
fprintf(fd, "Buffered, will be flushed");
fflush(fd); //Prints to a file
Puede ser una técnica muy útil. ¿Por qué querría vaciar un búfer de salida? Por lo general, cuando lo hago, es porque el código está fallando y estoy tratando de depurar algo. El búfer estándar no se imprimirá cada vez que llame a printf()
espera hasta que se llene y luego descarga un montón a la vez. Entonces, si está intentando verificar si está llegando a una llamada de función antes de un bloqueo, es útil printf
algo como "¡Llegó aquí!", Y algunas veces el búfer no se ha vaciado antes de que ocurra el bloqueo y puede No digas hasta dónde has llegado realmente.
Otra vez que es útil, es en código multi-proceso o multi-hilo. Nuevamente, el búfer no siempre se descarga en una llamada a printf()
, por lo que si desea conocer el verdadero orden de ejecución de varios procesos, debe llenar el búfer después de cada impresión.
Hago el hábito de hacerlo, me ahorra muchos dolores de cabeza en la depuración. El único inconveniente que se me ocurre al hacerlo es que printf()
es una operación costosa (razón por la cual, de manera predeterminada, no descarga el búfer).
En cuanto a vaciar el búfer de entrada ( stdin
), no debe hacer eso. Flushing stdin
es un comportamiento indefinido según el estándar C11 §7.21.5.2 parte 2:
Si la secuencia apunta a una secuencia de salida ... la función fflush hace que cualquier dato no escrito para esa secuencia ... se escriba en el archivo; de lo contrario, el comportamiento es indefinido.
En algunos sistemas, al ser Linux como se puede ver en la página de fflush()
de fflush()
, hay un comportamiento definido pero depende del sistema, por lo que su código no será portátil.
Ahora, si le preocupa que la basura esté "atascada" en el búfer de entrada, puede usar fpurge()
en eso. Vea here para más información sobre fflush()
y fpurge()
¿ fflush()
debería fflush()
para vaciar un búfer incluso si es una secuencia de salida?
¿Para qué sirve? ¿Cómo vaciamos un buffer en general?