带有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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...