1. 程式人生 > >【IPC進程間通訊之三】內存映射文件Mapping File

【IPC進程間通訊之三】內存映射文件Mapping File

eas -h 大小 b2c iss ipc etl enter bject

IPC進程間通信+共享內存Mapping

IPC(Inter-Process Communication。進程間通信)。 文件映射(Mapping)是一種將文件內容映射到內存地址的技術,通過對映射內存,讀寫文件如同讀寫內存一般簡單。

多個進程映射同一個文件映射對象,也即多個進程映射到同一個物理存儲頁面,因此。當一個進程向映射內存寫入數據時,其它進程能夠通過映射內存讀取數據。通過這個機制實現進程間通信。

1.內存文件映射Mapping File :

A進程創建一個命名的Mapping對象,並在映射內存中寫入須要共享的數據。B進程通過對象名打開Mapping對象,映射該Mapping對象。從映射內存中讀取數據。

2.基本API函數 : 建Mapping對象: HANDLE CreateFileMapping(
HANDLE hFile, //物理文件句柄
LPSECURITY_ATTRIBUTES lpAttributes,
//安全設置
DWORD flProtect, //保護設置
DWORD dwMaximumSizeHigh, //高位文件大小
DWORD dwMaximumSizeLow, //低位文件大小
LPCTSTR lpName //共享內存名稱
);
該函數返回創建的Mapping對象。

創建映射內存: LPVOID MapViewOfFile(
  HANDLE hFileMappingObject, //Mapping對象
DWORD dwDesiredAccess, //存取類別
DWORD dwFileOffsetHigh, //映射文件高位
DWORD dwFileOffsetLow, //映射文件地位
SIZE_T dwNumberOfBytesToMap //映射字節數
);
該函數用於創建Mapping對象的映射內存,返回映射內存。

內存復制 VOID CopyMemory(
PVOID Destination, //要復制內存塊的目的地址
CONST VOID *Source, //要復制內存塊的源地址
SIZE_T Length //復制的字節數
);
該函數用於將數據拷貝到映射內存。

打開Mapping對象: HANDLE OpenFileMapping(
DWORD dwDesiredAccess , // 存取權限
BOOL bInheritHandle , //繼承設置,一般設為FALSE
LPCTSTR lpName // Mapping對象名
);
該函數用於打開一個存在的Mapping對象。返回Mapping對象句柄。 3.牛刀小試: 先在VC6.0中執行process1程序。在執行process2程序: 技術分享
執行效果: 技術分享
process1程序: process2 程序:


【IPC進程間通訊之三】內存映射文件Mapping File