问题描述
我了解到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 (将#修改为@)