1

在我的机器上 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());
}
4

2 回答 2

3

您必须始终指定MAP_PRIVATEMAP_SHARED。两者都省略是错误的。

于 2013-04-17T05:07:51.377 回答
3

您的标志中必须有一个MAP_SHAREDMAP_PRIVATEmmap(2)手册页:

[...] 这种行为是通过在标志中包含以下值之一来确定的:

   MAP_SHARED [...]
   MAP_PRIVATE [...]
于 2013-04-17T05:08:09.050 回答