간단 한 윈도 공유 메모리 IPC 코드

다음으로 전송:http://www.cnblogs.com/lihaozy/archive/2012/08/14/2638009.html 
     윈도 공유 메모 리 는 두 프로 세 스 가 같은 메모 리 를 읽 고 쓸 수 있 도록 합 니 다.
    다음은 2 개의 프로 세 스 가 있 습 니 다. a. cpp 는 A 프로 세 스 를 생 성하 고 b. cpp 는 b 프로 세 스 를 생 성 합 니 다.그러면 a 프로 세 스 는 'Global \ \ \ MyFileMappingObject' 라 는 공유 메모리 블록 을 계속 읽 고 b 프로 세 스 는 'Global \ \ \ MyFileMappingObject' 라 는 공유 메모리 블록 을 계속 씁 니 다.IPC 를 실현 한다.
    
//a.cpp
#include <windows.h>
#include <string.h>
#include <string>
#include <iostream>
#include <tchar.h>
using namespace std;

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");    //            

int main(int argc, char *argv[])
{
    HANDLE hMapFile;
    LPCTSTR pBuf;

    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // use paging file
        NULL,                    // default security
        PAGE_READWRITE,          // read/write access
        0,                       // maximum object size (high-order DWORD)
        BUF_SIZE,                // maximum object size (low-order DWORD)
        szName);                 // name of mapping object

    if (hMapFile == NULL)
    {
        _tprintf(TEXT("Could not create file mapping object (%d).
"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).
"), GetLastError()); CloseHandle(hMapFile); return 1; } // main ,A B process , "Global\\MyFileMappingObject" // ,A pBuf while(1) { cout<<pBuf<<endl; cout<<"A process: hit keyboard to receive from B process"<<endl; getchar(); } UnmapViewOfFile(pBuf); CloseHandle(hMapFile); return 0; }
//b.cpp
#include <iostream>
#include <Windows.h>
#include <tchar.h>
using namespace std;

#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");    //            

int main()
{
    HANDLE hMapFile;
    LPCTSTR pBuf;

    hMapFile = CreateFileMapping(
        INVALID_HANDLE_VALUE,    // use paging file
        NULL,                    // default security
        PAGE_READWRITE,          // read/write access
        0,                       // maximum object size (high-order DWORD)
        BUF_SIZE,                // maximum object size (low-order DWORD)
        szName);                 // name of mapping object

    if (hMapFile == NULL)
    {
        _tprintf(TEXT("Could not create file mapping object (%d).
"), GetLastError()); return 1; } pBuf = (LPTSTR) MapViewOfFile(hMapFile, // handle to map object FILE_MAP_ALL_ACCESS, // read/write permission 0, 0, BUF_SIZE); if (pBuf == NULL) { _tprintf(TEXT("Could not map view of file (%d).
"), GetLastError()); CloseHandle(hMapFile); return 1; } // main ,A B process , "Global\\MyFileMappingObject" // ,B pBuf while(1) { TCHAR s[BUF_SIZE]; cout<<"B process: plz input sth. to be transfered to A process."<<endl; cin>>s; memcpy((PVOID)pBuf, s, BUF_SIZE); } }

좋은 웹페이지 즐겨찾기