我正在 Mac OS X 上进行共享内存分配
#define SHARED_OBJECT_PATH "/my_shared_memory"
fd = shm_open(SHARED_OBJECT_PATH, O_CREAT | O_EXCL | O_RDWR, S_IRWXU | S_IRWXG);
if (fd < 0) {
perror("In shm_open()");
exit(1);
}
上面是程序中的一个小片段。
当我第二次编译和运行程序时,我会得到错误:
在 shm_open() 中:文件存在
我假设是因为我需要使用 rm [path_to]/my_shared_memory
手动删除。我知道在 Linux 上,默认位置是 /dev/shm
,但是,这个路径在 Mac OS X 上不存在。
my_shared_memory
的位置在哪里,以便我可以删除它?
最佳答案
解决问题的最简单方法是不使用
O_EXCL
如果您不想要这种行为。
通常,共享内存对象确实有一个名称,但它并不是真正的文件名——您通常无法删除它们。在/dev/shm 下显示它们是很好的 POSIX 风格,但这取决于您的操作系统:
我最好的猜测是你应该阅读 man shm_open
在你的机器上说的内容。
关于c -/dev/shm 在 Mac OS X 上的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31278519/