博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mmap()与munmap()的小例子
阅读量:5214 次
发布时间:2019-06-14

本文共 1277 字,大约阅读时间需要 4 分钟。

mmap() 和 munmap() - Unix的系统函数,更贴近底层

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

参数addr可以指定映射的首地址,一般为0 交给内核指定。
size 就是分配内存的大小,映射时以 页 为单位。
prot是分配内存的权限,一般用PROT_READ|PROT_WRITE   

  flags是标识,通常包括以下三个:
         MAP_SHARED   MAP_PRIVATE : 二选一 ,指明映射的内存是否共享,MAP_SHARED只对 映射文件有效。
         MAP_ANONYMOUS : 映射物理内存,默认映射文件。
fd是文件描述符,在映射文件时有用。
offset是文件的偏移量,指定 映射文件时从哪里开始。
映射物理内存时,fd和offset 给 0 即可。
返回  成功返回首地址,失败返回 MAP_FAILED==(void*)-1

//mmap.c#include 
#include
#include
#include
int main(){ /*映射一片内存*/ void* p = mmap(0,//让系统指定映射内存的首地址(虚拟地址) 4,//映射4bytes的空间,其实会映射一页内存 PROT_READ|PROT_WRITE,//权限,有读写权限 MAP_PRIVATE|MAP_ANONYMOUS,/*MAP_ANONYMOUS:匿名映射,当映射到内存时,只能使用匿名映射。MAP_SHARED和MAP_PRIVATE必选其一。*/ 0,//文件描述符,用于映射到文件,内存映射中会忽略 0);//文件偏移量,用于文件,内存映射也会忽略 if(p==MAP_FAILED){ perror("映射失败"); exit(-1); } int* pi = p+500; int i; for(i=10; i<60; i++){ pi[i] = i; } strcpy(p+750, "ABCDEFGHIJKLMN"); char* pc = p; for(i=0; i<800; i++){ if(i%10==0)printf("\n"); printf("%x ", pc[i]); } printf("p=%p\n", p); sleep(20); munmap(p, 4); // while(1);}

转载于:https://www.cnblogs.com/linuxnewbie/p/3885447.html

你可能感兴趣的文章
《代码阅读方法与实现》阅读笔记一
查看>>
ActiveMQ配置使用 for CentOS6
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
字符的相加输出
查看>>
bitnami openedx安装的各种坑及痛苦经历
查看>>
用CMake设置Visual Studio工程中第三方库
查看>>
Python Django连接(听明白了是连接不是创建!)Mysql已存在的数据库
查看>>
PYTHON 基本运算符及编码发展简史
查看>>
poj 1741 树的分治
查看>>
最长递增子序列的数量 51Nod - 1376
查看>>
Ubuntu17.04下安装vmware虚拟机
查看>>
软件开发方法
查看>>
数据结构&算法实践—【排序|插入排序】插入排序
查看>>
linux下配置固定ip
查看>>
MsSql 游标 修改字段两个表关联 表向另个表插入记录
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
一个简单驱动的makefile
查看>>
《宁夏文学六十年》读后
查看>>
几款实力很强的小工具,提高Windows使用效率
查看>>