Linux > mmap
创始人
2025-05-29 10:15:25

目录

mmap

概念

使用

函数声明


mmap

概念

mmap 将 一个文件或者其它对象 映射到 进程的地址空间

实现 磁盘地址 和进程 虚拟的虚拟地址 的一一对应关系。

通过mmap 系统调用,我们可以 实现共享内存或者普通文件被映射到进程地址空间当中,进程可以向访问普通内存一样对文件进行操作。

使用

函数声明

 #include void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

参数

addr 映射区的起始地址,如果是NULL系统自动分配
length 字节长度自动按照4kb对齐所以建议大小一般填成4kb的整数倍
port 映射区域的权限
flags 映射的标志位
fd  文件描述符
offset 文件偏移量自动按照4k对齐
port

PORT_EXEC:映射的区域具有可执行权限
PROT_READ:映射的区域具有可读权限
PROT_WRITE:映射区域具有可写权限
PROT_NONE:映射区域不可被访问

flags

MAP_SHARED:对映射区域的写入操作直接反映到文件当中
MAP_FIXED:若在start上无法创建映射则失败(如果没有此标记会自动创建)
MAP_PRIVATE:对映射区域的写入操作只反映到缓冲区当中不会写入到真正的文件
MAP_ANONYMOUS:匿名映射将虚拟地址映射到物理内存而不是文件(忽略fd)
MAP_DENYWRITE:拒绝其它文件的写入操作
MAP_LOCKED:锁定映射区域保证其不被置换
 

返回值

函数的返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。

#include 
#include 
#include 
#include 
#include 
using namespace std;
static const int SIZE = 4096;
int main()
{char *str = (char *)mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);//注意MAP_PRIVATE和MAP_SHARED//建立映射if (str == MAP_FAILED){printf("%s\n", strerror(errno));return -2;}strcpy(str, "hello ksy");puts(str);//用于取消映射munmap(str, SIZE);return 0;
}

 

相关内容

热门资讯

直线涨停!603956,3连板... 6月29日,A股三大指数开盘涨跌不一。截至发稿,科创50指数涨超4%,继续刷新历史新高,半导体芯片股...
字节跳动考虑采用百度昆仑芯?接... 资料图。本文来源:澎湃新闻字节跳动考虑采用百度昆仑芯?接近人士:字节没有与其合作意向6月29日,有消...
暴涨368%!白鸽在线卡点上市... 出品|达摩财经6月29日,白鸽在线(02672.HK)正式登陆港交所,成为“场景险AI第一股”。截至...
说多了都是泪!牛市刚赚的钱,又... 每一轮行情退潮之后,总有大批投资者面对缩水的账户百思不解:明明在牛市中赚得盆满钵满,为何短短几日震荡...
罕见,今夜54家A股公司提示风... 6月29日晚间,54家A股公司发布股票交易异常波动公告或股票交易风险提示公告,分别是创元科技、五方光...