Provided by: manpages-fr-dev_3.57d1p1-1_all bug

NOM

       sendfile - Transfert de données entre descripteurs de fichier

SYNOPSIS

       #include <sys/sendfile.h>

       ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

DESCRIPTION

       sendfile()  copie  des  données  entre  deux  descripteurs  de fichier. Comme la copie est
       assurée à l'intérieur du noyau, sendfile() ne perd pas de temps à transférer  des  données
       entre l'espace noyau et l'espace utilisateur, et est donc plus efficace que la combinaison
       read(2)/write(2).

       in_fd doit être un descripteur de fichier ouvert en  lecture,  et  out_fd  un  descripteur
       ouvert en écriture.

       Si  offset n'est pas NULL, c'est un pointeur sur une variable contenant la tête de lecture
       (Ndt : file offset) à partir de laquelle sendfile()  commencera  la  lecture  dans  in_fd.
       Lorsque  sendfile()  se  termine,  la  variable  est  remplie  avec la position de l'octet
       immédiatement après le dernier octet lu. Si offset n'est pas NULL, sendfile()  ne  modifie
       pas  la  position  actuelle  dans le fichier in_fd ; autrement, la position actuelle de la
       tête de lecture est ajustée pour refléter le nombre d'octets lus à partir de in_fd.

       Si offset est NULL, les données sont lues dans in_fd à partir de la position  actuelle  de
       la tête de lecture, et celle-ci sera ajustée par l'appel.

       L'argument count est le nombre d'octets à copier entre les descripteurs de fichiers.

       L'argument  in_fd  doit correspondre à un fichier prenant en charge les opérations de type
       mmap(2), et ne peut donc pas être une socket.

       Jusqu'à la version 2.6.33 de Linux, out_fd doit  correspondre  à  une  socket.  Depuis  la
       version 2.6.33  de Linux, ce peut être n'importe quel fichier. Si c'est un fichier normal,
       sendfile() modifie la position de tête de lecture en conséquence.

VALEUR RENVOYÉE

       Si le transfert a réussi, le nombre  d'octets  écrits  dans  out_fd  est  renvoyé.  Sinon,
       sendfile() renvoie -1, et errno est configuré.

ERREURS

       EAGAIN L'écriture  est  non bloquante (attribut O_NONBLOCK du descripteur), et l'opération
              devrait bloquer.

       EBADF  Le fichier d'entrée n'est pas ouvert en lecture, ou celui de sortie en écriture.

       EFAULT Un pointeur se trouve en dehors de l'espace d'adressage.

       EINVAL Le descripteur est invalide ou verrouillé, ou une opération de type  mmap(2)  n'est
              pas disponible sur in_fd.

       EIO    Erreur pendant la lecture depuis in_fd.

       ENOMEM Mémoire insuffisante pour lire depuis in_fd.

VERSIONS

       L'appel  système  sendfile()  est  une  nouveauté  de  Linux  2.2.  Le  fichier  d'en-tête
       <sys/sendfile.h> est présent depuis la glibc 2.1.

CONFORMITÉ

       Pas spécifié dans POSIX.1-2001, ni dans d'autres normes.

       D'autres systèmes UNIX implémentent sendfile()  avec  d'autres  sémantiques,  et  d'autres
       prototypes. Il ne faut pas l'utiliser dans un programme portable.

NOTES

       Si  vous  voulez  utiliser sendfile() pour envoyer un fichier au travers d'une socket TCP,
       tout en le précédant  de  données  d'en-tête,  voyez  l'option  TCP_CORK  de  tcp(7)  pour
       minimiser le nombre de paquets, et optimiser les performances.

       Sous Linux 2.4 et précédents, out_fd pouvait aussi correspondre à un fichier ordinaire, et
       sendfile() modifiait la position actuelle dans ce fichier.

       L'appel système sendfile() original de Linux ne permettait pas de gérer les positions dans
       les  gros  fichiers.  En conséquence, Linux 2.4 a ajouté sendfile64(), avec un type élargi
       pour le paramètre offset. La fonction sendfile() de  la  glibc  qui  l'encapsule  gère  de
       manière transparente ces différences entre noyaux.

       Les applications peuvent se rabattre sur read(2)/write(2) au cas où sendfile() échoue avec
       EINVAL ou ENOSYS.

       L'appel splice(2)  spécifique  à  Linux  gère  le  transfert  de  données  entre  fichiers
       arbitraires (par exemple entre deux sockets).

VOIR AUSSI

       mmap(2), open(2), socket(2), splice(2)

COLOPHON

       Cette  page  fait partie de la publication 3.57 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

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

       Christophe    Blaess    <http://www.blaess.fr/christophe/>   (1996-2003),   Alain   Portal
       <http://manpagesfr.free.fr/>  (2003-2006).  Julien  Cristau  et  l'équipe  francophone  de
       traduction de Debian (2006-2009).

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

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».