linux write和sendfile系统调用之间的差异

Jos*_*siP 3 sockets linux sendfile

我编程webserver(C),它应该发送大文件.我的问题是:两个系统调用的主要区别是什么:write和sendfile.是否sendfile取决于套接字系统缓冲区的大小?我注意到write经常写的少于我要求的.

例如,如果对一个文件有很多请求:我应该打开它,复制到内存并使用write,或者我可以sendfile为每个客户端做什么?

提前感谢所有答案.

Dan*_*uţă 6

请阅读sendfile(2).

sendfile()复制一个文件描述符和另一个文件描述符 因为这种复制是在内核中完成的,sendfile()所以比read(2)和write(2)的组合更有效,这需要与用户空间之间传输数据.

关于返回值,任何write/ read/ senfile调用都不保证写入/读取/发送整个数据块