Linux内存映射私有对象,Linux访问内存映射的对象
#include
#include
#include
#include
#include
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
#definemin(a,b)((a) < (b) ? (a) : (b))
#definemax(a,b)((a) > (b) ? (a) : (b))
int main(int argc, char** argv)
{
int fd, i;
char* ptr;
size_t filesize, mmapsize, pagesize;
if(argc != 4)
{
printf("usage: test1 ");
}
filesize = atoi(argv[2]);
pagesize = atoi(argv[3]);
fd = open(argv[1], O_RDWR | O_CREAT | O_TRUNC, FILE_MODE);
lseek(fd, filesize - 1, SEEK_SET);
write(fd, "", 1);
ptr = mmap(NULL, mmapsize, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close(fd);
pagesize = sysconf(_SC_PAGESIZE);
printf("PAGESIZE = %ld\n", (long)pagesize);
for(i = 0; i < max(filesize, mmapsize); i += pagesize)
{
printf("ptr[%d] = %d\n", i, ptr[i]);
ptr[i] = 1;
printf("ptr[%d] = %d\n", i + pagesize - 1, ptr[i + pagesize - 1]);
ptr[i + pagesize - 1] = 1;
}
printf("ptr[%d] = %d\n", i, ptr[i]);
exit(0);
}
输出结果:
chanlp@chanlp-Presario-V3700-Notebook-PC:~/Desktop/shm$ od -x -A d foo
0000000 0001 0000 0000 0000 0000 0000 0000 0000
0000016 0000 0000 0000 0000 0000 0000 0000 0000
*
0004080 0000 0000 0000 0000 0000 0000 0000 0100
0004096 0001 0000 0000 0000 0000 0000 0000 0000
0004112 0000 0000 0000 0000 0000 0000 0000 0000
*
0004992 0000 0000 0000 0000
0005000
注:od命令 -x选项指定以十六进制输出各字节 -A d选项指定以十进制输出地址
Linux内存映射私有对象,Linux访问内存映射的对象相关推荐
- springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象
<!-- 处理器映射器 --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMa ...
- Linux操作系统学习笔记(十)内存管理之内存映射
一. 前言 本文为内存部分最后一篇,介绍内存映射.内存映射不仅是物理内存和虚拟内存间的映射,也包括将文件中的内容映射到虚拟内存空间.这个时候,访问内存空间就能够访问到文件里面的数据.而仅有物理内存 ...
- 趣谈Linux操作系统学习笔记:用户态内存映射:如何找到正确的会议室?(第25讲)...
一.mmap原理 在虚拟内存空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同内存块,这个变量名字叫mmap struct mm_struct {stru ...
- linux内存换算成b显示,Linux内存管理(下)
Linux内存管理(下)物理内存管理(页管理) Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了.利用 ...
- linux进程阻塞的原因,释放大块内存时的阻塞问题
一.前言 在堆上申请和释放内存的性能不高,这应该是常识了,尤其释放大块内存时,耗时更长,甚至会阻塞其他线程.做性能优化时,一般会采用内存池等手段避免频繁的申请和释放内存.本文从内核的角度分析申请和释放 ...
- 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别
最近在看NVMeDirect和SPDK的源码,觉得有必要梳理一下MMIO和PMIO的区别.关于MMIO和PMIO,维基百科上是这么讲滴, Memory-mapped I/O (MMIO) and po ...
- Linux内存管理内存映射以及通过反汇编定位内存错误问题
提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道--变量,其实是内存地址的一个抽像名字罢了.在静态编译的程序中,所有的变量名都会在编译时被转成内存地址.机器 ...
- linux驱动访问内存,linux驱动笔记八(内存与IO访问)
X86处理器中存在I/O空间的概念,I/O空间是相对于内存空间而言的,通过特定的指令in, out 来访问. 目前,大多数嵌入式微控制器如ARM, POWERPC等并不提供I/O空间,而仅存在内存空间 ...
- linux应用对物理内存映射,深入理解Linux内存映射机制 (1)
一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制 一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址,操作系统中称为线性地址, ...
- linux内存映射原理,Linux内存管理实践-使用fault()实现内存映射
内核态与用户态进行数据交互通常是这样一种模型:内核利用自身的特权通过特定的服务程序采集.接收和处理数据:接着,用户态程序和内核服务程序进行数据交互,或接收内核态的数据,或向内核态写入数据.通过传统的那 ...
最新文章
- php中的$_GET全局变量,通过URL传递参数
- MAP Protocol 协议(2)介绍二
- 17、有名管道与无名管道之间的区别
- uni-app开发微信小程序之获取当前地址
- python结束程序再重新执行_Python对象对重新执行程序的持久性
- c 语言 数据库 pdf下载,Visual C/C++ 编程精选集锦 数据库及图形图像分册 PDF扫描版[38MB]...
- Membership学习(二)membership入门[xgluxv]
- php源码无法安装mysql_linux中源码编译安装mysql常见错误
- C语言实现单向链表、双向链表、循环链表
- python模块分析之time和datetime模块
- Macbook下ffmpeg下载失败问题解决
- C# 使用 itextsharp
- 利用envi进行监督分类(支持向量机)
- OpenCV识别指定颜色(黑、灰、白、红、橙、黄、绿、青、蓝、紫)
- 虚拟机挂起后,怎么恢复
- ubuntu 16.04 下安装搜狗输入法教程
- [清新]黄花菜花盛开的季节
- html如何发送验证码到手机,页面效果,给手机发送验证码
- Python - 使用python-opencv裁剪原视频为与视频高同宽的视频
- 5.5 listen() --- 如果有“人”,请叫我?