linux - linux write 和 sendfile 系统调用的区别

标签 linux sockets sendfile

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

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

提前感谢所有的回答。

最佳答案

请阅读sendfile(2)。

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

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

关于linux - linux write 和 sendfile 系统调用的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2743698/

相关文章:

iphone - undefined symbol : . objc_class_name_UIScreen

c - 如何阻止线程进入 nop 或低功耗状态而不是将其自身切换出处理器

c - 在 C 中,如何 malloc 和释放一个 SOCKET(已经是一个指针)

python - 如何在Python中检查套接字是否在这一端关闭

c - 一个简单的 sendfile 程序,但不起作用

Node.js - res.sendFile - 错误 : ENOENT but the path is correct

php - 在 VPS 服务器中运行 PHP 脚本 "forever"

linux - 使用 screen 启动 minecraft 服务器(linux debian)

c - udp sendto无法实时发送整个txt文件

javascript - Node.js Expressjs 存储和显示 html 页面的最快方法