Loading

NOM

       sendfile,  sendfile64 - 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);

       ssize_t sendfile64(int out_fd, int in_fd, off64_t *offset, size_t count
                         );

       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  courante  dans  le fichier in_fd ; autrement, la position
       courante de la tête de lecture est  ajustée  pour  refléter  le  nombre
       d’octets lus à partir de in_fd.

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

       Actuellement (Linux  2.6.9),  in_fd  doit  correspondre  à  un  fichier
       supportant les opérations de type mmap(2), et ne peut donc pas être une
       socket. En revanche, out_fd doit correspondre à une socket.

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

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 correspondre à un fichier
       ordinaire,  et  sendfile()  modifiait  la  position  courante  dans  ce
       fichier.

VOIR AUSSI

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

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.23 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

       Cette page de manuel a été traduite  et  mise  à  jour  par  Christophe
       Blaess  <http://www.blaess.fr/christophe/> entre 1996 et 2003, puis par
       Alain Portal <aportal AT univ-montp2 DOT fr> jusqu’en 2006, et  mise  à
       disposition sur http://manpagesfr.free.fr/.

       Révisé pour ce site par l'équipe man-linux-magique.net (Octobre 2010).

       Les mises à jour et corrections de la version présente dans Debian sont
       directement gérées par Julien Cristau <jcristau@debian.org> et l’équipe
       francophone de traduction de Debian.

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