在Mac OS X上,/dev/shm的位置是什么?

5

我正在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 的位置在哪里,以便我可以删除它?

2个回答

3
您的问题最简单的解决方案是不使用。
O_EXCL

如果您不希望出现这种行为。
通常,共享内存对象确实有一个名称,但它并不是真正的文件名 - 您通常无法删除它们。在POSIX风格下,将它们显示在/dev/shm下是很好的,但这取决于您的操作系统:
我最好的猜测是,您应该阅读您机器上man shm_open的内容。

0

在衍生自BSD的Mac OS下,共享内存对象的文件系统中没有可见的文件条目。请参考https://dev59.com/PMXsa4cB1Zd3GeqPVTO_#73752984了解更多细节。
因此,无法使用rm命令或unlink()调用进行清理。应谨慎使用O_EXCL标志:在程序启动时,首先尝试使用不带O_EXCLO_CREATshm_open()。如果后者失败,请再使用两个标志重试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接