【问题标题】:shm_open() function is not creating the shared memoryshm_open() 函数没有创建共享内存
【发布时间】:2013-03-26 18:15:42
【问题描述】:

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

 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;
 }

【问题讨论】:

    标签: c posix


    【解决方案1】:

    在 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 中创建为一个文件,因此您需要创建一个目录结构来使用路径;这不是一个好主意,因为这个目录只在内存中。

    【讨论】:

    • 我尝试使用 /region ,但出现权限被拒绝错误。但我是机器的root用户。
    • 我必须将一个整数和一个字符串存储到共享内存中,我已将其声明为一个结构。我不能使用 shmget 并使用指针来存储结构,因为结构的范围在进程内。所以我选择了 shm_open()。是否有另一种方法可以将 processA 和 processB 结构的内容存储到共享内存A中
    • 尝试单独运行shm_open -- 检查是否在 /dev/shm 中创建了任何文件。好久没看共享内存了,不知道有没有出于安全原因对root权限的限制。
    猜你喜欢
    • 1970-01-01
    • 2014-03-17
    • 2019-04-05
    • 2021-10-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多