文章目录
- 内存映射原理
- 函数定义
- `mmap`函数
- `munmap`函数
- 注意事项
- 应用
- 进程间通信
- 文件复制
- 匿名映射
内存映射原理
将磁盘中的文件,映射到内存,通过内存修改文件。
函数定义
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);