编辑
在 IEEE标准1003.1,2004年版
(2004年POSIX.1)似乎禁止它。
一个实现可能允许除规定以外的访问
prot;
但是,如果支持“内存保护”选项,则该实现将不允许PROT_WRITE未设置的地方成功写入,或者PROT_NONE单独设置的地方不允许任何访问。实现应支持至少以下值prot:PROT_NONE,PROT_READ,PROT_WRITE,和按位包括OR的PROT_READ和PROT_WRITE。如果不支持“内存保护”选项,则与指定保护冲突的任何访问的结果都是不确定的。
无论指定了什么保护选项,都应在具有读取许可的情况下打开
文件描述符fildes。如果PROT_WRITE如果指定了,则应用程序应确保它已打开了fildes具有写许可权的文件描述符,除非MAP_PRIVATE在flags如下所述的参数中指定。
(添加了重点)
同样,在x86上,不可能有只写存储器,这是页表项的限制。页面可以标记为只读或读写,并且可以独立地是可执行的或不可执行的,但不能是只写的。此外,的手册页
mprotect()还说:
是否
PROT_EXEC有任何不同之处PROT_READ取决于体系结构和内核版本。在某些硬件体系结构(例如i386)上,PROT_WRITE暗含PROT_READ。
在这种情况下,您已经打开了没有读取访问权限的文件描述符,但是
mmap()将
O_WRONLY通过赋予您
PROT_READ权限来绕过文件描述符。相反,它将完全拒绝
EACCESS。



