为什么Linux不支持通过路径进行mmap?

为什么Linux不支持通过路径进行mmap?

系统mmap调用需要一个 fd 作为参数,但是当您关闭该 fd 时,mmap 在进程的内存地址空间中仍然存在。

因此,保留 mmap 不需要打开的 fd,那么为什么 Linux 只支持使用 fd 创建文件的 mmap,而不支持文件名路径呢?如果我们可以有一个像andmmapat一样的系统调用不是很好吗?openatexecveat

如果mmap创建对该文件的额外引用,为什么我们不能mmapat在第一次自动创建此类引用而不获取进程的 fd 然后稍后释放它。

Linux 内核上没有这样的系统调用是否有任何历史或安全原因?

答案1

mmap(2) 基本上是对内核将直接写入的缓冲区的 read(2),而不是读取到内核缓冲区,然后复制到提供的缓冲区。

没有 mmapat(2) 的原因与没有 readat(2) 的原因相同。

不再需要文件描述符,因为

mmap() 函数添加对与文件描述符 fildes 关联的文件的额外引用,该文件描述符上的后续 close() 不会删除该引用。当不再有到该文件的映射时,该引用将被删除。

这是每OpenGroup 的网站。 如果我没记错的话,他们是管理 POSIX 标准的人,所以他们应该知道。

相关内容