我正在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);
}
该计划的一个小片段就是上述内容。
当我第二次编译并运行程序时,我会收到错误:
In shm_open(): File exists
我假设因为我需要使用rm [path_to]/my_shared_memory
手动删除。我知道在Linux上,默认位置是dev/shm
,但是,Mac OS X上不存在此路径。
my_shared_memory
的位置在哪里,我可以将其删除?
答案 0 :(得分:2)
您问题的最简单解决方案是不使用
O_EXCL
如果您不想要这种行为。
通常,共享内存对象确实有一个名称,但它实际上不是文件名 - 通常不能删除它们。在/ dev / shm下显示它们是一个很好的POSIX风格,但这取决于你的操作系统:
我最好的猜测是你应该阅读机器上man shm_open
所说的内容。