IOCTL_FICLONERANGE(2) | Manuel du programmeur Linux | IOCTL_FICLONERANGE(2) |
ioctl_ficlonerange, ioctl_ficlone - partager certaines données d'un fichier avec un autre fichier
#include <sys/ioctl.h>
#include <linux/fs.h>
int ioctl(int dest_fd, FICLONERANGE, struct
file_clone_range*arg);
int ioctl(int dest_fd, FICLONE, int
src_fd);
Si un système de fichiers prend en charge le stockage physique du partage de fichiers entre plusieurs fichiers (« reflink »), cette opération ioctl(2) peut être utilisée pour faire apparaître des données du fichier src_fd dans le fichier dest_fd en partageant le stockage sous-jacent, ce qui est plus rapide que de faire une copie physique séparée des données. Les deux fichiers doivent se trouver sur le même système de fichiers. Si une écriture de fichier doit avoir lieu sur une région partagée, le système de fichiers doit garantir que les modifications n’appartiennent qu’au fichier qui est écrit. On appelle généralement ce comportement la « copie sur écriture ».
Cet ioctl « reflink » jusqu'à src_length octets du descripteur de fichier src_fd, à la position src_offset dans le fichier dest_fd à la position dest_offset, pourvu que les deux soient des fichiers. Si src_length vaut zéro, l'ioctl « reflink » à la fin du fichier source. Ces informations vont dans une structure de la forme suivante :
struct file_clone_range {
__s64 src_fd;
__u64 src_offset;
__u64 src_length;
__u64 dest_offset; };
Les clones sont atomiques par rapport aux écritures concomitantes, vous n'avez donc pas besoin de poser de verrous pour avoir une copie clonéecohérente.
L'ioctl FICLONE clone des fichiers entiers.
En cas d'erreur, la valeur de retour est -1 et errno est définie pour préciser l'erreur.
Les codes d'erreur peuvent être, entre autres, les suivants :
Ces opérations d'ioctl sont apparues pour la première fois dans Linux 4.5. Elles étaient précédemment connues en tant que BTRFS_IOC_CLONE et BTRFS_IOC_CLONE_RANGE, et elles étaient réservées à Btrfs.
Cette API est spécifique à Linux.
Une opération de copie sur écriture nécessitant l'allocation d'un nouveau stockage, l'opération fallocate(2) peut ne plus partager les blocs partagés pour garantir que les écritures suivantes n'échoueront pas du fait d'un manque d'espace disque.
Cette page fait partie de la publication 5.10 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/.
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-Philippe MENGUAL <jpmengual@debian.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@lists.debian.org.
15 septembre 2017 | Linux |