#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; } }