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 }
linux系统编程 共享映射区mmap与munmap
于 2022-03-21 15:30:07 首次发布