Provided by: manpages-fr-dev_4.18.1-1_all bug

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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.