linux write和sendfile系统调用之间的区别

时间:2010-04-30 10:01:38

标签: linux sockets sendfile

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

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

提前感谢所有答案。

1 个答案:

答案 0 :(得分:6)

请阅读sendfile(2)。

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

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