⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memorymapping.cpp

📁 自己写的一个IO库
💻 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 + -