SENDFILE
Section: Manuel du programmeur Linux (2) Updated: 18 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
NOTES
VALEUR RENVOYÉE
ERREURS
VERSIONS
VOIR AUSSI
TRADUCTION
NOM
sendfile - Transfert de données entre descripteurs de fichiers.
SYNOPSIS
#include <sys/sendfile.h>
size_t sendfile(int out_fd, int in_fd, off_t * offset, size_t count);
DESCRIPTION
Cet appel-système copie des données entre un descripteur de fichier et
un autre. L'un ou l'autre de ces descripteurs peuvent être une socket
(voir plus bas). Le descripteur
in_fd
doit être ouvert en lecture, et
out_fd
en écriture.
Le pointeur
offset
doit correspondre à une variable contenant la position dans le fichier
d'entrée à partir de laquelle
sendfile()
commencera la lecture. Lorsque la routine se termine, la variable est
remplie avec la position de l'octet immédiatement après le dernier octet
lu.
L'argument
count
est le nombre d'octets à copier entre les 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 utilisateur.
NOTES
L'appel
sendfile()
ne modifie pas la position courante dans le fichier
in_fd,
mais modifie celle de
out_fd.
Si vous voulez utiliser senbdfile() 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.
Actuellement, le descripteur depuis lequel les données sont lues ne peut
pas être une socket, il doit s'agir d'un fichier supportant les opérations
de type mmap().
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
- EBADF
-
Le fichier d'entrée n'est pas ouvert en lecture, ou celui de sortie en écriture.
- EINVAL
-
Le descripteur est invalide ou verrouillé.
- ENOMEM
-
Mémoire insuffisante pour lire depuis
in_fd.
- EIO
-
Erreur d'entrée-sortie pendant la lecture 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.
Les autres Unix implémentent sendfile() avec d'autres sémantiques, et d'autres
prototypes. Il ne faut pas l'utiliser dans un programme portable.
VOIR AUSSI
TRADUCTION
Christophe Blaess, 1996-2003.
|