windows編程學習——共享內存(三)


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

#define SHAREMEMNAME	"ZSShareMem"

int main()
{
	DWORD	err;	
	HANDLE	hShareMem = INVALID_HANDLE_VALUE;
	char	*address;
	int		*p;
	hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,SHAREMEMNAME);	//創建共享內存
	if (hShareMem == INVALID_HANDLE_VALUE || hShareMem == NULL)										//判斷是否出錯
	{
		printf("共享內存創建失敗\n");
		return 0;
	}
	address = (char *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);					//將共享內存映射到當前進程地址空間
	memset(address,0,1024);
	sprintf(address,"1");
	printf("%s\n",address);
	p = (int *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
	*p = 247;
	printf("%d\n",p[0]);
	p[1] = 36;
	printf("%d\n",p[1]);
	getchar();
	return 0;
}

 

MapViewOfFile函數
功能:將一個文件映射對象映射到當前應用程序的地址空間
原型:
LPVOID WINAPI MapViewOfFile(

__in HANDLE hFileMappingObject, //文件映射對象的句柄

__in DWORD dwDesiredAccess, //訪問方式

__in DWORD dwFileOffsetHigh, //文件中映射起點的高32位地址

__in DWORD dwFileOffsetLow, //文件中映射起點的低32位地址

__in SIZE_T dwNumberOfBytesToMap //文件中要映射的字節數

);
訪問方式的取值:
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下創建

返回值:
如果成功,則返回映射視圖文件的開始地址值。
如果失敗,則返回 NULL.可調用GetLastError()查看錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章