plucky (2) splice.2.gz

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

NOM

       splice - Copier des données vers/depuis un tube

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #define _GNU_SOURCE         /* See feature_test_macros(7) */
       #define _FILE_OFFSET_BITS 64
       #include <fcntl.h>

       ssize_t splice(int fd_in, off_t *_Nullable off_in,
                      int fd_out, off_t *_Nullable off_out,
                      size_t len, unsigned int flags);

DESCRIPTION

       splice()  déplace  des  données  entre  deux  descripteurs  de  fichier  sans  les  copier entre l'espace
       d'adressage noyau et l'espace utilisateur. Jusqu'à len octets de données sont transférés  du  descripteur
       de  fichier fd_in au descripteur de fichier fd_out, où l'un des descripteurs de fichier doit correspondre
       à un tube.

       Les sémantiques suivantes s'appliquent à fd_in et off_in :

       -  Si fd_in correspond à un tube, alors off_in doit être NULL.

       -  Si fd_in ne correspond pas à un tube et si off_in est NULL, alors les octets sont lus depuis  in_fd  à
          partir  de  la  position  actuelle  dans le fichier et la position résultante est mise à jour de façon
          appropriée.

       -  Si fd_in ne correspond pas à un tube et off_in n'est pas NULL,  alors  off_in  doit  pointer  vers  un
          tampon  qui indique la position à partir de laquelle les données seront lues dans fd_in ; dans ce cas,
          la position dans fd_in n'est pas modifiée.

       Il en va de même pour fd_out et off_out.

       L'argument flags est un masque de bits constitué par un OU binaire entre une  ou  plusieurs  des  valeurs
       suivantes :

       SPLICE_F_MOVE
              Essayer  de  déplacer des pages au lieu de les copier. Ceci n'est qu'une astuce pour le au noyau :
              des pages peuvent quand même être copiées si le noyau ne peut pas déplacer les pages du tube ou si
              les  tampons  du tube ne correspondent pas à des pages entières. La première implémentation de cet
              attribut comportait un bogue : ainsi, à partir de Linux 2.6.21 il ne fait rien (mais est  toujours
              permis  dans  un  appel  à  splice()) ;  dans  le  futur,  une implémentation correcte pourra être
              restaurée.

       SPLICE_F_NONBLOCK
              Ne pas bloquer sur les entrées-sorties. Cela rend  les  opérations  de  splice  sur  le  tube  non
              bloquantes,  mais  splice() peut tout de même bloquer car les descripteurs de fichier sur lesquels
              il opère peuvent bloquer (sauf s'ils ont l'attribut O_NONBLOCK).

       SPLICE_F_MORE
              Des données supplémentaires seront copiées plus  tard.  C'est  une  astuce  utile  lorsque  fd_out
              correspond  à  un  socket (voir aussi la description de MSG_MORE dans send(2) et la description de
              TCP_CORK dans tcp(7)).

       SPLICE_F_GIFT
              N'a pas d'effet pour splice() ; consultez vmsplice(2).

VALEUR RENVOYÉE

       S'il réussit, splice() renvoie le nombre d'octets transférés dans ou à partir du tube.

       Une valeur de retour de 0 signifie la fin de l'entrée. Si fd_in correspond à un tube, alors cela signifie
       qu'il n'y avait pas de données à transférer et que cela n'aurait pas de sens de bloquer parce qu'il n'y a
       pas d'écrivain connecté à l'extrémité d'écriture du tube.

       En cas d'erreur, splice() renvoie -1 et errno est positionné pour indiquer la cause de l'erreur.

ERREURS

       EAGAIN SPLICE_F_NONBLOCK était indiqué dans flags ou un des descripteurs de fichier a  été  marqué  comme
              non bloquant (O_NONBLOCK), et l'opération pourrait bloquer.

       EBADF  Au  moins  un  des  descripteurs  de  fichier  n'est pas valable, ou n'a pas le mode de lecture ou
              d'écriture approprié.

       EINVAL Le système de fichiers cible ne prend pas en charge l'opération splice().

       EINVAL Le fichier cible est ouvert en mode ajout.

       EINVAL Aucun des descripteurs de fichier ne correspond à un tube.

       EINVAL Une position a été donnée pour un périphérique non adressable (par exemple un tube).

       EINVAL fd_in ou fd_out font référence au même tube.

       ENOMEM Plus assez de mémoire.

       ESPIPE off_in ou off_out est différent de NULL, mais le descripteur de fichier correspondant pointe  vers
              un tube.

STANDARDS

       Linux.

HISTORIQUE

       Linux 2.6.17, glibc 2.5.

       Dans  Linux 2.6.30 et précédents, précisément un des descripteurs de fichier fd_in ou fd_out était requis
       d'être un tube. Depuis Linux 2.6.31, les deux arguments peuvent correspondre à des tubes.

NOTES

       Les trois appels système splice(), vmsplice(2)  et  tee(2)  fournissent  aux  programmes  utilisateur  le
       contrôle  complet  d'un  tampon  arbitraire  du noyau, implémenté côté noyau en utilisant le même type de
       tampons que pour les tubes. Ces appels système assurent les tâches suivantes :

       splice()
              déplace des données depuis le tampon vers un descripteur de fichier arbitraire, ou vice versa,  ou
              bien depuis un tampon vers un autre.

       tee(2) « copie » les données d'un tampon vers un autre.

       vmsplice(2)
              « copie » des données de l'espace utilisateur vers le tampon.

       Bien  qu'il  soit  question  de  copie, les vraies copies sont en général évitées. Le noyau implémente en
       effet le tampon d'un tube comme un ensemble de pointeurs vers des pages de  mémoire  noyau  pouvant  être
       référencées  plusieurs  fois. Le noyau crée des « copies » des pages dans un tampon en créant de nouveaux
       pointeurs (pour le tampon de sortie) pointant vers  les  pages,  et  en  incrémentant  les  compteurs  de
       références des pages : seuls les pointeurs sont copiés, et pas les pages du tampon.

       _FILE_OFFSET_BITS  doit être défini à 64 dans du code qui utilise off_in ou off_out différent de NULL, ou
       qui récupère l'adresse de splice, si le code est destiné à être protable sur des plateformes x86  et  ARM
       32 bits classiques où la taille par défaut de off_t est de 32 bits.

EXEMPLES

       Consultez tee(2).

VOIR AUSSI

       copy_file_range(2), sendfile(2), tee(2), vmsplice(2), pipe(7)

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-Pierre Giraud <jean-pierregiraud@neuf.fr>

       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⟩.