mmap: Operation not permitted
char *map_shm = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0);
该种情况下会报 mmap: Operation not permitted
修改为 char *map_shm = mmap(NULL, size, PROT_READ, MAP_PRIVATE , fd, 0);
则不会报错。
分析:
打开的fd所对应的文件可能为只读的,不允许写入,所以使用MAP_PRIVATE 则可以通过。
mmap成功以后,fd可以立即关闭,而不影响mmap
2、private的修改不会回写硬盘文件,并且是copy-on-write模式,文件未修改时指向的共享文件内容(此时其他进程修改文件,private是可见的,因为是同一块内存。当private修改了内存以后,
private重新申请一块内存,此时其他进程再修改文件内容private将看不到修改)
3、share修改会回写磁盘文件;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)