shm_open()函数找不到文件或目录。

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)

我想不出来了...有什么建议可以解决问题吗?

谢谢。


我猜你的意思是该“程序”具有rwxrwxrwx权限 - 进程没有权限。顺便说一下,0777是一个非常不好的权限设置,不适合程序使用。 - paxdiablo
嗨,是的,抱歉,我说错了,应该是程序而不是进程。我无法控制给予该程序的权限:P 但我相信它被赋予了0777,因为它实际上是为一个外部硬件编写的(现在我正在尝试在Linux上运行它以加快测试速度)。 - Clare
1
有人找到解决方案了吗?我也遇到了同样的问题! - Carles Araguz
尝试在strace下运行您的程序,以查看哪个系统调用失败以及使用了哪些参数。 - o11c
也许你应该展示你的代码片段。 - sigmalha
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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接