首页 > 解决方案 > 为什么即使没有/dev/shm shm_open() 也会成功?

问题描述

我的 Linux 机器中没有 /dev/shm(我手动卸载并删除了它),但是当我在我的应用程序中尝试 shm_open() 时shm_open("foo", O_CREAT | O_RDWR, 0666);,它仍然成功并返回 3 作为 fd。那么在这种情况下,共享内存是在哪里创建的呢?它仍然可以与其他进程共享吗?

在这种情况下,为什么shm_open只有当它以 root 用户身份运行但以任何非 root 用户身份运行时才会成功?

标签: linuxipcshared-memory

解决方案


shm_open如果它不存在,则创建一个共享内存对象。

fd应该是一个有效的文件描述符,你可以用来mmap与其他进程共享这个内存区域。


当您卸载并“删除”/dev/shm安装点时,实际上没有任何变化。它仅用作拥有基于 RAM 的文件系统的访问点。


推荐阅读