为什么Linux不支持按路径mmap?

炸鱼薯*_*德里克 2 linux-kernel

mmap系统调用需要一个FD作为参数,但是当你关闭FD,该MMAP仍然在进程的内存地址空间活着。

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

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

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

Ed *_*imm 5

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

出于同样的原因,没有 mmapat(2) 没有 readat(2)。

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

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

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