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;
}

 

相关内容

热门资讯

金盛贵金属APP炒黄金白银骗局...   金盛贵金属APP虚假交易,控盘走势,无资质,违规经营等等问题,该平台大肆宣传,诱导普通投资者去做...
犀贝易购APP忽悠投资者充值去...   哈尔滨贵金属交易平台旗下的APP众多,作为一家现货订购平台,平台内部的交易完全是按照期货的交易模...
熊猫淘金APP现货订购亏损被骗...   熊猫淘金APP(贵州华夏生态交易中心有限公司)投资者亏损惨重,该平台利用高杠杆、超高手续费的方式...
掌上银牛app诱导消费者充值做...   一般投资者在网上做商品现货订购交易,一些平台看似合规合法,其实这里面有投资者看不见的风险。商品现...
中国白银APP看似正规平台其实...   看似正规的中国白银APP背后竟藏着惊天骗局,普通投资者哪里能区分正规期货和非法期货!!!看着名字...