C++中使用内存映射文件存取struct,并用指针访问
来源:互联网 发布:中国农业部数据库 编辑:程序博客网 时间:2024/05/29 19:03
#include <iostream>#include <Windows.h>#define OK 0#define MMF_FILE_SIZE (1024*512)const char* mmf_file_name = "d:\\mmf.txt";const char* mmf_share_name = "testmmf";//定义内存映射文件相关的全局变量HANDLE file_handle = NULL;HANDLE mfile_handle = NULL;void* mview_ptr = NULL;//打开内存映射文件和映射视图int open_mmf();//关闭内存映射文件相关资源void close_mmf();//定义指针struct Foo{ unsigned int id; char code[30]; char name[30];};using namespace std;int main(){ int open_status = open_mmf(); if(open_status){ cout<<"打开内存映射文件出错,错误号:"<<open_status<<endl; }else{ cout<<"成功打开了内存映射文件"<<endl; Foo* foo_ptr = (Foo*)mview_ptr; Foo foo; const size_t foo_size = sizeof(Foo); int count = MMF_FILE_SIZE / foo_size - 1; for(int i=0;i<=count;i++){ foo.id = i+1; sprintf(foo.name,"+%d",foo.id); sprintf(foo.code,"-%d",foo.id); memcpy(foo_ptr+i,&foo,foo_size); printf("copy %d\r",i); } cout<<"保存数据完毕"<<endl; cout<<"尝试读取数据"<<endl; for(int i=0;i<=count;i++){ foo = *(foo_ptr+i); cout<<"foo:"<<foo.id<<","<<foo.code<<","<<foo.name<<endl; } cout<<"读取数据完毕"<<endl; } system("pause"); close_mmf(); return EXIT_SUCCESS;}//打开内存映射文件int open_mmf(){ file_handle = CreateFile(mmf_file_name, GENERIC_ALL, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(INVALID_HANDLE_VALUE == file_handle){ return GetLastError(); } mfile_handle = CreateFileMapping(file_handle, NULL, PAGE_READWRITE, 0, MMF_FILE_SIZE, mmf_share_name); if(INVALID_HANDLE_VALUE == mfile_handle){ return GetLastError(); } mview_ptr = MapViewOfFile(mfile_handle, FILE_MAP_ALL_ACCESS, 0, 0, MMF_FILE_SIZE); return OK;}//释放内存映射文件占用的资源。void close_mmf(){ if(NULL != mview_ptr){ UnmapViewOfFile(mview_ptr); mview_ptr = NULL; } if(NULL != mfile_handle){ CloseHandle(mfile_handle); mfile_handle = NULL; } if(NULL != file_handle){ CloseHandle(file_handle); file_handle = NULL; }}
本文转自:(http://www.cnblogs.com/yukaizhao/archive/2011/05/19/memorymapfile_struct.html)
阅读全文
1 0
- C++中使用内存映射文件存取struct,并用指针访问
- 使用内存映射文件
- 使用内存映射文件
- python 科学计算学习一:numpy文件存取,内存映射
- python 科学计算学习一:numpy文件存取,内存映射
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- [转载]VC++中使用内存映射文件处理大文件
- VC++中使用内存映射文件处理大文件
- 通用简写表
- linux下php7安装memcached、redis扩展
- LeetCode Algorithm Longest Substring Without Repeating Characters
- vim 命令详解
- linux php添加ftp扩展模块
- C++中使用内存映射文件存取struct,并用指针访问
- svm(三)支持向量机之核函数
- linux下编译GD(freetype+libjpeg+libpng+gd-devel)
- 类似coc这种全球同服
- vagrant up报错 Warning: Authentication failure. Retrying...解决方案
- php preg_replace空格无法替换问题
- FFMPEG学习【libavutil】:Crypto and Hashing(二)
- 51nod1242 斐波那契数列的第N项
- virtualbox centos安装增强工具和问题详解