C: mmap 失败:没有这样的设备

标签 c memory-mapping

我正在尝试使用 c 命令创建内存映射

  void* mem_map = mmap(NULL, 
                       sizeof(serverData),      //200000
                       PROT_READ | PROT_WRITE, 
                       MAP_SHARED, 
                       mem_map_fp, 
                       0);

  if(mem_map == MAP_FAILED){
    bail_out(EXIT_FAILURE, "mmap");
  }

程序可以编译,但是在尝试运行时会产生以下错误:

mmap: No such device

据我了解,代码没有任何问题,这让我怀疑原因可能更复杂一些。 我正在运行这个 Linux 版本:

Linux ubuntu 4.2.0-16-generic #19-Ubuntu SMP Thu Oct 8 15:35:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

最佳答案

我想你正在尝试分配内存,所以你应该使用 MAP_ANONMAP_ANONYMOUS 标志,以及标准参数 -1对于文件描述符和 0 作为偏移量,像这样:

mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);

关于C: mmap 失败:没有这样的设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37513694/

相关文章:

c - 段错误(核心转储)但不知道如何修复

linux-kernel - CPU如何知道PCI地址空间

c - Linux内核代码中的内存映射数据文件

c - 通过指针修改 const 限定对象

linux - 具有私有(private)匿名映射的 ENOMEM 的 munmap() 失败

linux - 在 QNX 中检索自身进程的内存映射

C语言 : Error in Freeing members of struct in an a function

c - 你如何在 C 中创建一个指针数组?

c - 如果它们具有相同的名称并且我无法修改其他文件,如何在其他 C 文件中使用具有相同名称的多个函数?