[ Foro de C ]

La función fflush( )

18-Apr-2010 02:00
Carlos Ruiz
2 Respuestas

Holap:

Hace tiempo tengo una duda existencial:
Jamás he usado la función fflush, ni siquiera en programas en los que tengo que abrir/leer/escribir en muchos archivos a la vez, y nunca he tenido problemas... pero tampoco tengo 100% claro para qué sirve dicha función (a pesar de haber buscado muchas explicaciones y ejemplos en internet, sigo sin entender completamente de qué se trata)... xD

Podría alguien explicarme y crear un breve y didáctico ejemplo sobre la función fflush( ), pliss?? :P

De antemano muchas graciaaaas...

Saludooos :P


25-Apr-2010 23:16
Nacho Cabanes (+83)

"fflush" vacía el buffer de un fichero.

La idea es que es muy frecuente que un fichero, por eficiencia, se lea o escriba con la ayuda de un buffer intermedio en el que se depositan los datos antes de la lectura o escritura en disco.

Por ejemplo, si vas guardando en un fichero byte a byte, es habitual que no se vuelque inmediatametne cada byte, sino que se vayan dejando en una zona intermedia de memoria (por ejemplo, de 512 bytes), y cuando esa zona intermedia (el buffer) está lleno, es cuando realmente se vuelcan los datos al fichero, de forma que no se está accediendo al disco continuamente y el rendimiento global puede ser mayor.

Ese es el motivo de que muchas veces, si olvidas un "fclose" y no cierras un fichero en el que había pocos datos, el fichero se queda vacío: no se había llegado a llenar el buffer, y por tanto, no se había volcado al fichero "real".

La orden "fflush" puede ayudar a evitar ese problema, volcando los datos a disco (en un fichero abierto para escritura) aunque el buffer no se haya terminado de llenar.

En un fichero abierto para lectura, "fflush", al vaciar el buffer, hace que se pierdan los últimos datos leídos, por lo que, en principio, es menos útil.


26-Apr-2010 22:04
Carlos Ruiz

Holap:

Muchas gracias por la explicación, estimado Nacho... ahora me ha quedado mucho más claro... :-)

Saludooos...






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)