首页 > 其他分享 >mmap: Operation not permitted

mmap: Operation not permitted

时间:2023-01-10 16:11:07浏览次数:43  
标签:文件 mmap private 修改 fd Operation 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修改会回写磁盘文件;

标签:文件,mmap,private,修改,fd,Operation,permitted
From: https://www.cnblogs.com/DXGG-Bond/p/17040599.html

相关文章