关于零拷贝技术的相关文章,请参考:【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

本文详细介绍了Linux编程中实现零拷贝的splice()和tee()函数,包括它们的功能、函数原型、参数含义、使用场景及返回值。这两个函数在处理管道数据时能避免数据在用户空间和内核空间间的多次拷贝,提高效率。通过示例代码展示了如何使用这两个函数。
最低0.47元/天 解锁文章
1328

被折叠的 条评论
为什么被折叠?



