内存映射学习笔记

内存映射原理

将磁盘中的文件,映射到内存,通过内存修改文件。

在这里插入图片描述

函数定义

mmap函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

操作映射区必须要有 读权限

munmap函数

在这里插入图片描述
首地址
长度一致。

注意事项

在这里插入图片描述可以对指针进行++ 操作,但是不建议使用,申请创建了内存之后,释放的时候需要用首地址进行释放,++之前要把原始地址保存下来
在这里插入图片描述
open时的权限 >= prot设置的权限
在这里插入图片描述
创建映射区时的偏移量设置,必须是4K整数倍。
在这里插入图片描述
一个是长度错误会失败,一个是权限错误会失败。
在这里插入图片描述
可以使用新创建的文件,但文件大小不能为0。
在这里插入图片描述
内存没有释放,不影响。
只是文件描述符fd无法使用,但是使用ptr指针和偏移量
哪位大佬知道如何精确定位内存中文档写指针的位置,可以评论一下,目的是想解决关闭文档之后的写指针定位与写入。
在这里插入图片描述

应用

进程有没有关系都可以使用。

进程间通信

在这里插入图片描述

创建文件使用open函数,创建成功返回值为文件描述符。
注意:
内存映射区通信是非阻塞的。
映射函数mmap对应的port权限要小于open权限。

文件复制

在这里插入图片描述

匿名映射

不需要文件实体的映射

创建:
int len = 4096;//匿名大小
void *ptr = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1);
匿名的没有文件描述符。

释放:
int ret = munmap(ptr, len);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猛笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值