fsync   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (2)
Updated: 26 juillet 2007
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
fsync, fdatasync - Synchroniser un fichier en mémoire avec le disque  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#include <unistd.h>

int fsync (int fd);

int fdatasync (int fd);

Exigences de macros de test de fonctionalités pour la glibc (voir feature_test_macros(7)) :

fsync() : _BSD_SOURCE || _XOPEN_SOURCE
fdatasync() : _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500  




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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() 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 gestion 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() 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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Les appels système renvoient 0 s'ils reussissent, ou -1 s'ils échouent, auquel cas errno contient le code d'erreur.  



ERREURS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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É   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
BSD 4.3, POSIX.1-2001.  



DISPONIBILITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Sur les systèmes POSIX sur lesquels fdatasync() est disponible, la constante symbolique _POSIX_SYNCHRONIZED_IO est définie dans <unistd.h> comme étant une valeur supérieure à 0. (Voir aussi sysconf(3).)  



NOTES   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
Les applications qui accèdent à des bases de données ou à des fichiers de journalisation n'écrivent souvent qu'une faible quantité de données (par exemple, une ligne dans un fichier de journalisation) et appellent ensuite immédiatement fsync() pour s'assurer que les données écrites soient physiquement stockées sur le disque Malheureusement, fsync() initiera toujours deux opérations d'écriture : une pour les données nouvellement écrites, et une autre pour mettre à jour la date de modification stockée dans l'i-noeud. Si la date de modification ne fait pas partie du concept de l'opération, fdatasync() peut être utilisé pour éviter des opérations d'écriture inutiles de l'i-noeud sur le disque.

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() 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).

Dans Linux 2.2 et précédents, fdatasync() était équivalent à fsync(), et n'apportait donc aucun avantage en performance.  




VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
bdflush(2), open(2), sync(2), sync_file_range(2), hdparm(8), mount(8), sync(8), update(8)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

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 14 janvier 2008.

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.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
CONFORMITÉ
DISPONIBILITÉ
NOTES
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EBADFERREURS
EIOERREURS
EROFS, EINVALERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 19/10/2008 07:56:03, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional