Loading

NOM

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

SYNOPSIS

       #include <unistd.h>

       int fsync(int fd);

       int fdatasync(int fd);

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

       fsync() : _BSD_SOURCE || _XOPEN_SOURCE
                || /* depuis la glibc 2.8 : */ _POSIX_C_SOURCE >= 200112L
       fdatasync() : _POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >=500

       fsync() transfère toutes les données modifiées du fichier correspondant
       au  descripteur  fd  sur  le  disque (ou autre périphérique de stockage
       permanent) où ce fichier se trouve. L’appel bloque jusqu’à  ce  que  le
       périphérique  indique  que le transfert est terminé. Il transfère aussi
       les informations d’état du fichier (voir stat(2)).

       Un appel à fsync() ne s’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  ne  transfère  pas  les
       méta‐données,  sauf  si  ces  informations  sont  nécessaires   à   une
       récupération  ultérieure  de données. Par exemple, les modifications de
       st_atime  ou  st_mtime  (heures  de  dernier  accès  et   de   dernière
       modification,  respectivement ;  voir stat(2)) ne sont pas transférées,
       car  elles  ne  sont  pas  nécessaires  à  une   lecture   de   données
       ultérieurement.  En  revanche, une modification de la taille du fichier
       (st_size),  par  exemple  effectuée  par  ftruncate(2),  nécessite   un
       transfert des méta‐données.

       Le  but  de  fdatasync()  est  de  réduire  l’activité  disque pour les
       applications qui n’ont pas besoin d’une  parfaite  synchronisation  des
       méta‐données avec le disque.

VALEUR RENVOYÉE

       Ces  appels système renvoient 0 en cas de succès, ou -1 en cas d’échec,
       auquel cas errno contient le code d’erreur.

ERREURS

       EBADF  fd n’est  pas  un  descripteur  de  fichier  valable  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.

DISPONIBILITÉ

       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

       Les applications accédant à  des  bases  de  données  ou  des  fichiers
       journaux  écrivent souvent de petits fragments de données (une ligne de
       texte par exemple) et appellent fsync() immédiatement pour être sûr  du
       stockage  sur  disque.  Malheureusement,  fsync()  va  déclencher  deux
       écritures : une pour les données et une pour mettre à jour la  date  de
       modification  enregistrée  dans  l’i-noeud.  Si la date de modification
       n’est pas importante pour  l’application,  alors  fdatasync  peut  être
       invoquée pour éviter l’accès inutile à l’i-noeud.

       Si  le  disque dur dispose d’un tampon en écriture, les données ne sont
       peut‐être  pas   enregistrées   définitivement   lorsque   fsync()   ou
       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).

       Sous  Linux 2.2 et précédents, fdatasync() est équivalent à fsync(), et
       n’apporte donc aucun avantage en performance.

VOIR AUSSI

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

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       être       trouvées      à      l’adresse
       http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

       Veuillez   signaler   toute   erreur   de   traduction  en  écrivant  à
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir accès à la version anglaise de ce document
       en utilisant la commande « man -L C <section> <page_de_man> ».