首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解sendfile()和splice()

理解sendfile()和splice()
EN

Stack Overflow用户
提问于 2011-12-24 18:42:42
回答 1查看 9.4K关注 0票数 12

sendfile()可以用来将数据从“文件”描述符传输到“套接字”描述符,以便从机器A获得数据到机器B。在接收端可以从“套接字”描述符获取数据到具有类似零拷贝语义的文件吗?我认为sendfile()在这里没有帮助,因为sendfile()需要数据源为“页面/缓冲区”缓存。我的理解正确吗?在这种情况下,splice()能提供帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2011-12-24 19:08:33

对于sendfile在这方面的局限性,您是正确的。是的,splice可以提供帮助,但这并不简单:splice要求至少有一个源文件或目标文件描述符是管道。因此,您不能直接从套接字到普通的文件描述符进行splice

从概念上讲,要使它发挥作用,您可以做的是:

normally

  • create

  • 设置入站套接字fd和输出文件fd,就像使用pipe(2)

  • in a循环来设置管道:
  • 从套接字读取到管道的写端,用splice
  • write从管道的读取侧读取到带有splice also

的文件。

重复最后的步骤,直到读取所有数据。

Zero-Copy in Linux with sendfile() and splice()实现了这种技术。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8626263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档