|
共享內(nèi)存主要是通過映射機制實現(xiàn)的。 下面舉例說明如何將內(nèi)存映射文件用于共享內(nèi)存。 #include <windows.h> #include <iostream> #include <string> #include <cstring> using namespace std; int main() { string strMapName("ShareMemory"); // 內(nèi)存映射對象名稱 string strComData("This is common data!"); // 共享內(nèi)存中的數(shù)據(jù) LPVOID pBuffer; // 共享內(nèi)存指針 // 首先試圖打開一個命名的內(nèi)存映射文件對象 HANDLE hMap = ::OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, strMapName.c_str()); if (NULL == hMap) { // 打開失敗,創(chuàng)建之 hMap = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, strComData.length()+1, strMapName.c_str()); // 映射對象的一個視圖,得到指向共享內(nèi)存的指針,設置里面的數(shù)據(jù) pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); strcpy((char*)pBuffer, strComData.c_str()); cout << "寫入共享內(nèi)存數(shù)據(jù):" << (char *)pBuffer << endl; } else { // 打開成功,映射對象的一個視圖,得到指向共享內(nèi)存的指針,顯示出里面的數(shù)據(jù) pBuffer = ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); cout << "讀取共享內(nèi)存數(shù)據(jù):" << (char *)pBuffer << endl; } getchar(); // 注意,進程關閉后,所有句柄自動關閉,所以要在這里暫停 // 解除文件映射,關閉內(nèi)存映射文件對象句柄 ::UnmapViewOfFile(pBuffer); ::CloseHandle(hMap); system("pause"); return 0; } 連續(xù)兩次運行這個程序,它們的輸出結(jié)果如下所示:
功不成,身已退 |
|
|