ioctl_ficlonerange
Section: System Calls (2)
Updated: 30 octobre 2022
Index
Return to Main Contents
NOM
ioctl_ficlonerange, ioctl_ficlone - partager certaines données d'un fichier
avec un autre fichier
BIBLIOTHÈQUE
Bibliothèque C standard (libc, -lc)
SYNOPSIS
#include <linux/fs.h> /* Définition des constantes FICLONE* */
#include <sys/ioctl.h>
int ioctl(int dest_fd, FICLONERANGE, struct file_clone_range *arg);
int ioctl(int dest_fd, FICLONE, int src_fd);
DESCRIPTION
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.
VALEUR RENVOYÉE
En cas d'erreur, la valeur de retour est -1 et errno est définie pour
préciser l'erreur.
ERREURS
Les codes d'erreur peuvent être, entre autres, les suivants :
- EBADF
-
src_fd n'est pas ouvert en lecture ; dest_fd n'est pas ouvert en
écriture ou il n'est ouvert que pour des ajouts d'écritures ; ou le système
de fichiers où se trouve src_fd ne gère pas le reflink.
- EINVAL
-
Le système de fichiers ne gère pas le reflink des plages de fichiers
donnés. Cette erreur peut également apparaître si un descripteur de fichier
représente un périphérique, un FIFO ou un socket. Les systèmes de fichiers
d'un disque nécessitent généralement que les paramètres de la position et de
la longueur soient alignés sur la taille de bloc fondamentale. XFS et Btrfs
ne prennent pas en charge le chevauchement des plages de reflink dans le
même fichier.
- EISDIR
-
Un ou plusieurs fichiers sont des répertoires et le système de fichiers ne
gère pas les régions partagées dans les répertoires.
- EOPNOTSUPP
-
Cela peut apparaître si le système de fichiers ne gère pas le reflink d'un
descripteur de fichier ou si le descripteur se rapporte à des inœuds
spéciaux.
- EPERM
-
dest_fd est immuable.
- ETXTBSY
-
Un des fichiers est un fichier d'échange. Les fichiers d'échange ne peuvent
pas partager de stockage.
- EXDEV
-
dest_fd et src_fd ne sont pas sur le même système de fichiers monté.
VERSIONS
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.
STANDARDS
Cette API est spécifique à Linux.
NOTES
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.
VOIR AUSSI
ioctl(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-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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- VERSIONS
-
- STANDARDS
-
- NOTES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 06:22:25 GMT, May 18, 2024