如何解决带有LEGACY_MAP_MASK的MAP_SHARED_VALIDATE在mmap中产生EINVAL错误
我了解到MAP_SHARED_VALIDATE将返回EOPNOTSUPP,并且当存在未知标志时,mmap()将会失败,但是,当我使用LEGACY_MAP_MASK(所有均为有效标志)时,mmap()将失败。
#define LEGACY_MAP_MASK (MAP_SHARED \
| MAP_PRIVATE \
| MAP_FIXED\
| MAP_ANONYMOUS \
| MAP_DENYWRITE \
| MAP_EXECUTABLE \
| MAP_UNINITIALIZED \
| MAP_GROWSDOWN \
| MAP_LOCKED \
| MAP_NORESERVE \
| MAP_POPULATE \
| MAP_NONBLOCK \
| MAP_STACK \
| MAP_HUGETLB \
| MAP_32BIT \
| MAP_HUGE_2MB \
static int fd_file;
static void *mapped_address;
#define TEST_FILE "sample"
#define TEST_FILE_SIZE 1024
#define TEST_FILE_MODE 0600
fd_file = open(TEST_FILE,O_CREAT | O_RDWR,TEST_FILE_MODE);
mapped_address = mmap(NULL,TEST_FILE_SIZE,PROT_READ | PROT_WRITE,LEGACY_MAP_MASK | MAP_SHARED_VALIDATE,fd_file,0);
if (mapped_address == MAP_FAILED)
printf("Oops mmap() failed");
错误:
mmap( ) failed with the unexpected error: EINVAL (22)
================================================ ====================
编辑:在评论回复后:
#define LEGACY_MAP_MASK (MAP_SHARED \
| MAP_PRIVATE \
| MAP_DENYWRITE \
| MAP_EXECUTABLE \
| MAP_UNINITIALIZED \
| MAP_LOCKED \
| MAP_NORESERVE \
| MAP_POPULATE \
| MAP_NONBLOCK \
| MAP_STACK \
| MAP_32BIT \
| MAP_HUGE_2MB \
| MAP_HUGE_1GB)
mapped_address = mmap(NULL,LEGACY_MAP_MASK | MAP_SHARED_VALIDATE,0);
mmap( ) is successful,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。