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
fdatasync() :
_POSIX_C_SOURCE >= 199309L || _XOPEN_SOURCE >= 500
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.
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 antérieurs, fdatasync() était équivalent à fsync(), et n'apportait donc aucun avantage en performance.
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 24 juin 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.
Dernière mise à jour : 24 juin 2008