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).
POSIX.1b (anteriormente POSIX.4)
VÉASE TAMBIÉN¶
bdflush(2),
open(2),
sync(2),
mount(8),
update(8),
sync(8)