sendfile

TriggerTek Logo
abcdefghijklmnopqrstuvwxyz_
SENDFILE(2)		  Linux Programmer’s Manual		  SENDFILE(2)



NAME
       sendfile - transfer data between file descriptors

SYNOPSIS
       #include <sys/sendfile.h>

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

DESCRIPTION
       This call copies data between one file descriptor and another.  Either
       or both of these file descriptors may  refer  to	 a  socket  (but  see
       below).	 in_fd	should	be  a  file descriptor opened for reading and
       out_fd should be a descriptor opened for writing.  offset is a pointer
       to a variable holding the input file pointer position from which send-
       file() will start reading data.	When sendfile() returns,  this	vari-
       able  will  be  set  to the offset of the byte following the last byte
       that was read.  count is the number of  bytes  to  copy	between	 file
       descriptors.

       Because	this  copying  is done within the kernel, sendfile() does not
       need to spend time transferring data to and from user space.


NOTES
       Sendfile does not modify the current file pointer of in_fd,  but	 does
       for out_fd.

       If  you	plan  to  use sendfile for sending files to a TCP socket, but
       need to send some header data in front of the  file  contents,  please
       see  the	 TCP_CORK  option in tcp(7) to minimize the number of packets
       and to tune performance.

       Presently the descriptor from which data is read cannot correspond  to
       a  socket,  it  must  correspond	 to a file which supports mmap()-like
       operations.


RETURN VALUE
       If the transfer was successful, the number of bytes written to  out_fd
       is  returned.   On  error,  -1 is returned, and errno is set appropri-
       ately.


ERRORS
       EBADF  The input file was not opened for reading or  the	 output	 file
	      was not opened for writing.

       EAGAIN Non-blocking  I/O	 has  been  selected using O_NONBLOCK and the
	      write would block.

       EINVAL Descriptor is not valid or locked.

       ENOMEM Insufficient memory to read from in_fd.

       EIO    Unspecified error while reading from in_fd.

       EFAULT Bad address.

VERSIONS
       sendfile is a new feature in Linux 2.2.	The include  file  <sys/send-
       file.h> is present since glibc2.1.

       Other  Unixes  often  implement	sendfile with different semantics and
       prototypes. It should not be used in portable programs.

SEE ALSO
       socket(2), open(2)



Linux Man Page			  1998-12-01			  SENDFILE(2)