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)