在Linux中,有没有办法从套接字读取,同时避免从内核空间到用户空间的数据的隐式memcpy?
也就是说,而不是做
ssize_t n = read(socket_fd, buffer, count);
显然需要内核从网络缓冲区到我提供的缓冲区中执行memcpy,我会做类似的事情
ssize_t n = fancy_read(socket_fd, &buffer, count);
并且返回时缓冲区指向从网络接收的非memcpy()'ed数据。
答案 0 :(得分:3)
最初我认为套接字族的AF_PACKET选项可以提供帮助,但它不能。
然而,从技术上来说,这是可能的,因为没有什么能阻止你实现内核模块处理系统调用,它返回用户映射指向内核数据的指针(即使它不是很安全)。
关于您希望拥有的电话,有几个问题:
这些可以通过很多方式完成,所以基本上是的,这是可能的,但你需要考虑很多事情。