linux - 为什么即使没有/dev/shm shm_open() 也会成功?
问题描述
我的 Linux 机器中没有 /dev/shm(我手动卸载并删除了它),但是当我在我的应用程序中尝试 shm_open() 时shm_open("foo", O_CREAT | O_RDWR, 0666);
,它仍然成功并返回 3 作为 fd。那么在这种情况下,共享内存是在哪里创建的呢?它仍然可以与其他进程共享吗?
在这种情况下,为什么shm_open
只有当它以 root 用户身份运行但以任何非 root 用户身份运行时才会成功?
解决方案
shm_open
如果它不存在,则创建一个共享内存对象。
你fd
应该是一个有效的文件描述符,你可以用来mmap
与其他进程共享这个内存区域。
当您卸载并“删除”/dev/shm
安装点时,实际上没有任何变化。它仅用作拥有基于 RAM 的文件系统的访问点。
推荐阅读
- arrays - 无法使用循环修改作为参数传递的 1d numpy 数组
- json - 如何从 Json 文件中获取数据,当它有一个数字作为 swift 中的结构名称时?
- snowflake-cloud-data-platform - S3 到雪花(将 S3 中的 csv 数据加载到雪花表会引发以下错误)
- amazon-web-services - 从内部休眠机器
- python - SQL编译错误--使用python的Snowsql验证
- c++ - 管理员用户如何将文件保存为标准用户
- r - 计算 r 中的移动乘法平均值
- python-2.7 - 如何更正 kivy.garden 导入错误:
- python - 如何使用之前定义的变量在python数据类中设置默认值
- html - Chrome 中的 HTML5 视频控件:三点按钮不起作用