http://blog.csdn.net/stpeace/article/details/39534361ios
進程間的通訊方式有不少種, 上次咱們說了最傻瓜的「共享外存/文件」的方法。 那麼, 在本文中, 咱們即將學習「共享內存」的方式實現進程間的通訊, 這是IPC最快的方法。有的地方又把這種「共享內存」的方式叫作「內存映射文件」方式。windows
咱們首先來看看進程A對應的程序:安全
#include <iostream> #include <windows.h> using namespace std; #define BUF_SIZE 1025 char szName[] = "NameOfMappingObject"; // 共享內存的名字 int main() { // 建立共享文件句柄 HANDLE hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // 物理文件句柄 NULL, // 默認安全級別 PAGE_READWRITE, // 可讀可寫 0, // 高位文件大小 BUF_SIZE, // 地位文件大小 szName // 共享內存名稱 ); char *pBuf = (char *)MapViewOfFile( hMapFile, // 共享內存的句柄 FILE_MAP_ALL_ACCESS, // 可讀寫許可 0, 0, BUF_SIZE ); while(1) { cout << "input..." << endl; char szInfo[BUF_SIZE] = {0}; gets(szInfo); // 其實gets並不安全 strncpy(pBuf, szInfo, BUF_SIZE - 1); pBuf[BUF_SIZE - 1] = '\0'; } UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; }
而後, 咱們再來看看進程B對應的程序:app
#include <iostream> #include <windows.h> using namespace std; #define BUF_SIZE 1025 char szName[] = "NameOfMappingObject"; // 共享內存的名字 int main() { // 建立共享文件句柄 HANDLE hMapFile = CreateFileMapping( INVALID_HANDLE_VALUE, // 物理文件句柄 NULL, // 默認安全級別 PAGE_READWRITE, // 可讀可寫 0, // 高位文件大小 BUF_SIZE, // 地位文件大小 szName // 共享內存名稱 ); char *pBuf = (char *)MapViewOfFile( hMapFile, // 共享內存的句柄 FILE_MAP_ALL_ACCESS, // 可讀寫許可 0, 0, BUF_SIZE ); while(1) { cout << "press any button to receive data..." << endl; getchar(); cout << pBuf << endl; } UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; }
前後運行上面兩個程序, 獲得的結果爲(下圖中的單詞that應該是than, 我寫錯了):學習