c - 奇怪的 mmap 行为

标签 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 = 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_SHAREDMAP_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/

相关文章:

c - struct - 使用 sizeof() 的最佳方法

linux - 从 linux 终端向某个 Web 服务器发送消息

linux openvpn路由添加命令失败

linux - 如何在 docker 镜像中安装 python 模块?

python - 使用 echo 写入文件的换行符在 shell 中有效,但在 Python 3 中为文字

c - 使用 strtok 运行多个命令

c - 什么是二进制文件的 EOF?

c - 使用管道实现异步行为

C++/POSIX 如何以最有效的方式获取毫秒时间戳?

c++ - 多行 DEFINE 指令?