Subrutina fsync o fsync_range

Finalidad

Escribe cambios en un archivo en almacenamiento permanente.

Biblioteca

Biblioteca C estándar (libc.a)

Sintaxis

#include <unistd.h>

int fsync ( FileDescriptor)
int FileDescriptor;

int fsync_range (FileDescriptor, how, start, length)
int FileDescriptor;
int how;
off_t start;
off_t length;

Descripción

La subrutina fsync hace que todos los datos modificados en el archivo abierto especificado por el parámetro FileDescriptor se guarden en el almacenamiento permanente. Al volver de la subrutina fsync , se han guardado todas las actualizaciones en el almacenamiento permanente.

La subrutina fsync_range hace que todos los datos modificados en el rango especificado del archivo abierto especificado por el parámetro FileDescriptor se guarden en el almacenamiento permanente. Al volver de la subrutina fsync_range , todas las actualizaciones del rango especificado se han guardado en el almacenamiento permanente.

Este párrafo hace referencia a la función en desuso disponible sólo en el sistema de archivos JFS. Los datos grabados en un archivo que un proceso ha abierto para actualización diferida (con el distintivo O_DEFER ) no se graban en el almacenamiento permanente hasta que otro proceso emita una llamada fsync_range o fsync en este archivo o ejecute una subrutina Escribir síncrona (con el distintivo O_SYNC ) en este archivo. Consulte el archivo fcntl.h y la subrutina open para obtener descripciones de los distintivos O_DEFER y O_SYNC respectivamente.

Nota: El archivo identificado por el parámetro FileDescriptor debe estar abierto para escritura cuando se emite la subrutina fsync o la llamada no es satisfactoria. Esta restricción no se aplicó en sistemas BSD. La subrutina fsync_range no requiere acceso de escritura.

Parámetros

Elemento Descripción
FileDescriptor Un descriptor de archivo abierto válido.
¿Cómo Especifique las características de manejo de la operación.
O_SYNC
Los datos modificados en el rango especificado por los parámetros de < inicio, longitud > se graban en el almacenamiento. Si se modifica algún metadatos, todos los datos de usuario modificados se graban en el almacenamiento. Los cambios de metadatos y los atributos de archivo, incluidas las indicaciones de fecha y hora también se graban en el almacenamiento.
O_DSYNC
Los datos modificados en el rango especificado por los parámetros de < inicio, longitud > se graban en el almacenamiento. Si hay metadatos modificados para el archivo, los metadatos también se graban si es necesario leer los datos. De lo contrario, no se producen actualizaciones de metadatos.
O_NOCACHE
Los datos modificados se graban como con el parámetro O_DSYNC . Las páginas completas del rango especificado por los parámetros de < inicio, longitud > se eliminan de la memoria caché. Las páginas se eliminan de la memoria caché aunque no se modifiquen. La operación también funciona en archivos que están abiertos sólo para lectura.
inicio Cómo iniciar el desplazamiento del archivo
longitud Longitud, o cero para todos los datos de memoria caché.

Valores de retorno

Tras la finalización satisfactoria, la subrutina fsync devuelve un valor de 0. En caso contrario, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.

Tras la finalización satisfactoria, la subrutina fsync_range devuelve un valor de 0. En caso contrario, se devuelve un valor de -1 y se establece la variable global errno para indicar el error.

Códigos de error

La subrutina fsync o fsync_range no es satisfactoria si una o más de las siguientes son verdaderas:

Elemento Descripción
EIO Se ha producido un error de E/S al leer o grabar en el sistema de archivos.
EBADF El parámetro FileDescriptor no es un descriptor de archivo válido abierto para grabación.
EINVAL El archivo no es un archivo normal.
EINTR La subrutina se ha interrumpido por una señal.