繁体   English   中英

奇怪的mmap行为

[英]Weird mmap behavior

在我的机器上,test_anon_shared似乎可以正常工作,而test_anon失败并显示“ Invalid Argument”错误。 知道我哪里出错了吗?

#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_PRIVATEMAP_SHARED 两者都省略是一个错误。

您的标志中必须具有MAP_SHAREDMAP_PRIVATE之一。 mmap(2)手册页:

[...]通过在标志中完全包含以下值之一来确定此行为:

   MAP_SHARED [...]
   MAP_PRIVATE [...]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM