您好,欢迎访问代理记账网站
移动应用 微信公众号 联系我们

咨询热线 -

电话 15988168888

联系客服
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

linux系统编程 共享映射区mmap与munmap

  1 /*
  2 mmap()函数头文件 #include<sys/mman.h>
  3 原型:void * mmap(void * addr,size_t length,int prot,intflags,int fd,off_t offset);
  4 返回值:成功,返回映射区的首地址。失败,返回MAP_FAILED
  5 addr:   建立映射区的首地址,由linux内核指定,使用时直接传递NULL
  6 length: 创建映射区的大小
  7 prot:   映射区的权限
  8 flags:  标志参数。MAP_SHARED:映射区的修改写到物理设备上。MAP_PRIVATE:映射区的修改不写到物理设备上。
  9 fd:     用来建立映射去的文件描述符
 10 offset: 映射文件时的偏移量(4k的整数倍)
 11 
 12 munmap()函数头文件 #include<sys/mman.h>
 13 int mmap(void * addr,size_t length);
 14 返回值:成功,返回0   失败,返回-1 
 15 使用mmap必须释放内存,使用munmap
 16 */
 17 #include<sys/mman.h>
 18 #include<stdio.h>
 19 #include<fcntl.h>
 20 #include<sys/stat.h>
 21 #include<string.h>
 22 #include<stdlib.h>
 23 #include<unistd.h>
 24 void main(void)
 25 {
 26         int fd = open("/dev/zero",O_RDWR);//以读写方式打开文件
 27         if(fd==-1){
 28                 perror("open error\n");
 29                 exit(1);
 30         }
 31 //      int len = ftruncate(fd,40);
 32 //#include<unistd.h>#include<sys/tyoes.h>
 33 //原型:int ftruncate(int fd,off_t length);
 34 //将文件截成length长度的文件,成功返回0,失败返回-1
 35 //文件必须可读可写
 36 //      if(len==-1){
 37 //              perror("ftruncate error\n");
 38 //              exit(1);
 39 //      }
 40         char * p = mmap(NULL,40,PROT_READ|PROT_WRITE,MAP_PRIVATE,fd,0);
 41         //将文件内容映射到映射区
 42         //并返回指向映射区的指针
 43         if(p==MAP_FAILED){
 44                 perror("mmap error\n");
 45                 exit(1);
 46         }
 47         close(fd);//关闭文件,获得映射区后可随时关闭文件
 48         strcpy(p,"123\n");//写入数据到映射区
 49         printf("%s\n",p);
 50         int ret = munmap(p,40);//释放映射区内存
 51         if(ret==-1){
 52                 perror("munmap error\n");
 53                 exit(1);
 54         }
 55 }


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进