Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
sendfile - Transfert de donnees 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 donnees entre deux descripteurs de fichier. Comme
la copie est assuree a l'interieur du noyau, sendfile() ne perd pas de
temps a transferer des donnees entre l'espace noyau et l'espace
utilisateur, et est donc plus efficace que la combinaison
read(2)/write(2).
in_fd doit etre un descripteur de fichier ouvert en lecture, et out_fd
un descripteur ouvert en ecriture.
Si offset n'est pas NULL, c'est un pointeur sur une variable contenant
la tete de lecture (Ndt : file offset) a partir de laquelle sendfile()
commencera la lecture dans in_fd. Lorsque sendfile() se termine, la
variable est remplie avec la position de l'octet immediatement apres 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 tete de lecture est ajustee pour refleter le nombre
d'octets lus a partir de in_fd.
Si offset est NULL, les donnees sont lues dans in_fd a partir de la
position courante de la tete de lecture, et celle-ci sera ajustee par
l'appel.
L'argument count est le nombre d'octets a copier entre les descripteurs
de fichiers.
Actuellement (Linux 2.6.9), in_fd doit correspondre a un fichier
supportant les operations de type mmap(2), et ne peut donc pas etre une
socket. En revanche, out_fd doit correspondre a une socket.
Les applications peuvent se rabattre sur read(2)/write(2) au cas ou
sendfile() echoue avec EINVAL ou ENOSYS.
VALEUR RENVOY'EE
Si le transfert a reussi, le nombre d'octets ecrits dans out_fd est
renvoye. Sinon, sendfile() renvoie -1, et errno est configure.
ERREURS
EAGAIN L'ecriture est non bloquante (attribut O_NONBLOCK du
descripteur), et l'operation devrait bloquer.
EBADF Le fichier d'entree n'est pas ouvert en lecture, ou celui de
sortie en ecriture.
EFAULT Un pointeur se trouve en dehors de l'espace d'adressage.
EINVAL Le descripteur est invalide ou verrouille, ou une operation de
type mmap(2) n'est pas disponible sur in_fd.
EIO Erreur pendant la lecture depuis in_fd.
ENOMEM Memoire insuffisante pour lire depuis in_fd.
VERSIONS
L'appel systeme sendfile() est une nouveaute de Linux 2.2. Le fichier
d'en-tete <sys/sendfile.h> est present depuis la glibc 2.1.
CONFORMIT'E
Pas specifie dans POSIX.1-2001, ni dans d'autres normes.
D'autres systemes Unix implementent sendfile() avec d'autres
semantiques, 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 precedant de donnees d'en-tete, voyez
l'option TCP_CORK de tcp(7) pour minimiser le nombre de paquets, et
optimiser les performances.
Sous Linux 2.4 et precedents, out_fd pouvait correspondre a 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.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/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). 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> >>.
Linux 15 fevrier 2010 SENDFILE(2)