【发布时间】:2011-02-14 04:21:08
【问题描述】:
我正在编程网络服务器 (C),它应该发送大文件。我的问题是:
两个系统调用的主要区别是什么:write 和 sendfile。 sendfile 是否取决于套接字系统缓冲区的大小?我注意到write 经常写的比我要求的要少。
例如,如果对一个文件有很多请求:我应该打开它,复制到内存中并使用write,或者我可以为每个客户端执行sendfile?
提前感谢所有答案。
【问题讨论】:
我正在编程网络服务器 (C),它应该发送大文件。我的问题是:
两个系统调用的主要区别是什么:write 和 sendfile。 sendfile 是否取决于套接字系统缓冲区的大小?我注意到write 经常写的比我要求的要少。
例如,如果对一个文件有很多请求:我应该打开它,复制到内存中并使用write,或者我可以为每个客户端执行sendfile?
提前感谢所有答案。
【问题讨论】:
请阅读sendfile(2)。
sendfile() 在一个文件描述符和另一个文件描述符之间复制数据。因为这种复制是在内核中完成的,sendfile() 比 read(2) 和 write(2) 的组合更有效,后者需要在用户空间和用户空间之间传输数据。
关于任何write/read/senfile调用的返回值都不能保证整个数据块被写入/读取/发送
【讨论】: