从套接字到具有“零拷贝”的缓冲区是否可以splice()
?如果是,怎么样?
我为splice()
找到的示例代码有两个步骤(splice example code):
是否总会有使用管道的中间步骤(即,您无法对用户空间中的缓冲区执行零复制操作)?
答案 0 :(得分:2)
您无法splice()
从套接字到具有“零拷贝”的缓冲区。
您无法使用splice()
的原因是splice()
" requires either the source or destination to be a pipe"。换句话说,当源是套接字时,由于API的限制('源或目标或两者都必须是管道'),目标必须是管道。
这回答了是或否的问题而不回答"为什么"。
我仍然对"为什么"或者具体地说:
Linus Torvalds直接在链接中回答了这些问题,他的回答似乎清晰简明(如果没有对他写的内容进行一点研究):http://yarchive.net/comp/linux/splice.html