我目前正在ubunto上开发应用程序并调用shm_open,目前默认路径在/ var / run / shm内。但是我需要将其更改为/ tmp。只是尝试以下操作不起作用:
fd = shm_open(“/ tmp / test”,O_RDWR | O_CREAT,0777);
任何人都可以提出建议吗?
答案 0 :(得分:7)
来自shm_open(3)
的手册页:
name
指定要创建或打开的共享内存对象。对于便携式使用,应使用/somename
形式的名称标识共享内存对象;也就是说,一个以空字符结尾的字符串,最多包含NAME_MAX
(即255个)字符,包含一个初始斜杠,后跟一个或多个字符,都不是斜杠。
name
的{{1}}参数是对象名称,而不是文件路径!只是GLIBC将所有共享内存对象放在shm_open(3)
或/dev/shm
中,方法是将路径添加到对象名称并在结果名称上调用/var/run/shm
。如果指定open()
作为共享对象名称,则Linux将尝试打开或创建/tmp/test
。使用/var/run/shm/tmp/test
打开可创建新文件,但不会创建新目录。
如果您在调用O_CREAT
之前首先创建目录/var/run/shm/tmp
,那么您的测试将会有效。完成共享内存对象的使用后,请记住将其删除。另请注意,使用带有两个斜杠的对象名称可能无法移植到其他Unix系统。
答案 1 :(得分:2)
您需要在tmpfs
中安装/tmp
文件系统:
mihai@keldon:~$ mount | grep shm
shm on /dev/shm type tmpfs (rw,nosuid,nodev,relatime)
否则,这是不可能的。