fsync(2) System Calls Manual fsync(2) NOM fsync, fdatasync - Synchroniser un fichier en memoire avec le disque BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int fsync(int fd); int fdatasync(int fd); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : fsync() : Glibc 2.16 et superieures : Aucune macro de fonction de test a definir Glibc inferieure ou egale a 2.15 : _BSD_SOURCE || _XOPEN_SOURCE || /* Depuis la glibc 2.8 : */ _POSIX_C_SOURCE >= 200112L fdatasync() : _POSIX_C_SOURCE >= 199506L || _XOPEN_SOURCE >= 500 DESCRIPTION fsync() transfere (<< flush >>) toutes les donnees modifiees (c'est-a-dire les pages modifiees du cache memoire) du fichier correspondant au descripteur fd sur le disque (ou autre peripherique de stockage permanent) afin que toutes les informations modifiees puissent etre recuperees meme apres un plantage ou un redemarrage du systeme. Cela necessite d'ecrire ou de purger le cache du disque, s'il en existe un. L'appel bloque jusqu'a ce que le peripherique indique que le transfert est termine. Outre les donnees du fichier, fsync() transfere aussi les meta-donnees associees au fichier (voir inode(7)). Un appel a fsync() n'assure pas obligatoirement que les informations concernant le repertoire aient atteint le disque. Pour cela, un appel explicite de fsync() sur le descripteur de fichier du repertoire est necessaire. fdatasync() est similaire a fsync(), mais ne transfere pas les meta-donnees, sauf si ces informations sont necessaires a une recuperation ulterieure de donnees. Par exemple, les modifications de st_atime ou st_mtime (respectivement, heure du dernier acces et de la derniere modification ; consultez inode(7)) ne sont pas transferees, car elles ne sont pas necessaires a une lecture de donnees ulterieure. En revanche, une modification de la taille du fichier (st_size), par exemple effectuee par ftruncate(2), necessite un transfert des meta-donnees. Le but de fdatasync() est de reduire l'activite du disque pour les applications qui n'ont pas besoin d'une parfaite synchronisation des meta-donnees avec le disque. VALEUR RENVOYEE Ces appels systeme renvoient 0 en cas de succes, ou -1 en cas d'echec, auquel cas errno est positionne pour indiquer l'erreur. ERREURS EBADF Le descripteur de fichier fd est non valable. EINTR La fonction a ete interrompue par un signal ; consultez signal(7). EIO Une erreur s'est produite pendant la synchronisation. Cette erreur peut provenir de l'ecriture de donnees sur un autre descripteur de fichier dans le meme fichier. Depuis Linux 4.13, les erreurs survenues pendant l'ecriture sont signalees a tous les descripteurs de fichier qui pourraient avoir ecrit des donnees a l'origine de l'erreur. Certains systemes de fichiers (comme NFS) gardent le suivi du descripteur de fichier d'ou proviennent les donnees et donnent un retour plus precis. D'autres systemes de fichiers (comme la plupart des locaux) signaleront l'erreur a tous les descripteurs de fichier ouverts sur le fichier quand l'erreur a ete enregistree. ENOSPC L'espace disque a ete epuise pendant la synchronisation. EROFS EINVAL fd est associe a un type de fichier special (comme un tube, un FIFO ou un socket) qui ne prend pas en charge la synchronisation. ENOSPC EDQUOT fd est associe a un fichier sur un systeme de fichiers NFS ou autre qui n'alloue pas d'espace au moment de l'appel systeme write(2) et des ecritures passees ont echoue a cause d'un espace de stockage insuffisant. VERSIONS Sur les systemes POSIX sur lesquels fdatasync() est disponible, la constante symbolique _POSIX_SYNCHRONIZED_IO est definie dans comme etant une valeur superieure a 0. (Consultez aussi sysconf(3).) STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001, 4.2BSD. Sous Linux 2.2 et precedents, fdatasync() est equivalent a fsync(), et n'apporte donc aucun avantage en performance. Les implementations de la fonction fsync() dans les vieux noyaux et les systemes de fichiers les moins utilises ne savent pas comment vider les caches du disque. Dans ces situations, les caches du disque ont besoin d'etre desactives avec hdparm(8) ou sdparm(8) afin de garantir la surete des operations. Sous AT&T UNIX System V Release 4, fd a besoin d'etre ouvert en ecriture. Cela est en soit incompatible avec l'interface d'origine de BSD et interdit par POSIX, mais neanmoins a survecu dans HP-UX et AIX. VOIR AUSSI sync(1), bdflush(2), open(2), posix_fadvise(2), pwritev(2), sync(2), sync_file_range(2), fflush(3), fileno(3), hdparm(8), mount(8) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 fsync(2)