sendfile函数

sendfile函数

sendfile函数在两个文件描述符之间直接传递数据(完全在内核中操作),从而避免了内核缓冲区和用户缓冲区之间的数据拷贝。

1
2
#include <sys/sendfile.h>
ssize_t sendfile(int out_fd,int in_fd, off_t * offset,size_t count);

参数介绍

in_fd参数是待读出内容的文件描述符,out_fd参数是待写入内容的文件描述符。offset参数指定从读入文件流哪个位置开始读,如果是空,则使用读入文件流默认的起始位置。count参数指定在文件描述符in_fd和out_fd之间传输的字节数。

返回值

成功,则返回传输的字节数,失败,则返回-1,并设置errno。

注意:in_fd必须是一个支持类似mmap函数的文件描述符,即它必须指向真实的文件,不能是socket和管道。而out_fd必须是一个socket。