程序間通訊之檔案對映
阿新 • • 發佈:2019-01-05
send.cpp的內容如下:
#include <Windows.h> #include <iostream> int main() { // 建立一個命名的檔案對映控制代碼 HANDLE hMapping = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 0x100, "COMMUNICATION"); if (hMapping == NULL) { std::cout << "建立檔案映像物件失敗" << std::endl; return 0; } // 將檔案對映控制代碼關聯到程序的地址空間上 LPSTR StrData = (LPSTR)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (StrData == NULL) { std::cout << "檔案對映失敗" << std::endl; return 0; } // 向對映記憶體寫資料 do { std::cout << "請輸入內容: "; std::cin >> StrData; } while (strcmp(StrData, "exit") != 0); //釋放映像記憶體 UnmapViewOfFile(StrData); std::cout << "press any key to exit." << std::endl; std::cin.get(); return 0; }
recv.cpp的內容如下:
#include <iostream> #include <Windows.h> int main() { HANDLE hMapping = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, "COMMUNICATION"); if (hMapping == NULL) { std::cout << "開啟檔案映像物件失敗" << std::endl; std::cin.get(); return 0; } LPSTR StrData = (LPSTR)MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (StrData == NULL) { std::cout << "檔案對映失敗" << std::endl; std::cin.get(); return 0; } //獲取映像記憶體的資料量 std::cout << "等待接收資料..." << std::endl; while (true) { if (strlen(StrData) == 0) { Sleep(1); continue; } std::cout << "recv data: " << StrData << std::endl; StrData[0] = '\0'; } //釋放映像記憶體 UnmapViewOfFile(StrData); std::cout << "press any key to exit." << std::endl; std::cin.get(); return 0; }