我正在尝试打开共享内存,它给了我没有这样的文件或目录错误。但是我在名称区域中有一个文件和一个目录。
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;
}
在 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
,因此您需要创建一个目录结构来使用路径;这不是一个好主意,因为这个目录只在内存中。