首页 > 系统相关 >内存映射

内存映射

时间:2023-03-01 10:11:29浏览次数:32  
标签:MAP stat 映射 PROT 内存 file

介绍

#include <sys/mman.h>

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

功能:将文件映射到内存中

参数:

  • addr:允许用户使用某个特定的地址作为这段内存的起始地址。设置为 NULL,系统自动分配一个地址
  • length:指定内存段的长度
  • prot:设置内存段的访问权限,
    • PROT_READ
    • PROT_WRITE
    • PROT_EXEC
    • PROT_NONE:内存段不能被访问
  • flags:控制内存段内容被修改后程序的行为
    • MAP_SHARED:对该内存段的修改将反映到文件中
    • MAP_PRIVATE:对该内存段的修改不会反映的被映射的文件中
    • MAP_ANONYMOUS
    • MAP_FIXED
    • MAP_HUGETLB
  • fd:被映射文件的文件描述符
  • offset:从文件何处开始映射

返回值:

  • 成功返回指向目标内存区域的指针
  • 失败返回 MAP_FAILED 即 ((void *)-1),并设置 errno
#include <sys/mman.h>

int munmap(void *addr, size_t length);

功能:释放由 mmap 映射的内存空间

参数:

  • addr:内存段的起始地址
  • length:内存段的长度

返回值:

  • 成功返回 0
  • 失败返回 -1,并设置 errno

简单使用

char *real_file = "test.txt";
struct stat file_stat;

stat(real_file, &file_stat);

int fd = open(real_file, O_RDONLY);

char *file_address = (char *)mmap(NULL, file_stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);

close(fd);

if (file_address) {
    munmap(file_address, file_stat.st_size);
    file_address = NULL;
}

注意事项

标签:MAP,stat,映射,PROT,内存,file
From: https://www.cnblogs.com/cong0221/p/17167087.html

相关文章

  • Shader入门精要笔记 - CH10.1_环境映射之折射
    折射:光线从一种介质进入另一种介质,传播方向会发生改变  Cubemap是在Teapot_Refract的位置拍摄的Shader"My/Tex2/RefractCubeMap"{Properties{......
  • day07-MyBatis的关联映射01
    MyBatis的关联映射Mybatis的关联映射实际的开发中,对数据库的操作常常会涉及到多张表,这在面向对象中就涉及到了对象与对象之间的关联关系。针对多表之间的操作,MyBatis提......
  • mybatis:自定义映射关系resultMap
    创建表t_emp定义实体类packageorg.example.entity;publicclassEmp{privateIntegerempId;privateStringempName;privateIntegerage;pr......
  • 算法刷题-求int型正整数在内存中存储时1的个数-JAVA
    0x00引言为获取一个良好的算法思维,以及不再成为一个脚本小子,争取每天一道算法题,培养自己的逻辑思维,温顾各类型语言语法知识。题解只写自己理解的解法,其他解法不再增加。......
  • 配置samba将linux文件映射到windows
    环境Centos7Windows10 关闭防火墙使用以下命令暂时安全校验:systemctlstopfirewalld暂时关闭防火墙setenforce0临时关闭selinux上面两条命令使用其中......
  • JS内存爆破问题
    原理检测到调试,格式化等,疯狂的在js文件,或者html中进行读写,cookie重写追加,字节追加,导致内存不足够,卡死内存爆破,指js通过死循环/频繁操作数据库(包括cookie)/频繁调取histo......
  • 硬件中断号到软件中断号的映射
     Linux中每一个产生的中断都会使用一个irq_desc结构体来描述。structirq_desc{structirq_common_datairq_common_data;structirq_dat......
  • C语言 内存分区
    C语言对内存的使用划分为以下区域:栈区(stack)、堆区(heap)、全局区(静态区)、常量区、代码区。栈区:由编译器自动分配释放,按内存地址从高(地址)到低(地址)存储;栈区内容的作用域......
  • NatApp外网映射
    1.NatApp官网https://natapp.cn/2.NatApp下载地址:https://natapp.cn/#download登陆进去后 购买隧道   本地端口一定要跟你application.yml中一致(以java举例......
  • 内存不足时Linux 内核自动触发OOM-killer
    问题产生:作者最近在搭建Hadoop+Hive集群时,将NameNode、DataNode、Rm全部部署到一台物理机上,查询量较大时连接挂掉。问题定位:使用JPS命令查看Metastore服务正常运行,hive2......