Back to index

glibc  2.9
sendfile64.c File Reference
#include <sys/sendfile.h>
#include <hurd.h>
#include <hurd/fd.h>
#include <sys/mman.h>

Go to the source code of this file.


ssize_t sendfile64 (int out_fd, int in_fd, off64_t *offset, size_t count)

Function Documentation

ssize_t sendfile64 ( int  out_fd,
int  in_fd,
off64_t *  offset,
size_t  count 

Definition at line 28 of file sendfile64.c.

  /* We just do a vanilla io_read followed by a vanilla io_write here.
     In theory the IN_FD filesystem can return us out-of-line data that
     we then send out-of-line to the OUT_FD filesystem and no copying
     takes place until those pages need to be flushed or packaged by
     that filesystem (e.g. packetized by a network socket).  However,
     we momentarily consume COUNT bytes of our local address space,
     which might blow if it's huge or address space is real tight.  */

  char *data = 0;
  size_t datalen = 0;
  error_t err = HURD_DPORT_USE (in_fd,
                            __io_read (port, &data, &datalen,
                                      offset ? *offset : (off_t) -1,
  if (err == 0)
      size_t nwrote;
      if (datalen == 0)
       return 0;
      err = HURD_DPORT_USE (out_fd, __io_write (port, data, datalen,
                                          (off_t) -1, &nwrote));
      munmap (data, datalen);
      if (err == 0)
         if (offset)
           *offset += datalen;
         return nwrote;
  return __hurd_fail (err);

Here is the call graph for this function: