FSYNC(2)

NOMBRE
fsync, fdatasync - sincroniza el estado completo en memoria de un fichero con el del disco

SINOPSIS
#include <unistd.h>

int fsync(int fd);

int fdatasync(int fd);

DESCRIPCIÓN
fsync copia todas las partes que están en memoria de un fichero a disco, y espera hasta que el dispositivo avise de que todas las partes se encuentran en almacenamiento estable. También actualiza información de estado de metadatos. No garantiza necesariamente que la entrada en el directorio que contiene el fichero haya llegado también a disco. Para ello se necesita también una llamada explícita a fsync sobre el descriptor de fichero del directorio. fdatasync hace lo mismo que fsync pero solo vacía los datos de usuario, no los meta datos como el valor mtime o el valor atime.

VALOR DEVUELTO
En caso de éxito, devuelve 0. En caso de error, -1, y la variable errno toma un valor apropiado.

ERRORES

EBADF
    fd no es un descriptor de fichero válido para escribir.

EROFS, EINVAL
    fd está enlazado a un fichero especial que no admite sincronización.

EIO Ha ocurrido un error durante la sincronización.

OBSERVACIONES
En caso de que el disco duro tenga habilitada la escritura en caché, los datos pueden no estar realmente en almacenamiento permanente cuando fsync/fdatasync regrese.

Cuando se monta un sistema de ficheros ext2 con la opción sync, las entradas de directorio son sincronizadas implícitamente también por fsync.

En versiones del núcleo anteriores a la 2.4, fsync puede ser ineficiente sobre ficheros grandes. Una alternativa puede ser usar la opción O_SYNC en open(2).

CONFORME A
POSIX.1b (anteriormente POSIX.4)

VÉASE TAMBIÉN
bdflush(2), open(2), sync(2), mount(8), update(8), sync(8)