Linux零拷贝函数SendFile应用
项目需要,使用linux零拷贝函数SendFile来传输文件。 传统的read/write方式进行网络文件传输的方式,要经过四次copy操作: 硬盘 >> kernel buffer >> user buffer >> kernel socket buffer >> 协议栈 而sendfile() 就是用来简化上面步骤提升性能的。sendfile() 不但能减少切换次数而且还能减少拷贝次数。 硬盘 >> kernel buffer (快速拷贝到kernel socket buffer) >> 协议栈 更加具体的资料请参考: linux的sendfile()系统调用 、 Linux kernel 的 sendfile 是如何提高性能的 这里提供一种SendFile的具体应用,供大家使用SendFile时参考。程序主要实现了文件下载: client与server建立tcp连接。 client告知server,我要下载哪个文件。 server将文件传输给client。 其中实现了两种server,一种是通过SendFile发送文件,一种是通过普通的Socket方式发送文件。具体代码如下: client.cpp:client端,文件接收端 //Client端 #include <arpa/inet.h> #include <netinet/in.h> #include <sys/types