Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       splice - Copier des donnees vers/depuis un tube

SYNOPSIS

       #define _GNU_SOURCE
       #include <fcntl.h>

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

DESCRIPTION

       splice()  deplace  des  donnees entre deux descripteurs de fichier sans
       les copier entre l'espace d'adressage noyau  et  l'espace  utilisateur.
       Jusqu'a len octets de donnees sont transferes du descripteur de fichier
       fd_in au descripteur de fichier fd_out, ou l'un des  descripteurs  doit
       correspondre a un tube.

       Si fd_in correspond a un tube, alors off_in doit etre NULL. Si fd_in ne
       correspond pas a un tube et off_in est NULL, alors les octets sont  lus
       depuis  fd_in  a  partir  de la position courante dans le fichier et la
       position courante est mise a jour de  facon  appropriee.  Si  fd_in  ne
       correspond  pas  a  un tube et off_in n'est pas NULL, alors off_in doit
       pointer vers un tampon qui indique la position a partir de laquelle les
       donnees seront lues dans fd_in ; dans ce cas, la position courante dans
       fd_in n'est pas modifiee. Il en va de meme pour fd_out et off_out.

       L'argument flags est constitue par un OU binaire entre une ou plusieurs
       des valeurs suivantes :

       SPLICE_F_MOVE      Essayer de deplacer des pages au lieu de les copier.
                          Ceci  n'est  qu'un  conseil  au  noyau :  des  pages
                          peuvent  quand meme etre copiees si le noyau ne peut
                          pas deplacer les pages du tube, ou si les tampons du
                          tube  ne  correspondent pas a des pages entieres. La
                          premiere implementation de cet  attribut  comportait
                          un  bogue :  ainsi,  a  partir de Linux 2.6.21 il ne
                          fait rien (mais est toujours permis dans un appel  a
                          splice()) ;   dans   le  futur,  une  implementation
                          correcte pourra etre restauree.

       SPLICE_F_NONBLOCK  Ne pas bloquer sur les  entrees-sorties.  Cela  rend
                          les operations de splice sur le tube non bloquantes,
                          mais splice() peut tout  de  meme  bloquer  car  les
                          descripteurs   de  fichier  sur  lesquels  il  opere
                          peuvent   bloquer   (sauf   s'ils   ont   l'attribut
                          O_NONBLOCK).

       SPLICE_F_MORE      Des  donnees  supplementaires  seront  copiees  plus
                          tard.  C'est  un   indice   utile   lorsque   fd_out
                          correspond  a  une 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'EE

       En cas de reussite,  splice()  renvoie  le  nombre  d'octets  raccordes
       depuis  ou  vers  le tube. Une valeur de retour de 0 signifie qu'il n'y
       avait pas de donnees a transferer, et qu'il serait insense de  bloquer,
       parce  qu'il  n'y  a  pas  d'ecrivain  connecte  a l'autre bout du tube
       correspondant a fd_in.

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

ERREURS

       EBADF  Au moins un des descripteurs de fichier n'est pas valide, ou n'a
              pas le mode de lecture ou d'ecriture approprie.

       EINVAL Le systeme de fichiers cible ne gere pas le splice ; le  fichier
              cible  est  ouvert  en  mode  ajout ;  aucun des descripteurs de
              fichiers ne correspond a un tube ; ou bien une  position  a  ete
              indiquee  pour  un  peripherique  sur  lequel le deplacement est
              impossible.

       ENOMEM Plus de memoire disponible.

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

VERSIONS

       L'appel systeme splice() est apparu dans Linux 2.6.17.

CONFORMIT'E

       Cet appel systeme est specifique a Linux.

NOTES

       Les  trois  appels  systeme splice(), vmsplice(2) et tee(2) fournissent
       aux programmes utilisateur le controle complet d'un  tampon  arbitraire
       du  noyau,  implemente  cote noyau en utilisant le meme type de tampons
       que pour les tubes. Ces appels systeme assurent les taches suivantes :

       splice()    deplace des donnees depuis le tampon vers un descripteur de
                   fichier arbitraire, ou vice versa, ou bien depuis un tampon
                   vers un autre.

       tee(2)      << copie >> les donnees d'un tampon vers un autre.

       vmsplice(2) << copie >> des donnees de  l'espace  utilisateur  vers  le
                   tampon.

       Bien  qu'il  soit  question de copie, les vraies copies sont en general
       evitees. Le noyau implemente en effet le  tampon  d'un  tube  comme  un
       ensemble  de  pointeurs  vers  des  pages de memoire noyau pouvant etre
       referencees plusieurs fois. Le noyau cree des  << copies >>  des  pages
       dans  un  tampon  en  creant  de  nouveaux pointeurs (pour le tampon de
       sortie) pointant vers les pages, et en incrementant  les  compteurs  de
       references  des  pages :  seuls  les  pointeurs sont copies, et pas les
       pages du tampon.

EXEMPLE

       Consultez tee(2).

VOIR AUSSI

       sendfile(2), tee(2), vmsplice(2), feature_test_macros(7)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Julien   Cristau   et   l'equipe   francophone   de    traduction    de
       Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.