我该如何更改shm_open路径?

时间:2012-06-19 13:58:57

标签: c++ linux boost shared-memory

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

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

任何人都可以提出建议吗?

2 个答案:

答案 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)

否则,这是不可能的。