.\" -*- coding: UTF-8 -*-
.\" This man page is Copyright (C) 1998 Pawel Krawczyk.
.\"
.\" %%%LICENSE_START(VERBATIM_ONE_PARA)
.\" Permission is granted to distribute possibly modified copies
.\" of this page provided the header is included verbatim,
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\" %%%LICENSE_END
.\"
.\" $Id: sendfile.2,v 1.5 1999/05/18 11:54:11 freitag Exp $
.\" 2000-11-19 bert hubert <ahu@ds9a.nl>: in_fd cannot be socket
.\"
.\" 2004-12-17, mtk
.\"	updated description of in_fd and out_fd for 2.6
.\"	Various wording and formatting changes
.\"
.\" 2005-03-31 Martin Pool <mbp@sourcefrog.net> mmap() improvements
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH sendfile 2 "4 décembre 2022" "Pages du manuel de Linux 6.03" 
.SH NOM
sendfile \- Transfert de données entre descripteurs de fichier
.SH BIBLIOTHÈQUE
Bibliothèque C standard (\fIlibc\fP, \fI\-lc\fP)
.SH SYNOPSIS
.nf
\fB#include <sys/sendfile.h>\fP
.PP
.\" The below is too ugly. Comments about glibc versions belong
.\" in the notes, not in the header.
.\"
.\" .B #include <features.h>
.\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2
.\" .B #include <sys/sendfile.h>
.\" #else
.\" .B #include <sys/types.h>
.\" .B /* No system prototype before glibc 2.1. */
.\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" \
.\"                       offset ", size_t" " count" )
.\" .B #endif
.\"
\fBssize_t sendfile(int\fP\fI out_fd\fP\fB, int\fP\fI in_fd\fP\fB, off_t *_Nullable \fP\fIoffset\fP\fB,\fP
\fB                 size_t\fP\fI count\fP\fB);\fP
.fi
.SH DESCRIPTION
\fBsendfile\fP() copie des données entre deux descripteurs de fichier. Comme la
copie est assurée à l'intérieur du noyau, \fBsendfile\fP() est plus efficace
que la combinaison \fBread\fP(2)/\fBwrite\fP(2) qui exige le transfert des données
entre l'espace noyau et l'espace utilisateur.
.PP
\fIin_fd\fP doit être un descripteur de fichier ouvert en lecture et \fIout_fd\fP
un descripteur ouvert en écriture.
.PP
Si \fIoffset\fP n'est pas NULL, c'est un pointeur sur une variable contenant la
tête de lecture (Ndt\ : file offset) à partir de laquelle \fBsendfile\fP()
commencera la lecture dans \fIin_fd\fP. Lorsque \fBsendfile\fP() se termine, la
variable est remplie avec la position de l'octet immédiatement après le
dernier octet lu. Si \fIoffset\fP n'est pas NULL, \fBsendfile\fP() ne modifie pas
la position actuelle dans le fichier \fIin_fd\fP\ ; autrement, la position
actuelle de la tête de lecture est ajustée pour refléter le nombre d'octets
lus à partir de \fIin_fd\fP.
.PP
Si \fIoffset\fP est NULL, les données sont lues dans \fIin_fd\fP à partir de la
position actuelle de la tête de lecture et celle\-ci sera ajustée par
l'appel.
.PP
L'argument \fIcount\fP est le nombre d'octets à copier entre les descripteurs
de fichiers.
.PP
L'argument \fIin_fd\fP doit correspondre à un fichier prenant en charge les
opérations de type \fBmmap\fP(2) et ne peut donc pas être un socket.
.PP
Avant Linux\ 2.6.33, \fIout_fd\fP doit correspondre à un socket. Depuis
Linux\ 2.6.33, ce peut être n'importe quel fichier. Si c'est un fichier
normal, \fBsendfile\fP() modifie la position de tête de lecture en conséquence.
.SH "VALEUR RENVOYÉE"
Si le transfert a réussi, le nombre d'octets écrits dans \fIout_fd\fP est
renvoyé. Remarquez qu'un appel à \fBsendfile\fP() réussi peut écrire moins
d'octets que demandé, l'appelant doit se préparer à réitérer l'appel en cas
de données non envoyées. Voir aussi les NOTES.
.PP
En cas d'erreur, la valeur de retour est \fB\-1\fP et \fIerrno\fP est définie pour
préciser l'erreur.
.SH ERREURS
.TP 
\fBEAGAIN\fP
L'écriture est non bloquante (attribut \fBO_NONBLOCK\fP du descripteur) et
l'opération devrait bloquer.
.TP 
\fBEBADF\fP
Le fichier d'entrée n'est pas ouvert en lecture ou celui de sortie en
écriture.
.TP 
\fBEFAULT\fP
Un pointeur se trouve en dehors de l'espace d'adressage.
.TP 
\fBEINVAL\fP
Le descripteur n'est pas valable ou est verrouillé, ou une opération de type
\fBmmap\fP(2) n'est pas disponible sur \fIin_fd\fP, ou bien \fIcount\fP est négatif.
.TP 
\fBEINVAL\fP
\fIout_fd\fP a un drapeau \fBO_APPEND\fP positionné. Cela n'est actuellement pas
géré par \fBsendfile\fP().
.TP 
\fBEIO\fP
Erreur pendant la lecture depuis \fIin_fd\fP.
.TP 
\fBENOMEM\fP
Mémoire insuffisante pour lire depuis \fIin_fd\fP.
.TP 
\fBEOVERFLOW\fP
\fIcount\fP est trop grand, l'opération ferait dépasser la taille maximale du
fichier d'entrée ou de sortie.
.TP 
\fBESPIPE\fP
\fIoffset\fP n'est pas NULL mais le fichier d'entrée n'est pas adressable.
.SH VERSIONS
\fBsendfile\fP() est une nouveauté de Linux\ 2.2. Le fichier d'en\-tête
\fI<sys/sendfile.h>\fP est présent depuis la glibc\ 2.1.
.SH STANDARDS
Pas spécifié dans POSIX.1\-2001, ni dans d'autres normes.
.PP
D'autres systèmes UNIX implémentent \fBsendfile\fP() avec d'autres sémantiques,
et d'autres prototypes. Il ne faut pas l'utiliser dans un programme
portable.
.SH NOTES
.\" commit e28cc71572da38a5a12c1cfe4d7032017adccf69
\fBsendfile\fP() transfèrera un maximum de 0x7ffff000 (2\ 147\ 479\ 552) octets et
renvoie le nombre d'octets transférés (cela est vrai tant pour des systèmes
32\ bits que 64\ bits).
.PP
Si vous voulez utiliser \fBsendfile\fP() pour envoyer un fichier au travers
d'un socket TCP, tout en le précédant de données d'en\-tête, voyez l'option
\fBTCP_CORK\fP de \fBtcp\fP(7) pour minimiser le nombre de paquets, et optimiser
les performances.
.PP
Sous Linux\ 2.4 et précédents, \fIout_fd\fP pouvait aussi correspondre à un
fichier ordinaire, cette possibilité a disparu dans la série 2.6.3 du noyau
Linux, puis rétablie dans Linux\ 2.6.33.
.PP
L'appel système original de Linux \fBsendfile\fP() ne permettait pas de gérer
les positions dans les gros fichiers. En conséquence, Linux\ 2.4 a ajouté
\fBsendfile64\fP(), avec un type élargi pour le paramètre \fIoffset\fP. La
fonction \fBsendfile\fP() de la glibc qui l'encapsule gère de manière
transparente ces différences entre noyaux.
.PP
Les applications peuvent se rabattre sur \fBread\fP(2) et \fBwrite\fP(2) au cas où
\fBsendfile\fP() échoue avec \fBEINVAL\fP ou \fBENOSYS\fP.
.PP
Si \fIout_fd\fP renvoie à un socket ou un tube qui ne gère pas la copie, les
appelants doivent s'assurer que les parties transférées du fichier auquel
renvoie \fIin_fd\fP ne soient pas modifiées jusqu'à ce que le lecteur de
l'autre côté de \fIout_fd\fP n'ait consommé les données transférées.
.PP
L'appel \fBsplice\fP(2) spécifique à Linux gère le transfert de données entre
des descripteurs de fichiers arbitraires, pourvu que l'un d'eux (ou les
deux) soit un tube.
.SH "VOIR AUSSI"
\fBcopy_file_range\fP(2), \fBmmap\fP(2), \fBopen\fP(2), \fBsocket\fP(2), \fBsplice\fP(2)
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess <https://www.blaess.fr/christophe/>,
Stéphan Rafin <stephan.rafin@laposte.net>,
Thierry Vignaud <tvignaud@mandriva.com>,
François Micaux,
Alain Portal <aportal@univ-montp2.fr>,
Jean-Philippe Guérard <fevrier@tigreraye.org>,
Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>,
Julien Cristau <jcristau@debian.org>,
Thomas Huriaux <thomas.huriaux@gmail.com>,
Nicolas François <nicolas.francois@centraliens.net>,
Florentin Duneau <fduneau@gmail.com>,
Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,
Denis Barbier <barbier@debian.org>,
David Prévot <david@tilapin.org>
et
Jean-Philippe MENGUAL <jpmengual@debian.org>
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et 
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel, 
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .