?? memorymapping.cpp
字號(hào):
/************************************************************************/
/* @filename :
/* UNIX上內(nèi)存映射
/*
/************************************************************************/
#include "../include/memorymapping.h"
#if!defined WIN32
//內(nèi)存映射共享
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' 內(nèi)存映射失敗!", filename);
return NULL;
}
//映射指定文件長(zhǎng)度的數(shù)據(jù)
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' 內(nèi)存映射失敗!", filename);
return NULL;
}
//解除內(nèi)存映射共享
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;
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -