Windows共享記憶體解析

2021-08-04 14:02:42 字數 2650 閱讀 2332

在windows程式開發過程中,當多個程序之間需要使用同樣的資料的時候我們最好的方式就是通過共享記憶體進行處理(比如:當a程序執行時,進行資料處理,那麼此時我想知道資料是不是正確,用b監控,那麼a與b之間就可以使用共享記憶體的方式,並且這時來個c程序,他也可以訪問這塊共享記憶體資料進行監控)。

1.共享記憶體的原理_in_ handle hfile,

_in_opt_ lpsecurity_attributes lpattributes,

_in_ dword flprotect,

_in_ dword dwmaximumsizehigh,

_in_ dword dwmaximumsizelow,

_in_opt_ lpctstr lpname);

引數解釋:

hfile
用於建立檔案對映物件的檔案的控制代碼。一般情況我們將這個引數設定為invalid_handle_value,如果hfile設為invalid_handle_value,呼叫程序還必須在dwmaximumsizehighdwmaximumsizelow引數中指定檔案對映物件的大小。

lpattributes
保護設定或者稱為安全設定,我們一般設定為null,這樣就是windows的預設安全設定。

flprotect
訪問許可權設定,通常有page_readonlypage_readwritepage_writecopy,釋義分別為唯讀,可讀寫,寫時複製訪問(留下備份)。

dwmaximumsizehigh和dwmaximumsizelow
高低位檔案大小,當flprotect 設定為唯讀時,這樣我們並不改變其大小,所以可以將這兩個引數設定為0。否則我們將dwmaximumsizehigh設定為0,dwmaximumsizelow設定為我們想開闢的記憶體位元組數。

lpname
共享檔案記憶體的名稱,一般比如我們開闢時設定為sharememorytest,當我們訪問時則也是訪問這個名稱sharememorytest

3.將共享記憶體對映到程序的位址空間mapviewoffile

msdn中關於mapviewoffile的定義

lpvoid winapi mapviewoffile(

_in_ dword dwdesiredaccess,

_in_ dword dwfileoffsethigh,

_in_ dword dwfileoffsetlow,

_in_ size_t dwnumberofbytestomap

);

引數解釋:

dwdesiredaccess
dwfileoffsethigh和dwfileoffsetlow
檔案對映起始偏移的高32位和低32位,通常情況都設定為0。

dwnumberofbytestomap
_in_ dword dwdesiredaccess,

_in_ bool binherithandle,

_in_ lpctstr lpname);

引數釋義

dwdesiredaccess
mapviewoffile中的dwdesiredaccess釋義一樣。

binherithandle
如果此引數為true,createprocess函式建立的程序 可以繼承該控制代碼; 否則,控制代碼不能被繼承,一般情況下我們設定為false。

lpname

寫端

#include 

#include

#include

#pragma warning(disable:4996)

using

namespace

std;

int main()

讀端

#include 

#include

#include

#pragma warning(disable:4996)

using

namespace

std;

int main()

else

system("pause");

::unmapviewoffile(pbuffer);

::closehandle(hmap);

return

0;}

Windows共享記憶體

windows共享記憶體可以讓兩個程序對同一塊記憶體進行讀寫。a.cpp include include include include include using namespace std define buf size 256tchar szname text 指向同一塊共享記憶體的名字 in...

Windows共享記憶體示例

windows共享記憶體可以讓兩個程序對同一塊記憶體進行讀寫。a.cpp include include include include include using namespace std define buf size 256tchar szname text 指向同一塊共享記憶體的名字 in...

Windows共享記憶體示例

windows共享記憶體示例 共享記憶體主要是通過對映機制實現的。下面舉例說明如何將記憶體對映檔案用於共享記憶體。第一次執行這個例子時,它建立了共享記憶體,並寫入資料 this is common data 只要建立共享記憶體 的程序沒有關閉控制代碼hmap,以後執行的程式就會讀出共享記憶體裡面的資...