为什么不能将mmap与socket fd一起用作参数?

时间:2011-02-02 11:34:56

标签: sockets mmap

我知道这是不可能的,我正在努力了解OS明智背后的真正原因

2 个答案:

答案 0 :(得分:6)

因为套接字的概念根本没有映射到随机访问内存数组的概念,这是mmap给你的抽象。块设备(磁盘)上的文件通常允许随机读/写访问。这很好地映射到内存中连续的数组,它也为您提供随机读/写访问。

然而,套接字通常是面向流(或数据包/数据报)的。意思是,数据流通过套接字发送,并从套接字接收数据流。但是,您不能,例如,写入/读取开放套接字流的第N个字节 - 这在概念上没有任何意义。

答案 1 :(得分:2)

事实上,linux中的一些协议族可以使用,即:

对于其余协议,未实现/可能进行映射。例如PF_INET

调用socket的mmap系统调用here

另见: