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

nit*_*owa 2 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");
  }
Run Code Online (Sandbox Code Playgroud)

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

mmap: No such device
Run Code Online (Sandbox Code Playgroud)

根据我的理解,代码没有任何问题,这让我怀疑原因可能有点复杂.我正在运行这个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
Run Code Online (Sandbox Code Playgroud)

spu*_*nik 6

我想你正在尝试分配内存,所以你应该使用MAP_ANONor MAP_ANONYMOUS标志,以及-1文件描述符的标准参数和0偏移量,如下所示:

mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
Run Code Online (Sandbox Code Playgroud)

  • 我想你只需要在我的例子中将`MAP_PRIVATE`改为`MAP_SHARED`. (2认同)