sendfile   Début   Suivant   Sommaire   Préc.page.lue   Accueil
Section: Manuel du programmeur Linux (2)
Updated: 17 décembre 2004
Sommaire  



NOM   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
sendfile - Transfert de données entre descripteurs de fichiers  



SYNOPSIS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
#include <sys/sendfile.h>

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




DESCRIPTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
sendfile() copie des données entre un descripteur de fichier et un autre. Parce que cette copie est effectuée dans le noyau, sendfile() est plus efficace que la combinaison read(2) et write(2) qui nécessite le transfert des données vers et de l'espace utilisateur. Le descripteur de fichier in_fd doit être ouvert en lecture, et out_fd 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 qui supporte les opérations de type mmap(2) (c'est-à-dire qu'il ne peut pas être une socket) ; et out_fd doit faire référence à une socket.

Les applications peuvent souhaiter se replier sur read(2)/write(2) dans le cas où sendfile() échoue avec les erreurs EINVAL ou ENOSYS.  




VALEUR RENVOYÉE   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
EAGAIN
L'entrée-sortie non-bloquante a été choisie avec O_NONBLOCK et l'écriture pourrait bloquer.
EBADF
Le fichier d'entrée n'est pas ouvert en lecture, ou celui de sortie en écriture.
EFAULT
Mauvaise adresse.
EINVAL
Le descripteur est invalide ou verrouillé, ou une opération de type mmap(2) n'est pas disponible pour in_fd.
ENOMEM
Mémoire insuffisante pour lire depuis in_fd.
EIO
Erreur d'entrée-sortie pendant la lecture depuis in_fd.
 



VERSIONS   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
L'appel système sendfile() est une nouveauté de Linux 2.2. Le fichier d'entête <sys/sendfile.h> est présent depuis la glibc 2.1.  



CONFORMITÉ   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
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   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
L'appel sendfile() ne modifie pas la position courante dans le fichier in_fd, mais modifie celle de out_fd.

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'entête, voyez l'option TCP_CORK de tcp(7) pour minimiser le nombre de paquets, et optimiser les performances.

Dans Linux 2.4 et précédents, out_fd pouvait faire référence à un fichier régulier et sendfile() modifiait la position de la tête de lecture sur ce fichier.  




VOIR AUSSI   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil
mmap(2), open(2), socket(2), splice(2)  



TRADUCTION   Début   Précédent   Suivant   Sommaire   Préc.page.lue   Accueil

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 4 janvier 2000 et révisée le 8 janvier 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 2 sendfile ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.


 



Sommaire   Début   Suivant   Sommaire   Préc.page.lue   Accueil
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
VERSIONS
CONFORMITÉ
NOTES
VOIR AUSSI
TRADUCTION

Table des mots clés   Début   Suivant   Sommaire   Préc.page.lue   Accueil
EAGAINERREURS
EBADFERREURS
EFAULTERREURS
EINVALERREURS
EIOERREURS
ENOMEMERREURS



Ce document a été créé par man2html suivi de man2html.pl, le 17/10/2008 17:51:21, en utilisant les pages de 'man'.
 

Valid HTML 4.01 Transitional