作者:手机用户2502863643 | 来源:互联网 | 2023-07-19 15:42
我目前正在ubunto上开发一个应用程序并调用shm_open,目前默认路径在varrunshm内.但是我需要将其更改为tmp.只是尝试以下操作不起作用:fdshm_
我目前正在ubunto上开发一个应用程序并调用shm_open,目前默认路径在/ var / run / shm内.但是我需要将其更改为/ tmp.只是尝试以下操作不起作用:
fd = shm_open(“/ tmp / test”,O_RDWR | O_CREAT,0777);
任何人都可以建议吗?
解决方法:
从shm_open(3)的手册页:
name specifies the shared memory object to be created or opened. For portable use, a shared memory object should be identified by a name of the form /somename; that is, a null-terminated string of up to NAME_MAX (i.e., 255) characters consisting of an initial slash, followed by one or more characters, none of which are slashes.
shm_open(3)的name参数是对象名,而不是文件路径!只是GLIBC将所有共享内存对象放在/ dev / shm或/ var / run / shm中,方法是在路径前加上对象名,并在结果名称上调用open().如果指定/ tmp / test作为共享对象名,则Linux将尝试打开或创建/ var / run / shm / tmp / test.使用O_CREAT打开会创建新文件,但不会创建新目录.
如果您在调用shm_open(“/ tmp / test”,…)之前首先创建目录/ var / run / shm / tmp,那么您的测试将起作用.完成共享内存对象的使用后,请记住将其删除.并且还要注意,使用带有两个斜杠的对象名称可能无法移植到其他Unix系统.
标签:c,linux,boost,shared-memory
来源: https://codeday.me/bug/20190723/1512607.html