1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
.\" This man page is Copyright (C) 1998 Pawel Krawczyk.
.\" 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.
.\" $Id: sendfile.2,v 1.3 2005/05/30 07:34:00 juan.piernas Exp $
.\" 2000-11-19 bert hubert <ahu@ds9a.nl>: in_fd cannot be socket
.\"
.\" Translated on Sun Jun 27 1999 by Juan Piernas <piernas@ditec.um.es>
.\" Translation revised Sat Jan 29 2000 by Juan Piernas <piernas@ditec.um.es>
.\"
.TH SENDFILE 2 "1 diciembre 1998" "Página man de Linux" "Manual del Programador de Linux"
.SH NOMBRE
sendfile \- transfiere datos entre descriptores de fichero
.SH SINOPSIS
..B #include <sys/sendfile.h>
.sp
.BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" offset ", size_t" " count" );
.\" Lo de abajo queda demasiado feo. Los comentarios sobre las versiones de glibc
.\" deben estar en las observaciones, no en la cabecera.
.\"
.\" .B #include <features.h>
.\" .br
.\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2
.\" .br
.\" .B #include <sys/sendfile.h>
.\" .br
.\" #else
.\" .br
.\" .B #include <sys/types.h>
.\" .br
.\" .B /* No system prototype before glibc 2.1. */
.\" .br
.\" .BI "ssize_t sendfile(int" " out_fd" ", int" " in_fd" ", off_t *" offset ", size_t" " count" )
.\" .br
.\" .B #endif
.\"
.SH DESCRIPCIÓN
Esta llamada copia datos entre un descriptor de fichero y otro. Cualquiera
de los dos descriptores de fichero o los dos pueden referirse a un conector
(vea más abajo).
.I in_fd
debe ser un descriptor de fichero abierto para lectura y
.I out_fd
debe ser un descriptor abierto para escritura.
.I offset
es un puntero a una variable que contiene la posición del puntero del
fichero de entrada desde la que
.BR sendfile ()
empezará a leer datos. Cuando
.BR sendfile ()
regrese, a esta variable se le
asignará la posición del byte siguiente al último byte que se ha leído.
.I count
es la cantidad de bytes a copiar entre los descriptores de fichero.
Puesto que esta copia se lleva a cabo dentro del núcleo,
.BR sendfile ()
no necesita emplear tiempo en transferir datos a y
desde el espacio de usuario.
.SH OBSERVACIONES
Sendfile no modifica el puntero de fichero actual de
.IR in_fd ,
pero sí lo hace para
.IR out_fd .
Si planea usar sendfile para enviar ficheros a un conector TCP, pero
necesita enviar algunos datos de cabecera delante de los contenidos del
fichero, por favor vea la opción
.B TCP_CORK
en
.BR tcp (7)
para minimizar el número de paquetes y ajustar el rendimiento.
Actualmente, el descriptor desde el que se lee no puede
corresponder a un conector, debe corresponder con un fichero
que soporte operaciones del tipo mmap().
.SH "VALOR DEVUELTO"
Si la transferencia ha tenido éxito, se devuelve el número de bytes escritos
en
.IR out_fd .
En caso de error, se devuelve \-1 y se asigna a
.I errno
un valor apropiado.
.SH ERRORES
.TP
.B EBADF
El fichero de entrada no ha sido abierto para lectura o el fichero de salida
no ha sido abierto para escritura.
.TP
.B EINVAL
Descriptor inválido o bloqueado.
.\" These two are from do_generic_file_read() in filemap.c
.TP
.B ENOMEM
No hay memoria suficiente para leer de
.IR in_fd .
.TP
.B EIO
Se ha producido un error indeterminado al leer de
.IR in_fd .
.SH VERSIONES
.B sendfile
es una nueva característica de la versión 2.2 de Linux.
El fichero de cabecera <sys/sendfile.h> está presente desde glibc 2.1.
Otros Unix normalmente implementan
.B sendfile
con otras semánticas y prototipos. No debería usarse en programas
transportables.
.SH "VÉASE TAMBIÉN"
.BR socket (2),
.BR open (2)
|