来自 POSIX(IEEE 标准 1003.1-2008)section在 mmap
上:
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/