我目前正在 ubunto 上开发一个应用程序并调用 shm_open,目前默认路径在/var/run/shm 中。但是我需要将其更改为/tmp。简单地尝试以下方法是行不通的:
fd = shm_open("/tmp/test", O_RDWR | O_CREAT, 0777 );
任何人都可以请指教吗?
最佳答案
从 shm_open(3)
的手册页:
name
的 shm_open(3)
参数是对象名,不是文件路径!碰巧的是,GLIBC 将所有共享内存对象放在 /dev/shm
或 /var/run/shm
中,方法是在对象名称前面加上路径并在结果名称上调用 open()
。如果您指定 /tmp/test
作为共享对象名称,那么 Linux 将尝试打开或创建 /var/run/shm/tmp/test
。 Open with O_CREAT
创建新文件但不创建新目录。
如果您在调用 /var/run/shm/tmp
之前首先创建目录 shm_open("/tmp/test", ...)
,则您的测试将起作用。完成对共享内存对象的使用后,请记住将其删除。还要注意,使用内部带有两个斜杠的对象名称可能无法移植到其他 Unix 系统。
关于c++ - 我如何更改 shm_open 路径?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11102599/