介绍
#include <sys/mman.h>
void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
功能:将文件映射到内存中
参数:
- addr:允许用户使用某个特定的地址作为这段内存的起始地址。设置为 NULL,系统自动分配一个地址
- length:指定内存段的长度
- prot:设置内存段的访问权限,
- PROT_READ
- PROT_WRITE
- PROT_EXEC
- PROT_NONE:内存段不能被访问
- flags:控制内存段内容被修改后程序的行为
- MAP_SHARED:对该内存段的修改将反映到文件中
- MAP_PRIVATE:对该内存段的修改不会反映的被映射的文件中
- MAP_ANONYMOUS
- MAP_FIXED
- MAP_HUGETLB
- fd:被映射文件的文件描述符
- offset:从文件何处开始映射
返回值:
- 成功返回指向目标内存区域的指针
- 失败返回 MAP_FAILED 即 ((void *)-1),并设置 errno
#include <sys/mman.h>
int munmap(void *addr, size_t length);
功能:释放由 mmap 映射的内存空间
参数:
- addr:内存段的起始地址
- length:内存段的长度
返回值:
- 成功返回 0
- 失败返回 -1,并设置 errno
简单使用
char *real_file = "test.txt";
struct stat file_stat;
stat(real_file, &file_stat);
int fd = open(real_file, O_RDONLY);
char *file_address = (char *)mmap(NULL, file_stat.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
close(fd);
if (file_address) {
munmap(file_address, file_stat.st_size);
file_address = NULL;
}
注意事项
无