posix - 为什么带有 PROT_WRITE 的 mmap(2) 只需要一个可读的 fd?

标签 posix mmap

来自 POSIX(IEEE 标准 1003.1-2008)sectionmmap 上:

The file descriptor fildes shall have been opened with read permission, regardless of the protection options specified.

这是为什么呢?似乎一个描述符打开了 O_WRONLY 并映射到 PROT_WRITE 而不是 PROT_READ 在权限方面应该没有问题,对吧?

最佳答案

但下一行指出:

如果指定了 PROT_WRITE,应用程序应确保它已打开具有写入权限的文件描述符 fildes,除非如下所述在 flags 参数中指定了 MAP_PRIVATE。

我认为你引用的那行意味着至少文件的文件描述符应该以读取权限打开。它清楚地表明应用程序应该确保首先授予适当级别的权限。

为了尝试这个,我以只读模式打开文件并将该描述符传递给 mmap。

fd= open(file_name,O_RDONLY);  
mappedData = mmap(0,fdstat.st_size,PROT_READ|PROT_WRITE, MAP_SHARED,fd,0);

但是当我运行程序时抛出错误,即:

mmap: Permission denied

编辑: 对不起,我误解了你的问题。

关于posix - 为什么带有 PROT_WRITE 的 mmap(2) 只需要一个可读的 fd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20290678/

相关文章:

shell - 在linux中查找叶目录

c - 防止重用文件描述符

c - 使用 mmap 读/写文件时如何解决 ENODEV

linux-kernel - 如何通过 get_page() 为 mmap 手动引用 'free' 页?

Linux内存映射文件(已删除)

c - 内存映射 POSIX 中的文件

c - 短读/写可能发生的条件是什么?

c - 用/替换许多文件的脚本是什么样的?

go - 定义自定义时间格式

c++ - 使用 mmap 与 fstream 或 fopen 访问二进制文件