是否有可能splice()
从一个套接字到“零复制”的缓冲区? 如果是的话,怎么样?
我find的splice()
代码示例有两个步骤( 拼接示例代码 ):
是否总会有一个使用pipe道的中间步骤(即,你不能在用户空间中执行零拷贝操作)?
@yeyo在IMO的问题评论中回答了这个问题,但没有及时提供答案。 所以我会总结一下:
你不能从套接字splice()
到“零拷贝”的缓冲区。
你不能使用splice()
的原因是因为splice()
“ 要求源或者目的地是管道 ”。 换句话说,当源是一个套接字时,由于API的限制('源或目的地或两者都必须是管道'),目的地必须是管道。
这是回答是或否的问题,而不是“为什么”。
我仍然有关于“为什么”或具体的问题:
Linus Torvalds直接在链接中回答这些问题,他的回答对我来说似乎是清晰和简洁的(如果不是对他写的东西进行一点研究的话):http: //yarchive.net/comp/linux/splice.html