c 中共享記憶體原理及實現 三步走

2021-08-20 14:01:23 字數 2363 閱讀 5559

一、什麼是共享記憶體

檔案對映是一種實現程序間單向或雙向通訊的機制。它允許兩個或多個本地程序間相互通訊。為了共享檔案或記憶體,所有的程序必須使用相同的檔案對映的名字或是控制代碼。

三、**實現

#include#include#include #include using namespace std;

#pragma warning(disable:4996)

int main()

else

getchar(); // 注意,程序關閉後,所有控制代碼自動關閉,所以要在這裡暫停

// 解除檔案對映,關閉記憶體對映檔案物件控制代碼

::unmapviewoffile(pbuffer);

::closehandle(hmap);

system("pause");

return 0;

return 0;

}

使用時,連續開啟兩次test.exe即可。

其中幾個比較重要的函式講解如下:

handle hfile, //物理檔案控制代碼

lpsecurity_attributes lpattributes, //安全設定

dword flprotect, //保護設定

dword dwmaximumsizehigh, //高位檔案大小

dword dwmaximumsizelow, //低位檔案大小

lpctstr lpname //共享記憶體名稱

);

hfile指定欲在其中建立對映的乙個檔案控制代碼。invalid_handle_value,即0xffffffff表示在頁面檔案中建立乙個

可共享對映檔案。

lpattributes它指明返回的控制代碼是否可以被子程序所繼承,指定乙個安全物件,在建立檔案對映時使用。

如果為null(用byval as long傳遞零),表示使用預設安全物件

flprotect有以下幾種方式:

page_readonly 以唯讀方式開啟對映

page_readwrite 以可讀、可寫方式開啟對映

page_writecopy 為寫操作留下備份

也可組合使用下述乙個或多個常數:    

sec_commit    為檔案對映乙個小節中的所有頁分配記憶體

sec_image      檔案是個可執行檔案

sec_reserve  為沒有分配實際記憶體的乙個小節保留虛擬記憶體空間

dwmaximumsizehigh檔案對映的最大長度的高32位

dwmaximumsizelow檔案對映的最大長度的低32位。如這個引數和dwmaximumsizehigh都是零,就用磁碟檔案的實際長度。

lpname指定檔案對映物件的名字。如存在這個名字的乙個對映,函式就會開啟它。

用vbnullstring可以建立乙個無名的檔案對映。

lpvoid winapi mapviewoffile(

__in dword dwdesiredaccess,

__in dword dwfileoffsethigh,

__in dword dwfileoffsetlow,

__in size_t dwnumberofbytestomap

); //將乙個檔案對映物件對映到當前應用程式的位址空間。

返回的檔案映像物件控制代碼。

可取以下值:

象被建立時必須指定page_readwrite 選項.

file_map_copy           可以讀取和寫入檔案.寫入操作會導致系統為該頁面建立乙份副本.在呼叫

page_execute_readwrite或page_execute_read保護屬性.

page_readwrite保護屬性.

page_readwrite保護屬性.

dwfileoffsethigh表示檔案對映起始偏移的高32位.

dwfileoffsetlow表示檔案對映起始偏移的低32位.(64kb對齊不是必須的)

dwnumberofbytes指定對映檔案的位元組數.

Mybatis執行原理(帶你三步走)

mybatis執行原理 帶你三步走 第一步 初始化階段,解析並載入到configuration例項中。每個基於 mybatis 的應用都是以乙個 sqlsessionfactory 的例項為中心的。sqlsessionfactory 的例項可以通過 sqlsessionfactorybuilder ...

django1 9 實現模型變更三步走

tust tust python python 2.7.6 default,mar 22 2014,22 59 38 gcc 4.8.2 on linux2 import django django.version 1,9,7,final 0 執行此命令提示沒有次命令 tust tust djcod...

C 中CONST的深入淺出 三步走

今天無聊,寫一點自己對 c 中 const 的理解,具體方法呢,還是按照三步走 是什麼,為什麼,怎麼樣。我相信大多數老程式猿都有著自己的思維方式,小風就比較習慣這種老套的方式。閒話就不多說了,開始正題。作為c 中關鍵字之一的const,起作用如下 1.內容上 其修飾的變數 函式 指標都為唯讀形式,即...