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/types.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 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值