NOM¶
sync_file_range - Synchroniser un segment de fichier avec le disque
SYNOPSIS¶
#define _GNU_SOURCE /* Consultez feature_test_macros(7) */
#include <fcntl.h>
int sync_file_range(int fd, off64_t offset, off64_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 de mémoire disponible.
- ENOSPC
- Plus de place disque disponible.
- ESPIPE
- fd correspond à autre chose qu'un fichier ordinaire, un
périphérique bloc, un répertoire, ou un lien
symbolique.
VERSIONS¶
sync_file_range() est apparu dans Linux 2.6.17.
Cet appel système est spécifique à Linux et ne devrait pas
être utilisé dans des applications conçues pour
être portable.
NOTES¶
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,
off64_t offset, off64_t nbytes);
À part cela, le comportement de cet appel système est strictement
identique à celui de
sync_file_range().
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().
VOIR AUSSI¶
fdatasync(2),
fsync(2),
msync(2),
sync(2)
COLOPHON¶
Cette page fait partie de la publication 3.65 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Julien Cristau et l'équipe francophone de traduction de
Debian (2006-2009).
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> ».