亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Windows > 正文

windows下利用文件映射實現共享內存

2020-05-27 13:11:27
字體:
來源:轉載
供稿:網友

windows下利用文件映射實現共享內存的辦法比較簡單,下面是實現代碼,細節用注釋說明.調用類似linux下shm的操作.該類沒有進行太多的測試,歡迎提出問題和bug~~:)#include <windows.h>#include <string>#include <iostream>#include <assert.h>using std::string;using std::cout;using std::endl;#pragma warning(disable: 4311)class shareMemory{private: LPWSTR shm_name_u; bool is_create_file; void * sh_base; HANDLE semaphore; HANDLE file_mapping; int addr_len;public:/*create_file用來說明是用磁盤文件映射還是頁文件映射,如果用磁盤文件映射,共享內存不會出現存儲器release后出現違規訪問的問題,但是會在磁盤上建立一個文件,文件的名稱由參數shm_name給定.如果用頁文件映射,則不會在磁盤上建立一個文件*/ shareMemory(const string& shm_name, bool create_file=false):is_create_file(create_file) { const char * _c_shm_name = shm_name.c_str(); int _size =(int)shm_name.length()+1; shm_name_u=(LPWSTR)malloc(_size*2); MultiByteToWideChar(CP_ACP,0,_c_shm_name,_size,shm_name_u,_size); semaphore = CreateSemaphore(NULL,1,1,NULL); sh_base = NULL; file_mapping = INVALID_HANDLE_VALUE; } void * shm_open(void* addr,const int length, DWORD protect) { addr_len = length; HANDLE _file_handle = INVALID_HANDLE_VALUE; if(is_create_file) { _file_handle= CreateFile(shm_name_u,GENERIC_READ|GENERIC_WRITE,0, NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);#ifdef _DEBUG if(_file_handle==INVALID_HANDLE_VALUE) cout<<"can not create file! we use page file instead!";#endif //end _DEBUG }/*打開指定名稱的文件映射,如果不存在則創建一個*/ file_mapping = OpenFileMapping(PAGE_READWRITE,false,shm_name_u ); if(file_mapping!=NULL) goto file_mapping_exist; file_mapping = CreateFileMapping(_file_handle,NULL,PAGE_READWRITE, 0,length,shm_name_u);#ifdef _DEBUG assert(file_mapping);#endif if(file_mapping==NULL) return NULL;file_mapping_exist: sh_base = MapViewOfFileEx(file_mapping,protect,0,0,length,addr); CloseHandle(_file_handle); return sh_base; } /*往共享內存中寫數據,返回寫出數據的字節個數*/ int shm_write(void *dest, void * src, int size) { if(!check_adress(dest)) return -1; int _write_count = (int)sh_base+addr_len - (int)dest; if(_write_count>size) _write_count = size;/*利用semaphore進行保護映射的區域(同一進程的不同線程調用時候才進行保護)*/ WaitForSingleObject(semaphore,INFINITE); memcpy(dest,src,_write_count); ReleaseSemaphore(semaphore,1,NULL); FlushViewOfFile(sh_base,_write_count); return _write_count; } /*從共享內存中讀數據,返回讀出的數據字節個數**/int shm_read(void* src, void * dest, int size) { if(!check_adress(src)) return -1; int _read_count = (int)sh_base+addr_len -(int) src; if(_read_count>size) _read_count = size; memcpy(dest,src,_read_count); return _read_count; } ~shareMemory() { UnmapViewOfFile(sh_base); free(shm_name_u); CloseHandle(semaphore); CloseHandle(file_mapping); }private :/*進行地址檢測*/ bool check_adress(void* addr) { if( ( (int)addr <(int)sh_base) || ((int)addr > (int)sh_base+addr_len) ) { SetLastError(ERROR_ACCESS_DENIED);#ifdef _DEBUG printf("access denied,the destination address out of the map view!");#endif //_DEBUG return false; } return true; }};

測試:寫進程的主函數:

int main(){ shareMemory sm("boost", false); void * bs = sm.shm_open(NULL,1000*4,FILE_MAP_WRITE); if(bs==NULL) return -1; int a[10]; for(int i=0; i<10; ++i) a[i] = i; sm.shm_write(bs,a,10*4); Sleep(100000);}讀進程的主函數:

 

 

