1. 程式人生 > >windows程式設計學習——共享記憶體(二)

windows程式設計學習——共享記憶體(二)


#include <stdio.h>
#include <Windows.h>

#define SHAREMEMNAME	"ZSShareMem"

int main()
{
	char	*szShareMem = NULL;
	HANDLE	hShareMem	= INVALID_HANDLE_VALUE;
	
	hShareMem = OpenFileMapping(FILE_MAP_ALL_ACCESS,FALSE,SHAREMEMNAME);				//開啟一個已經存在的共享記憶體(ZSShareMem),獲得所有許可權進行訪問
	if (hShareMem == NULL || hShareMem == INVALID_HANDLE_VALUE)
	{
		printf("檔案開啟失敗");
	}
	szShareMem = (char *)MapViewOfFile(hShareMem,FILE_MAP_WRITE|FILE_MAP_READ,0,0,0);	//將共享記憶體對映到當前程序地址空間
	printf("%s\n",szShareMem);															//列印共享記憶體中的資訊

	getchar();
	return 0;
}

OpenFileMapping函式:

功能:開啟一個現成的檔案對映物件
原型:
OpenFileMapping(
__in DWORDdwDesiredAccess,//訪問方式
__in BOOLbInheritHandle,//如這個函式返回的控制代碼能由當前程序啟動的新程序繼承,則這個引數為TRUE
__in LPCSTRlpName//指定要開啟的檔案對映物件名稱
);

訪問方式的取值:
FILE_MAP_WRITE對映可讀可寫。檔案對映物件必須通過PAGE_READWRITE訪問建立。
FILE_MAP_READ對映只讀。檔案對映物件必須通過PAGE_READ 或 PAGE_READWRITE訪問建立。
FILE_MAP_ALL_ACCESS與FILE_MAP_WRITE相同。
FILE_MAP_COPY對映時保留寫操作的副本。檔案對映物件必須用PAGE_WRITECOPY訪問在win95下建立