Hello Alan, > I'm wondering if gnulib is scheduled to provide sendfile compatibility > using lseek/read/write ? > > I know sendfile is a kernel routine, and I'm unsure of whether the file > pointer needs restoration after the operation or not in a user-space > replacement.
If gnulib implements such a function, I would suggest to *not* call it 'sendfile' or 'send_file', because various systems implement different functions with these names: glibc: #include <sys/sendfile.h> ssize_t sendfile (int out_fd, int in_fd, off_t *offset, size_t count); Doc: <http://www.kernel.org/doc/man-pages/online/pages/man2/sendfile.2.html> MacOS X: #include <sys/socket.h> int sendfile(int, int, off_t, off_t *, struct sf_hdtr *, int); Doc: <http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man2/sendfile.2.html> FreeBSD: #include <sys/socket.h> int sendfile(int, int, off_t, size_t, struct sf_hdtr *, off_t *, int); Doc: <http://www.freebsd.org/cgi/man.cgi?query=sendfile&sektion=2> AIX: #include <sys/socket.h> ssize_t send_file(int *, struct sf_parms *, uint_t); Doc: <https://publib.boulder.ibm.com/infocenter/aix/v6r1/index.jsp?topic=/com.ibm.aix.commtechref/doc/commtrf2/send_file.htm> HP-UX: #include <sys/socket.h> sbsize_t sendfile (int, int, off_t, bsize_t, const struct iovec *, int); Doc: <http://h21007.www2.hp.com/portal/download/files/unprot/LPK/LinuxPortGuide.pdf> OSF/1: #include <net/proto_uipc.h> int sendfile (struct proc *, void *, long *); Note that the APR (Apache Portable Runtime) library contains a portable wrapper around each of these methods. See the files apr-1.4.2/network_io/unix/sendrecv.c apr-1.4.2/network_io/win32/sendrecv.c Of course, this is not an invitation to steal code from there ;-) Bruno
