sync_file_range(2) | System Calls Manual | sync_file_range(2) |
sync_file_range - Synchroniser un segment de fichier avec le disque
Bibliothèque C standard (libc, -lc)
#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);
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 :
Indiquer 0 comme flags est possible, dans ce cas l'appel système n'a pas d'effet.
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.
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 :
S'il réussit sync_file_range() renvoie 0, sinon il renvoie -1 et remplit errno avec le code d'erreur.
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.
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().
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 à debian-l10n-french@lists.debian.org.
4 décembre 2022 | Pages du manuel de Linux 6.03 |