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 assez de mémoire. | ||
ENOSPC |
Plus de place disque disponible. | ||
ESPIPE |
fd refers to something other than a regular file, a block device, or a directory. |
VERSIONS
sync_file_range() est apparu dans Linux 2.6.17.
CONFORMITÉ
Cet appel système est spécifique à Linux et ne devrait pas être utilisé dans des applications conçues pour être portable.
NOTES
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,
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 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l’adresse https://www.kernel.org/doc/man-pages/.
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 [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.org>
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 à <debian-l10n-french [AT] lists.org>.