sendfile()
可以用来将数据从“文件”描述符传输到“套接字”描述符,以便从机器A获取数据到机器B。是否可以在接收端从“套接字”获取数据具有类似零拷贝语义的文件描述符?我认为 sendfile()
在这里没有帮助,因为 sendfile()
需要数据源是“页面/缓冲区”缓存。我的理解正确吗?在这种情况下splice()
可以帮忙吗?
您对
sendfile
对此的限制是正确的。是的,splice
可以提供帮助,但它并不是微不足道的:splice
要求源文件描述符或目标文件描述符中至少之一是管道。所以你不能直接从套接字到普通文件描述符splice
。
从概念上讲,您可以采取以下措施使其发挥作用:
pipe(2)
splice
splice
从管道的读取端写入文件重复最后的步骤,直到读取所有数据。
Linux 中使用 sendfile() 和 splice() 进行零复制 具有此技术的实现。