.\" 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 : in_fd cannot be socket .\" .\" Translated on Sun Jun 27 1999 by Juan Piernas .\" Translation revised Sat Jan 29 2000 by Juan Piernas .\" .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 .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 .\" .br .\" .B #if (__GLIBC__==2 && __GLIBC_MINOR__>=1) || __GLIBC__>2 .\" .br .\" .B #include .\" .br .\" #else .\" .br .\" .B #include .\" .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 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)