linux网络编程九:splice函数,高效的零拷贝
来源:互联网 发布:南昌航空大学网络课程 编辑:程序博客网 时间:2024/04/27 22:16
转自: http://blog.csdn.net/jasonliuvip/article/details/22600569
最近在看《linux高性能服务器编程》,在此做个日记,以激励自己,同时分享于有需要的朋友。
1. splice函数
splice用于在两个文件描述符之间移动数据, 也是零拷贝。
fd_in参数是待输入描述符。如果它是一个管道文件描述符,则off_in必须设置为NULL;否则off_in表示从输入数据流的何处开始读取,此时若为NULL,则从输入数据流的当前偏移位置读入。
fd_out/off_out与上述相同,不过是用于输出。
len参数指定移动数据的长度。
flags参数则控制数据如何移动:
- SPLICE_F_NONBLOCK:splice 操作不会被阻塞。然而,如果文件描述符没有被设置为不可被阻塞方式的 I/O ,那么调用 splice 有可能仍然被阻塞。
- SPLICE_F_MORE:告知操作系统内核下一个 splice 系统调用将会有更多的数据传来。
- SPLICE_F_MOVE:如果输出是文件,这个值则会使得操作系统内核尝试从输入管道缓冲区直接将数据读入到输出地址空间,这个数据传输过程没有任何数据拷贝操作发生。
2. 使用splice时, fd_in和fd_out中必须至少有一个是管道文件描述符。
调用成功时返回移动的字节数量;它可能返回0,表示没有数据需要移动,这通常发生在从管道中读数据时而该管道没有被写入的时候。
失败时返回-1,并设置errno
3. 代码:通过splice将客户端的内容读入到管道中, 再从管道中读出到客户端,从而实现高效简单的回显服务。整个过程未执行recv/send,因此也未涉及用户空间到内核空间的数据拷贝。
阅读全文
0 0
- linux网络编程九:splice函数,高效的零拷贝
- linux网络编程九:splice函数,高效的零拷贝
- splice函数,高效的零拷贝
- 【Linux编程】零拷贝之splice( )函数和tee( )函数
- linux网络编程八:高效的sendfile,实现零拷贝
- 服务器编程——函数splice实现零拷贝使用解释
- 【Linux编程】零拷贝之sendfile( )函数
- 零拷贝之splice( )函数和tee( )函数
- linux的零复制splice、tee
- Linux网络编程--sendfile零拷贝高效率发送文件
- Linux网络编程--sendfile零拷贝高效率发送文件
- Linux网络编程--sendfile零拷贝高效率发送文件
- Linux网络编程--sendfile零拷贝高效率发送文件
- Linux "零拷贝" sendfile函数
- 通过零拷贝实现高效的数据传输
- 使用splice实现零拷贝复制文件
- 使用splice实现零拷贝复制文件
- linux网络编程十:用tee在管道间复制数据,进行零拷贝操作
- 台式机扩展显示器设置分屏
- Javaweb学习路线
- linux 文本对比
- IE访问Java接口直接下载文件
- struts2下载中文名称的文件
- linux网络编程九:splice函数,高效的零拷贝
- Web基础之开启AJAX的学习之旅
- 关于onclick传递参数
- Java 格式化输出 printf
- web兼容性 CSS !important 到 CSS hack
- Windows socket 之WSAAsyncSelect模型
- CONDITIONAL EXECUTION
- Linux常用命令操作--个人笔记
- React学习(二)JSX语法