Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 奇怪的mmap行为_C_Linux_Posix - Fatal编程技术网

C 奇怪的mmap行为

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

在我的机器上,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());
}
#包括
#包括
#包括
#包括
无效*测试编号(无效){
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 [...]