linux write和sendfile syscall之间的区别
收藏

IM编程Web服务器(C),它应该发送大文件。我的问题是:
两个系统调用的主要区别是:writesendfilesendfile是否取决于套接字系统缓冲区的大小?我注意到write经常比我要求的写得少。
例如,如果一个文件有很多请求:我应该打开它,复制到内存中并使用write,或者我可以为每个客户机执行sendfile
提前谢谢你的回答。


最佳答案:

请阅读sendfile(2)。
sendfile()在一个文件描述符和另一个描述符之间复制数据。由于这种复制是在内核中完成的,sendfile()read(2)和write(2)的组合效率更高,后者需要在用户空间之间传输数据。
关于返回值,任何write/read/senfile调用都不能保证写入/读取/发送整个数据块

公众号