3

我目前正在ubunto上开发一个应用程序并调用shm_open,目前默认路径在/var/run/shm内。但是我需要将其更改为 /tmp。简单地尝试以下方法不起作用:

fd = shm_open("/tmp/test", O_RDWR | O_CREAT, 0777);

谁能给点建议?

4

2 回答 2

11

从手册页shm_open(3)

name指定要创建或打开的共享内存对象。对于可移植使用,共享内存对象应该由一个形式的名称来标识/somename;也就是说,一个以空字符结尾的字符串,最多NAME_MAX包含(即 255 个)字符,由一个初始斜杠组成,后跟一个或多个字符,其中没有一个是斜杠

name参数shm_open(3)是对象名,不是文件路径!碰巧 GLIBC 将所有共享内存对象放在对象名称的路径中/dev/shm/var/run/shm通过在路径前面加上对象名称并调用open()结果名称。如果您指定/tmp/test为共享对象名称,那么 Linux 将尝试打开或创建/var/run/shm/tmp/test. 打开方式O_CREAT创建新文件但不创建新目录

如果您/var/run/shm/tmp在调用shm_open("/tmp/test", ...). 请记住在完成共享内存对象后将其删除。另请注意,使用内部带有两个斜杠的对象名称可能无法移植到其他 Unix 系统。

于 2012-06-19T14:36:25.180 回答
2

为此,您需要安装一个tmpfs文件系统/tmp

mihai@keldon:~$ mount | grep shm
shm on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)

否则,这是不可能的。

于 2012-06-19T14:01:35.567 回答