show me the code
#include
#include
#ifdef _WIN32
#include
class cmem_map
{
HANDLE hFile = NULL;
OFSTRUCT opBuf;
HANDLE hMapfile = NULL;
HANDLE hMapview = NULL;
long offset = 0;
public:
cmem_map() {}
~cmem_map() {}
bool IsOpen()
{
return (hMapview != NULL);
}
bool IsClosed()
{
return (hMapfile == NULL);
}
int Open(const wchar_t * memfile_add, int fsize)
{
hFile = ::CreateFile(memfile_add, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == 0)
{
printf("open file failed!\n");
return -1;
}
//2.为指定文件创建一个有名的文件映象
hMapfile = CreateFileMapping((HANDLE)hFile, NULL, PAGE_READWRITE, 0, fsize, L"MapTest");
if (hMapfile == NULL)
{
printf("mapping file failed!\n");
return -1;
}
//关闭文件句柄
CloseHandle((HANDLE)hFile);
hFile = 0;
hMapview = MapViewOfFile(hMapfile, FILE_MAP_WRITE, 0, 0, 0);
if (hMapview == NULL)
{
printf("mapping view failed!\n");
return -1;
}
return 0;
}
void Close()
{
UnmapViewOfFile(hMapview);
//关闭文件映象句柄
CloseHandle(hMapfile);
hMapfile = 0;
}
long GetSize()
{
return offset;
}
int Write(uint8_t * data, int size)
{
char *recv = (char *)hMapview;
recv += offset;
memcpy(recv, data, size);
offset += size;
//把文件映射视图中的修改的内容或全部写回到磁盘文件中
FlushViewOfFile(recv, size);
return offset;
//return 0;
}
};
#endif
#ifndef _WIN32
#include
#include
#include
cmem_map::cmem_map() : m_pData(0), m_uSize(0), m_nFile(0)
{
}
cmem_map::~cmem_map()
{
UnMap();
}
bool cmem_map::Map(const char* szFileName)
{
UnMap();
m_nFile = open(szFileName, O_RDONLY);
if (m_nFile
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?