在我的机器上,test_anon_shared 似乎可以工作,而 test_anon 因“无效参数”错误而失败。知道我哪里出错了吗?
#include <unistd.h>
#include <sys/mman.h>
#include <stdio.h>
#include <stdlib.h>
void *test_anon(void) {
printf("testing MAP_ANONYMOUS only!\n");
void *mem = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS, -1, 0);
if (mem == MAP_FAILED) {
perror("test_anon");
abort();
}
}
void *test_anon_shared(void) {
printf("testing MAP_ANONYMOUS | MAP_SHARED!\n");
void *mem = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_SHARED, -1, 0);
if (mem == MAP_FAILED) {
perror("test_anon_shared");
abort();
}
}
int main(void) {
printf("test_anon_shared = %p\n", test_anon_shared());
printf("test_anon = %p\n", test_anon());
}
最佳答案
您的标志中必须包含 MAP_SHARED
或 MAP_PRIVATE
之一。 mmap(2)
手册页:
[...] This behavior is determined by including exactly one of the following values in flags:
MAP_SHARED [...]
MAP_PRIVATE [...]
关于c - 奇怪的 mmap 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051828/