📄 memorymapping.cpp
字号:
/************************************************************************/
/* @filename :
/* UNIX上内存映射
/*
/************************************************************************/
#include "../include/memorymapping.h"
#if!defined WIN32
//内存映射共享
unsigned char * CMemoryMapping::mmap_file(const char *filename, long &size)
{
void *start = NULL;
struct stat sb;
int fd = open(filename, O_RDONLY);
if(fd == -1) goto mmap_error;
/*取得文件大小*/
fstat(fd, &sb);
size = sb.st_size;
start = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
/*判断是否映射成功*/
if(start == MAP_FAILED)goto mmap_error;
close(fd);
return (unsigned char*)start;
mmap_error:
close(fd);
char errstr[50];
sprintf(errstr, "文件 '%s' 内存映射失败!", filename);
return NULL;
}
//映射指定文件长度的数据
unsigned char * CMemoryMapping::mmap_file_seg(const char *filename, long size)
{
if(size < 1)return NULL;
void *start = NULL;
struct stat sb;
int fd = open(filename, O_RDONLY);
if(fd == -1)goto mmap_error;
start = mmap(NULL, size, PROT_READ, MAP_PRIVATE, fd, 0);
if(start == MAP_FAILED) /*判断是否映射成功*/
goto mmap_error;
close(fd);
return (unsigned char*)start;
mmap_error:
close(fd);
char errstr[50];
sprintf(errstr, "文件 '%s' 内存映射失败!", filename);
return NULL;
}
//解除内存映射共享
inline void CMemoryMapping::ummap_file(const unsigned char *buf, long size)
{
struct stat sb;
sb.st_size = size;
munmap((void*)buf, sb.st_size);
}
#endif;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -