shm_open()函数没有创建共享内存

时间:2013-03-26 18:15:43

标签: c posix

我正在尝试打开一个共享内存,它给我没有这样的文件或目录错误。 但我有一个文件以及名称区域中的目录。

 fd_sh = shm_open("/home/angus/c_tutorials/interview/linux_sys_pgm/mmap/region", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
 if(fd_sh == -1){
  perror("fd_sh:ERROR");
  return -1;
 }

1 个答案:

答案 0 :(得分:7)

在Linux中(我假设这是你的操作系统,给定你的代码),名称应该以斜杠开头但之后没有任何其他名称,例如: "/myshm" - 不是常规文件名。

从手册页:

   The operation of shm_open() is analogous  to  that  of  open(2).   name
   specifies the shared memory object to be created or opened.  For porta‐
   ble use, a shared memory object should be identified by a name  of  the
   form  /somename;  that  is,  a null-terminated string of up to NAME_MAX
   (i.e., 255) characters consisting of an initial slash, followed by  one
   or more characters, none of which are slashes.

这样做会很好。

实际上发生的是给定的名称是作为/dev/shm中的文件创建的,因此您需要创建一个目录结构来使用路径;这不是一个好主意,因为这个目录只在内存中。