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修改会回写磁盘文件;

posted @   刘大侠GG_B  阅读(1641)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示