fsync

Autres langues

Langue: fr

Version: 28 avril 2006 (mandriva - 01/05/08)

Autres sections - même nom

Section: 2 (Appels système)

NOM

fsync - Synchroniser un fichier en mémoire avec le disque

SYNOPSIS

#include <unistd.h>

int fsync (int fd);

int fdatasync (int fd);

DESCRIPTION

fsync() transfère (« flush ») tous les morceaux encore en mémoire (c'est-à-dire, les pages de cache tampon modifiées) du fichier référencé par le descripteur de fichier fd vers le périphérique disque (ou un autre périphérique de stockage permanent) où se trouve ce fichier. Cet appel bloque jusqu'à ce que le périphérique indique que le transfert est fini. Il vide aussi les informations de métadonnées associées au fichier (voir stat(2)).

L'appel à fsync() n'assure pas obligatoirement que les informations concernant le répertoire aient atteint le disque. Pour cela, un appel explicite de fsync() sur le descripteur de fichier du répertoire est nécessaire.

fdatasync(2) est similaire à fsync() mais il ne vide pas les métadonnées modifiées à moins que ces métadonnées ne soient nécessaires pour permettre une gestion correcte d'une récupération ultérieure des données. Par exemple, la modification de st_atime ou st_mtime (respectivement l'heure du dernier accès et l'heure de dernière modification ; voir stat(2)) ne nécessite pas le vidage car ils ne sont pas nécessaires à une gstion correcte dee lecture de données ultérieure. D'un autre coté, une modification de la taille du fichier (st_size, comme réalisée par, par exemple ftruncate(2)), nécessite un vidage des métadonnées.

Le but de fdatasync(2) est de réduire l'activité disque pour des applications qui ne nécessitent pas que les métadonnées soient synchronisées avec le disque.

VALEUR RENVOYÉE

Les appels système renvoient 0 s'ils reussissent, ou -1 s'ils échouent, auquel cas errno contient le code d'erreur.

ERREURS

EBADF
fd n'est pas un descripteur de fichier valide ouvert en écriture.
EIO
Une erreur s'est produite pendant la synchronisation.
EROFS, EINVAL
fd est associé à un type de fichier spécial qui ne permet pas de synchronisation.

CONFORMITÉ

BSD 4.3, POSIX.1-2001.

NOTES

Si le disque dur dispose d'un tampon en écriture, les données ne sont peut-être pas enregistrées définitivement lorsque fsync() / fdatasync(2) se termine.

Lorsqu'un système de fichiers ext2 est monté avec l'option sync, les entrées de répertoires sont également synchronisées lors de l'appel à fsync().

Sur les noyaux antérieurs au 2.4, fsync() peut être sensiblement inefficace sur les gros fichiers. Une autre solution peut être l'utilisation de l'attribut O_SYNC lors de l'invocation de open(2).

VOIR AUSSI

bdflush(2), open(2), sync(2), sync_file_range(2), hdparm(8), mount(8), sync(8), update(8)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 10 octobre 1996 et révisée le 28 novembre 2007.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 fsync ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.