#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访问内存映射的对象相关推荐

  1. springmvc:BeanNameViewResolver访问内部资源视图对象和访问外部资源视图对象

    <!-- 处理器映射器 --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMa ...

  2. Linux操作系统学习笔记(十)内存管理之内存映射

    一. 前言   本文为内存部分最后一篇,介绍内存映射.内存映射不仅是物理内存和虚拟内存间的映射,也包括将文件中的内容映射到虚拟内存空间.这个时候,访问内存空间就能够访问到文件里面的数据.而仅有物理内存 ...

  3. 趣谈Linux操作系统学习笔记:用户态内存映射:如何找到正确的会议室?(第25讲)...

    一.mmap原理 在虚拟内存空间那一节,我们知道,每一个进程都有一个列表vm_area_struct,指向虚拟地址空间的不同内存块,这个变量名字叫mmap struct mm_struct {stru ...

  4. linux内存换算成b显示,Linux内存管理(下)

    Linux内存管理(下)物理内存管理(页管理) Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了.利用 ...

  5. linux进程阻塞的原因,释放大块内存时的阻塞问题

    一.前言 在堆上申请和释放内存的性能不高,这应该是常识了,尤其释放大块内存时,耗时更长,甚至会阻塞其他线程.做性能优化时,一般会采用内存池等手段避免频繁的申请和释放内存.本文从内核的角度分析申请和释放 ...

  6. 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别

    最近在看NVMeDirect和SPDK的源码,觉得有必要梳理一下MMIO和PMIO的区别.关于MMIO和PMIO,维基百科上是这么讲滴, Memory-mapped I/O (MMIO) and po ...

  7. Linux内存管理内存映射以及通过反汇编定位内存错误问题

    提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的! 我们需要知道--变量,其实是内存地址的一个抽像名字罢了.在静态编译的程序中,所有的变量名都会在编译时被转成内存地址.机器 ...

  8. linux驱动访问内存,linux驱动笔记八(内存与IO访问)

    X86处理器中存在I/O空间的概念,I/O空间是相对于内存空间而言的,通过特定的指令in, out 来访问. 目前,大多数嵌入式微控制器如ARM, POWERPC等并不提供I/O空间,而仅存在内存空间 ...

  9. linux应用对物理内存映射,深入理解Linux内存映射机制 (1)

    一. 绪 论 二. X86的硬件寻址方法 三. 内核对页表的设置 四. 实例分析映射机制 一. 绪 论 我们经常在程序的反汇编代码中看到一些类似0x32118965这样的地址,操作系统中称为线性地址, ...

  10. linux内存映射原理,Linux内存管理实践-使用fault()实现内存映射

    内核态与用户态进行数据交互通常是这样一种模型:内核利用自身的特权通过特定的服务程序采集.接收和处理数据:接着,用户态程序和内核服务程序进行数据交互,或接收内核态的数据,或向内核态写入数据.通过传统的那 ...

最新文章

  1. php中的$_GET全局变量,通过URL传递参数
  2. MAP Protocol 协议(2)介绍二
  3. 17、有名管道与无名管道之间的区别
  4. uni-app开发微信小程序之获取当前地址
  5. python结束程序再重新执行_Python对象对重新执行程序的持久性
  6. c 语言 数据库 pdf下载,Visual C/C++ 编程精选集锦 数据库及图形图像分册 PDF扫描版[38MB]...
  7. Membership学习(二)membership入门[xgluxv]
  8. php源码无法安装mysql_linux中源码编译安装mysql常见错误
  9. C语言实现单向链表、双向链表、循环链表
  10. python模块分析之time和datetime模块
  11. Macbook下ffmpeg下载失败问题解决
  12. C# 使用 itextsharp
  13. 利用envi进行监督分类(支持向量机)
  14. OpenCV识别指定颜色(黑、灰、白、红、橙、黄、绿、青、蓝、紫)
  15. 虚拟机挂起后,怎么恢复
  16. ubuntu 16.04 下安装搜狗输入法教程
  17. [清新]黄花菜花盛开的季节
  18. html如何发送验证码到手机,页面效果,给手机发送验证码
  19. Python - 使用python-opencv裁剪原视频为与视频高同宽的视频
  20. 5.5 listen() --- 如果有“人”,请叫我?

热门文章

  1. Linux中断子系统
  2. DPDK内存篇(一): 基本概念
  3. FD.io VPP startup.conf配置文件示例:安装后第一次配置
  4. gtk学习总结:GTK从入门到放弃,三天包教包会
  5. java 水表识别_水表识别 --数字的分割
  6. numpy的增删改查操作
  7. python之元组操作
  8. mac设置python3环境变量_mac下python3的环境变量设置!
  9. 云服务器布置_如何选择云服务器 云服务器配置怎么搭配【详解】
  10. WPF——自动关闭无模式窗口