C 奇怪的mmap行为
在我的机器上,test_anon_shared似乎可以工作,而test_anon失败并出现“无效参数”错误。知道我哪里出错了吗C 奇怪的mmap行为,c,linux,posix,C,Linux,Posix,在我的机器上,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
#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());
}
#包括
#包括
#包括
#包括
无效*测试编号(无效){
printf(“仅匿名测试地图!\n”);
void*mem=mmap(NULL,4096,PROT_READ | PROT_WRITE,
MAP_匿名,-1,0);
if(mem==MAP_失败){
perror(“test_anon”);
中止();
}
}
无效*测试不共享(无效){
printf(“测试图_匿名|图_共享!\n”);
void*mem=mmap(NULL,4096,PROT_READ | PROT_WRITE,
MAP|u匿名| MAP|u共享,-1,0);
if(mem==MAP_失败){
perror(“测试与共享”);
中止();
}
}
内部主(空){
printf(“test\u anon\u shared=%p\n”,test\u anon\u shared());
printf(“test\u anon=%p\n”,test\u anon());
}
您必须始终指定MAP\u PRIVATE
或MAP\u SHARED
。忽略两者都是错误的。必须始终指定MAP\u PRIVATE
或MAP\u SHARED
。忽略两者都是错误的。您的标志中必须有一个MAP\u SHARED
或MAP\u PRIVATE
。手册页:
[…]此行为通过在标志中仅包含以下值中的一个来确定:
您的标志中必须有一个
MAP\u SHARED
或MAP\u PRIVATE
。手册页:
[…]此行为通过在标志中仅包含以下值中的一个来确定:
MAP_SHARED [...]
MAP_PRIVATE [...]