sync_file_range
Table des matières
Retour à l'index
NOM
sync_file_range - Synchroniser un segment de fichier avec le disque
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#define _GNU_SOURCE /* See feature_test_macros(7) */
#define _FILE_OFFSET_BITS 64
#include <fcntl.h>
int sync_file_range(int fd, off_t offset, off_t nbytes,
unsigned int flags);
DESCRIPTION
sync_file_range() permet d'avoir un contrôle fin de la synchronisation
d'un fichier ouvert, référencé par le descripteur de fichier fd, sur le
disque.
offset est le premier octet de la zone du fichier à
synchroniser. nbytes indique la taille, en octets, de la zone à
synchroniser ; si nbytes est nul, toute la zone entre offset et la
fin du fichier est synchronisée. La synchronisation se fait par multiples de
la taille de page : offset est arrondi par défaut à la frontière d'une
page, et (offset+nbytes-1) est arrondi par excès.
L'argument flags contient une ou plusieurs des valeurs suivantes :
- SYNC_FILE_RANGE_WAIT_BEFORE
-
Attendre l'écriture de toutes les pages de la zone indiquée qui ont déjà été
envoyées au pilote de périphérique pour écriture, avant d'effectuer cette
écriture.
- SYNC_FILE_RANGE_WRITE
-
Commencer l'écriture physique de toutes les pages modifiées de la plage
indiquée pour lesquelles l'écriture n'a pas encore été demandée. Veuillez
noter que cela peut bloquer si vous tentez d'écrire plus que la taille de la
file demandée.
- SYNC_FILE_RANGE_WAIT_AFTER
-
Attendre l'écriture physique de toutes les pages de la plage après toute
demande d'écriture.
Indiquer 0 comme flags est possible, dans ce cas l'appel système n'a pas
d'effet.
Avertissement
Cet appel système est extrêmement dangereux et ne devrait pas être utilisé
dans des programmes portables. Aucune de ces opérations n'entraîne
l'écriture physique des métadonnées du fichier. Par conséquent, à moins que
l'application n'effectue strictement que des écrasements de blocs disque
déjà instanciés, il n'y a aucune garantie que les données soient disponibles
après un plantage.Il n'y a pas d'interface utilisateur pour savoir si une
écriture consiste uniquement en un écrasement. Sur un système de fichiers
avec une sémantique de copie sur écriture (copy-on-write), tel que
btrfs, un écrasement de blocs existants est impossible. Pour écrire sur
un espace déjà alloué, beaucoup de systèmes de fichiers nécessitent aussi
des appels à l'allocateur de blocs, qui dans le cas de cet appel, ne seront
pas synchronisés sur le disque. Cet appel système ne vide pas les caches
d'écriture du disque, ainsi aucune garantie d'intégrité n'est possible sur
des systèmes dont les caches de disque en écriture sont volatiles.
Quelques détails
SYNC_FILE_RANGE_WAIT_BEFORE et SYNC_FILE_RANGE_WAIT_AFTER détectent
les erreurs d'entrées-sorties ou la condition ENOSPC, et les signalent à
l'appelant.
Des combinaisons utiles pour flags sont :
- SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE
-
S'assurer de l'écriture physique de toutes les pages de la plage spécifiée
qui étaient modifiées lorsque sync_file_range() a été appelé. C'est
l'opération « démarrer l'écriture pour l'intégrité des données ».
- SYNC_FILE_RANGE_WRITE
-
Commencer l'écriture physique de toutes les pages modifiées de la plage
indiquée pour lesquelles l'écriture n'a pas encore été demandée. C'est une
opération « vidage vers le disque » asynchrone. Elle n'est pas convenable
pour les opérations d'intégrité de données.
- SYNC_FILE_RANGE_WAIT_BEFORE (ou SYNC_FILE_RANGE_WAIT_AFTER)
-
Attendre la fin de l'écriture physique de toutes les pages de la plage
indiquée. Cela peut être utilisé après une opération
SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE pour attendre la fin
de cette opération et obtenir son résultat.
- SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_AFTER
-
C'est une opération « écriture pour intégrité des données » qui s'assure
que toutes les pages modifiées dans la plage spécifiée lors de l'appel à
sync_file_range() sont bien envoyées sur le disque.
VALEUR RENVOYÉE
S'il réussit 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'entrée-sortie.
- ENOMEM
-
Plus assez de mémoire.
- ENOSPC
-
Plus de place disque disponible.
- ESPIPE
-
fd correspond à autre chose qu'un fichier ordinaire, un périphérique bloc
ou un répertoire.
VERSIONS
sync_file_range2()
Certaines architectures (par exemple PowerPC et ARM) nécessitent que les
paramètres 64 bits soient alignés dans une paire de registres adéquate. Sur
ces architectures, la signature d'appel de sync_file_range() indiquée
dans le SYNOPSIS imposerait le gaspillage d'un registre remplissage entre
les paramètres fd et offset (consultez syscall(2) pour plus de
détails). Pour cette raison, ces architectures définissent un appel système
différent qui réordonne correctement les paramètres :
int sync_file_range2(int fd, unsigned int flags,
off_t offset, off_t nbytes);
À part cela, le comportement de cet appel système est strictement identique
à celui de sync_file_range().
STANDARDS
Linux.
HISTORIQUE
Linux 2.6.17.
sync_file_range2()
Un appel système 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 été
renommé dans Linux 2.6.22, quand un appel système analogue a été ajouté pour
PowerPC. Sur des architectures où la glibc est prise en charge, elle
remplace de manière transparente sync_file_range2() sous le nom
sync_file_range().
NOTES
_FILE_OFFSET_BITS doit être défini à 64 dans le code qui récupère
l'adresse de sync_file_range, si ce code est destiné à être portable sur
les plateformes traditionnelles x86 et ARM 32 bits où la taille de off_t
est par défaut de 32 bits.
VOIR AUSSI
fdatasync(2), fsync(2), msync(2), sync(2)
TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la
GNU General Public License version 3
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- Avertissement
-
- Quelques détails
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- VERSIONS
-
- sync_file_range2()
-
- STANDARDS
-
- HISTORIQUE
-
- sync_file_range2()
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:06 GMT, September 19, 2025