快速业务通道

Linux的mmap文件内存映射机制

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-23
头开始映射.

  参数addr指定文件应被映射到进程空间的起始地址,一般被指定一个空指针,此时选择起始地址的任务留给内核来完成.函数的返回值为文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址.

  ,举个例子来结束本节.4.2节说过,Fileinformation数组是以二进制的形式写进一个叫inforindex的文件中.那么,当要访问 Fileinformation数组时,代码类似这样:

  struct stat st;

  char buffer=” inforindex”;

  Fileinformation *_fileinfoIndexptr = NULL;

  if(stat(buffer,&st)<0)

  {

  fprintf(stderr,"error to stat %sn",buffer);

  exit(-1);

  }

  // mmap the inforindex to _fileinfoIndexptr

  int fd=open(buffer, O_RDONLY);

  if(fd<0)

  {

  printf("error to open %sn",buffer);

  exit(-1);

  }

  _fileinfoIndexptr = (Fileinformation*)mmap(NULL,st.st_size, PROT_READ,MAP_SHARED,fd,0);

  if(MAP_FAILED == _fileinfoIndexptr)

  {

  printf("error to mmap %sn",buffer);

  close(fd);

  exit(-1);

  }

  close(fd);

  下面这个例子显示了把文件映射到内存的方法

  源代码是:

  /************关于本文档********************************************

  *filename: mmap.c

  *purpose: 说明调用mmap把文件映射到内存的方法

  *wrote by: zhoulifa(zhoulifa@163.com) 周立发(http://zhoulifa.bokee.com)

  Linux爱好者 Linux知识传播者 SOHO族 开发者 最擅长C语言

  *date time:2008-01-27 18:59 上海大雪天,据说是多年不遇

  *Note: 任何人可以任意复制代码并运用这些文档,当然包括你的商业用途

  * 但请遵循GPL

  *Thanks to:

  * Ubuntu 本程序在Ubuntu 7.10系统上测试完全正常

  * Google.com 我通常通过google搜索发现许多有用的资料

  *Hope:希望越来越多的人贡献自己的力量,为科学技术发展出力

  * 科技站在巨人的肩膀上进步更快!感谢有开源前辈的贡献!

  *********************************************************************/

  #include <sys/mman.h> /* for mmap and munmap */

  #include <sys/types.h> /* for open */

  #include <sys/stat.h> /* for open */

  #include <fcntl.h> /* for open */

  #include <unistd.h> /* for lseek and write */

  #include <stdio.h>

  int main(int argc, char **argv)

  {

  int fd;

  char *mapped_mem, * p;

  int flength = 1024;

  void * start_addr = 0;

  fd = open(argv[1], O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);

  p = 5;

  }

  close(fd);

  munmap(mapped_mem, flength);

  return 0;

  }

  man -a mmap 看更详细的信息

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多
上一篇: linux samba配置下一篇: linux nis

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号