Provided by: manpages-fr-dev_2.45.1-1_all bug
 

NOM

        sendfile - Transfert de données entre descripteurs de fichiers
 

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 fichiers. 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 util‐
        isateur, 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  sup‐
        portant  les  opérations  de  type mmap(), 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.
 

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.
        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 descrip‐
               teur), 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() n’est pas disponible sur in_fd.
 
        EIO    Erreur pendant la lecture depuis in_fd.
 
        ENOMEM Mémoire insuffisante pour lire depuis in_fd.
 

HISTORIQUE

        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éman‐
        tiques, et d’autres prototypes. Il ne faut pas l’utiliser dans un  pro‐
        gramme portable.
        open(2), mmap(2), socket(2), splice(2)
 

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