sync_file_range(2) System Calls Manual sync_file_range(2) NOM sync_file_range - Synchroniser un segment de fichier avec le disque BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #define _GNU_SOURCE /* See feature_test_macros(7) */ #define _FILE_OFFSET_BITS 64 #include int sync_file_range(int fd, off_t offset, off_t nbytes, unsigned int flags); DESCRIPTION sync_file_range() permet d'avoir un controle fin de la synchronisation d'un fichier ouvert, reference par le descripteur de fichier fd, sur le disque. offset est le premier octet de la zone du fichier a synchroniser. nbytes indique la taille, en octets, de la zone a synchroniser ; si nbytes est nul, toute la zone entre offset et la fin du fichier est synchronisee. La synchronisation se fait par multiples de la taille de page : offset est arrondi par defaut a la frontiere d'une page, et (offset+nbytes-1) est arrondi par exces. L'argument flags contient une ou plusieurs des valeurs suivantes : SYNC_FILE_RANGE_WAIT_BEFORE Attendre l'ecriture de toutes les pages de la zone indiquee qui ont deja ete envoyees au pilote de peripherique pour ecriture, avant d'effectuer cette ecriture. SYNC_FILE_RANGE_WRITE Commencer l'ecriture physique de toutes les pages modifiees de la plage indiquee pour lesquelles l'ecriture n'a pas encore ete demandee. Veuillez noter que cela peut bloquer si vous tentez d'ecrire plus que la taille de la file demandee. SYNC_FILE_RANGE_WAIT_AFTER Attendre l'ecriture physique de toutes les pages de la plage apres toute demande d'ecriture. Indiquer 0 comme flags est possible, dans ce cas l'appel systeme n'a pas d'effet. Avertissement Cet appel systeme est extremement dangereux et ne devrait pas etre utilise dans des programmes portables. Aucune de ces operations n'entraine l'ecriture physique des metadonnees du fichier. Par consequent, a moins que l'application n'effectue strictement que des ecrasements de blocs disque deja instancies, il n'y a aucune garantie que les donnees soient disponibles apres un plantage.Il n'y a pas d'interface utilisateur pour savoir si une ecriture consiste uniquement en un ecrasement. Sur un systeme de fichiers avec une semantique de copie sur ecriture (copy-on-write), tel que btrfs, un ecrasement de blocs existants est impossible. Pour ecrire sur un espace deja alloue, beaucoup de systemes de fichiers necessitent aussi des appels a l'allocateur de blocs, qui dans le cas de cet appel, ne seront pas synchronises sur le disque. Cet appel systeme ne vide pas les caches d'ecriture du disque, ainsi aucune garantie d'integrite n'est possible sur des systemes dont les caches de disque en ecriture sont volatiles. Quelques details SYNC_FILE_RANGE_WAIT_BEFORE et SYNC_FILE_RANGE_WAIT_AFTER detectent les erreurs d'entrees-sorties ou la condition ENOSPC, et les signalent a l'appelant. Des combinaisons utiles pour flags sont : SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE S'assurer de l'ecriture physique de toutes les pages de la plage specifiee qui etaient modifiees lorsque sync_file_range() a ete appele. C'est l'operation << demarrer l'ecriture pour l'integrite des donnees >>. SYNC_FILE_RANGE_WRITE Commencer l'ecriture physique de toutes les pages modifiees de la plage indiquee pour lesquelles l'ecriture n'a pas encore ete demandee. C'est une operation << vidage vers le disque >> asynchrone. Elle n'est pas convenable pour les operations d'integrite de donnees. SYNC_FILE_RANGE_WAIT_BEFORE (ou SYNC_FILE_RANGE_WAIT_AFTER) Attendre la fin de l'ecriture physique de toutes les pages de la plage indiquee. Cela peut etre utilise apres une operation SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE pour attendre la fin de cette operation et obtenir son resultat. SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_AFTER C'est une operation << ecriture pour integrite des donnees >> qui s'assure que toutes les pages modifiees dans la plage specifiee lors de l'appel a sync_file_range() sont bien envoyees sur le disque. VALEUR RENVOYEE S'il reussit sync_file_range() renvoie 0, sinon il renvoie -1 et remplit errno avec le code d'erreur. ERREURS EBADF fd n'est pas un descripteur de fichier valable. EINVAL flags contient un bit invalide, ou offset ou nbytes est invalide. EIO Erreur d'entree-sortie. ENOMEM Plus assez de memoire. ENOSPC Plus de place disque disponible. ESPIPE fd correspond a autre chose qu'un fichier ordinaire, un peripherique bloc ou un repertoire. VERSIONS sync_file_range2() Certaines architectures (par exemple PowerPC et ARM) necessitent que les parametres 64 bits soient alignes dans une paire de registres adequate. Sur ces architectures, la signature d'appel de sync_file_range() indiquee dans le SYNOPSIS imposerait le gaspillage d'un registre remplissage entre les parametres fd et offset (consultez syscall(2) pour plus de details). Pour cette raison, ces architectures definissent un appel systeme different qui reordonne correctement les parametres : int sync_file_range2(int fd, unsigned int flags, off_t offset, off_t nbytes); A part cela, le comportement de cet appel systeme est strictement identique a celui de sync_file_range(). STANDARDS Linux. HISTORIQUE Linux 2.6.17. sync_file_range2() Un appel systeme avec cette signature est d'abord apparu sur l'architecture ARM dans Linux 2.6.20, avec comme nom arm_sync_file_range(). Il a ete renomme dans Linux 2.6.22, quand un appel systeme analogue a ete ajoute pour PowerPC. Sur des architectures ou la glibc est prise en charge, elle remplace de maniere transparente sync_file_range2() sous le nom sync_file_range(). NOTES _FILE_OFFSET_BITS doit etre defini a 64 dans le code qui recupere l'adresse de sync_file_range, si ce code est destine a etre portable sur les plateformes traditionnelles x86 et ARM 32 bits ou la taille de off_t est par defaut de 32 bits. VOIR AUSSI fdatasync(2), fsync(2), msync(2), sync(2) 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-Pierre Giraud 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.8 2 mai 2024 sync_file_range(2)