Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
sendfile()可用于将数据从“文件”描述符传输到“套接字”描述符,以便从机器A到机器B获取数据。是否可以在接收端从“套接字”描述符获取数据到文件具有类似的零拷贝语义?我认为sendfile()这里没有帮助,因为sendfile()需要数据源是“页面/缓冲区”缓存。我的理解正确吗?splice()在这种情况下可以提供帮助吗?
sendfile()
splice()
您对此的限制是正确的sendfile。是的,splice可以提供帮助,但这不是微不足道的:splice要求至少一个源或目标文件描述符是管道。所以你不能直接splice从一个套接字到一个普通的文件描述符。
sendfile
splice
从概念上讲,您可以做些什么来使其发挥作用:
pipe(2)
重复最后的步骤,直到读取所有数据。
Linux 中使用 sendfile() 和 splice() 进行的零复制实现了这种技术。