4

我正在尝试使用 shm_open() 创建一个新的共享内存文件,但我得到 errno 2(没有这样的文件或目录)。

shm_open ("/DIAG_public", O_CREAT | O_RDWR, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH);

我尝试创建自己的独立应用程序以使用相同的名称和选项运行 shm_open,这成功......

因此检查 /dev/shm 是否具有drwxrwxrwt权限,并且运行实际代码的进程是否具有-rwxrwxrwx权限。

此外,mount | grep shm返回:

tmpfs on /dev/shm type tmpfs (rw)

我没有想法......关于可能出错的任何建议?

谢谢。

4

1 回答 1

1

确保您实际上传递了 O_CREAT。只有这似乎给出了这个错误。

手册页说 ENOENT 仅在两种情况下返回。不过,对于 shm_open 来说,只有第一个似乎是有效的。

man shm_open
ERRORS
       On failure, errno is set to indicate the cause of the error.  Values which may appear in errno include the following:

    ...

        ENOENT An attempt was made to shm_open() a name that did not exist, and O_CREAT was not specified.

        ENOENT An attempt was to made to shm_unlink() a name that does not exist.
于 2016-03-26T03:45:00.147 回答