关于零拷贝技术的相关文章,请参考:【Linux编程】大冒险之零拷贝技术探究
splice( )函数
在两个文件描述符之间移动数据,同sendfile( )函数一样,也是零拷贝。
函数原型:
#include <fcntl.h>
ssize_t splice(int fdin, loff_t *offin, int fdout, loff_t *offout, size_t len, unsigned int flags);
参数意义:
fdin参数:待读取数据的文件描述符。
offin参数:指示从输入数据的何处开始读取,为NULL表示从当前位置。如果fdin是一个管道描述符,则offin必须为NULL。
fdout参数:待写入数据的文件描述符。
offout参数:同offin,不过用于输出数据。
len参数:指定移动数据的长度。
flags参数:表示控制数据如何移动,可以为以下值的按位或:
- SPLICE_F_MOVE:按整页内存移动数据,存在bug,自内核2.6.21后,实际上没有效果。
- SPLICE_F_NONBLOCK