日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内存映射文件

發布時間:2025/3/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存映射文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

內存映射文件 (windows許多方法用此來在進程間傳送數據)
1.CreateFile
2.CreateFileMapping?//對含有SEC_LARGE_PAGES標志時用戶必須具有啟用內存鎖定頁面用戶權限,否則會失敗
3.MapViewOfFile
4. //FlushViewOfFile?//確保所做的修改已經被寫入到磁盤中,如果最初是FILE_MAP_COPY,將修改頁交換文件中的文件數據副本,如果是這樣的話ummapviewoffile后數據丟失。可以再做個PAGE_READWRITE視圖,再MoveMemory從前一視圖拷到這個視圖。
5.UnmapViewOfFile
6.CloseHandle(hMap);CloseHandle(hFile); //先后順序無關,MapViewOfFile副作用是增加hFile引用計數。

對多個進程共享同一個文件映射對象來說,所有進程使用的文件映射對象的名稱必須完全相同。

CreateFileMapping傳入INVALID_HANDLE_VALUE時映射頁交換文件,不再映射磁盤文件。

#include <Windows.h> #include <string> #include <iostream> using namespace std;bool FileReverse(const wchar_t* pcFileName) {BOOL bIsUnicode = false;HANDLE hFile = CreateFileW(pcFileName,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if( hFile == INVALID_HANDLE_VALUE ) //here must check, because createfilemapping can accept INVALID_HANDLE_VALUE, and different map view {cout<<"CreateFileW fail"<<endl;return false;}DWORD dwFileSize = GetFileSize(hFile,NULL);HANDLE hMap = CreateFileMappingW(hFile,NULL,PAGE_READWRITE,0,dwFileSize*sizeof(wchar_t),NULL);if( hMap == NULL ){cout<<"CreateFileMappingW fail"<<endl;CloseHandle(hFile);return false;}PVOID pvFile = MapViewOfFile(hMap,FILE_MAP_WRITE,0,0,0);if( pvFile == NULL ){cout<<"MapViewOfFile fail"<<endl;CloseHandle(hMap);CloseHandle(hFile);return false;}int iUnicodeTestFlag = -1;bIsUnicode = IsTextUnicode(pvFile,dwFileSize,&iUnicodeTestFlag);if(!bIsUnicode){char *pchar = (char*)pvFile;pchar[dwFileSize/sizeof(char)] = '\0';_strrev(pchar);pchar = strstr(pchar,"\n\r"); //find first \r\nwhile( pchar != NULL ){*pchar++ = '\r';*pchar++ = '\n';pchar = strstr(pchar,"\n\r");}}else{wchar_t *pwchar = (wchar_t*)pvFile;pwchar[dwFileSize/sizeof(wchar_t)] = L'\0';if((iUnicodeTestFlag & IS_TEXT_UNICODE_SIGNATURE) != 0){pwchar++;}_wcsrev(pwchar);pwchar = wcsstr(pwchar,L"\n\r"); //find first \r\nwhile( pwchar != NULL ){*pwchar++ = L'\r';*pwchar++ = L'\n';pwchar = wcsstr(pwchar,L"\n\r");}}UnmapViewOfFile(pvFile);CloseHandle(hMap);//delete manuly append '\0'SetFilePointer(hFile,dwFileSize,NULL,FILE_BEGIN);SetEndOfFile(hFile);CloseHandle(hFile);return true; }void wmain() {FileReverse(L"testu.txt"); }


?

總結

以上是生活随笔為你收集整理的内存映射文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。