int main(){ shareMemory sm("boost", false); void * bs = sm.shm_open(NULL,1000,FILE_MAP_READ); if(bs==NULL) { cout<<"null"; return -1; } int b[10]; sm.shm_read(bs,b,10*4); for(int i=0; i<10; ++i) cout<<b[i]<<" ";}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品一区二区三区介绍| 中文日韩在线观看| 精品久久久久久中文字幕大豆网| 夜夜躁日日躁狠狠久久88av| 亚洲国产精品久久精品怡红院| 欧美日韩色婷婷| 亚洲高清久久久久久| 6080yy精品一区二区三区| 一本一本久久a久久精品牛牛影视| 亚洲色图日韩av| 狠狠色噜噜狠狠狠狠97| 日韩毛片在线观看| 午夜精品久久久久久久99黑人| 色综合久久88| 亚洲理论在线a中文字幕| 萌白酱国产一区二区| 亚洲成人免费在线视频| 精品中文字幕视频| 亚洲综合色av| 久久久久久久久久久亚洲| 国模视频一区二区三区| 亚洲跨种族黑人xxx| 在线国产精品视频| 国产精品视频男人的天堂| 91免费欧美精品| 久久久久久久久久久免费| 91夜夜揉人人捏人人添红杏| 在线观看欧美成人| 福利一区视频在线观看| 国外成人免费在线播放| 久久久精品美女| 欧美第一淫aaasss性| 国产性猛交xxxx免费看久久| 另类天堂视频在线观看| 日本成人在线视频网址| 亚洲视频在线免费看| 国产91色在线免费| 亚洲色图激情小说| 国产精品啪视频| 久久亚洲精品视频| 黄色精品一区二区| 国模叶桐国产精品一区| 日韩欧美在线字幕| 国产99久久久欧美黑人| 一本大道亚洲视频| 日韩中文字幕免费看| 中文字幕欧美日韩在线| 国产v综合v亚洲欧美久久| 亚洲精品国产精品乱码不99按摩| 另类天堂视频在线观看| 日韩精品有码在线观看| 欧美性猛交xxxx免费看| 亚洲天堂第二页| 中文字幕亚洲一区二区三区| 成人网页在线免费观看| 91久久夜色精品国产网站| 亚洲精品日韩av| 在线亚洲国产精品网| 91精品国产乱码久久久久久蜜臀| 亚洲欧美999| 国产成人免费av| 免费av在线一区| 亚洲综合精品一区二区| 欧美—级a级欧美特级ar全黄| 久久露脸国产精品| 亚洲视频电影图片偷拍一区| 国产精品香蕉av| 日韩欧美一区二区三区久久| 久热精品在线视频| 国产精品女人网站| 国产精品日韩av| 亚洲人免费视频| 国产精品嫩草影院一区二区| 欧美另类老女人| 日韩a**中文字幕| 九九九热精品免费视频观看网站| 欧美性视频网站| 亚洲成人精品久久| 欧美国产日韩中文字幕在线| 欧美精品手机在线| 91欧美激情另类亚洲| 日韩在线观看你懂的| 国产成人啪精品视频免费网| 亚洲男人第一网站| 成人动漫网站在线观看| 日韩欧美精品在线观看| 高清欧美性猛交| 国产成人一区二区在线| 大胆欧美人体视频| 欧美美最猛性xxxxxx| 92福利视频午夜1000合集在线观看| 国产日本欧美一区| 精品亚洲国产视频| 国产精品美女久久久久久免费| 亚洲aⅴ男人的天堂在线观看| 亚洲成人在线视频播放| 成人免费福利视频| 中文字幕少妇一区二区三区| 日韩欧美中文字幕在线播放| 九九九久久国产免费| 国产精品久久久久久亚洲调教| 92版电视剧仙鹤神针在线观看| 性夜试看影院91社区| 国产福利视频一区二区| 欧美一级片在线播放| 国产成人精品av| 91福利视频网| 精品视频—区二区三区免费| 三级精品视频久久久久| 高清欧美一区二区三区| 欧美日韩在线影院| 海角国产乱辈乱精品视频| 成人午夜高潮视频| 亚洲成人激情在线| 色久欧美在线视频观看| 麻豆乱码国产一区二区三区| 亚洲欧美综合v| 日韩av成人在线观看| 中文字幕精品国产| 高清在线视频日韩欧美| 2019中文在线观看| 欧美一级电影久久| 欧美高清在线播放| 亚洲精品永久免费精品| 亚洲欧洲日产国产网站| 亚洲精品aⅴ中文字幕乱码| 色妞在线综合亚洲欧美| 国产精品日日摸夜夜添夜夜av| 精品欧美aⅴ在线网站| 97视频在线观看播放| 国产偷亚洲偷欧美偷精品| 97碰碰碰免费色视频| 亚洲精品视频在线观看视频| 欧美精品九九久久| 日韩在线视频观看正片免费网站| 欧美亚洲另类制服自拍| 成人妇女淫片aaaa视频| 久久福利视频网| 色偷偷av一区二区三区乱| 97成人精品视频在线观看| 亚洲一区二区中文| 97视频在线免费观看| 欧美日韩国产一区中文午夜| 亚洲欧美激情另类校园| 成人a免费视频| 亚洲精品资源美女情侣酒店| 国产手机视频精品| 国产精品日韩一区| 国产精品扒开腿做爽爽爽的视频| 日本国产精品视频| 国产精品久久久久久久久免费| 美女视频黄免费的亚洲男人天堂| 精品中文字幕在线2019| 91久久精品视频| www.亚洲天堂| 国产欧美在线观看| 亚洲精品免费在线视频| 国产精品爽爽ⅴa在线观看| 亚洲视屏在线播放| 中文字幕欧美精品在线| 成人免费高清完整版在线观看| 亚洲jizzjizz日本少妇| 日韩一中文字幕| 欧美日韩亚洲精品内裤|