共享内存的例子(转msdn)

Creating Named Shared Memory

To share data, multiple processes can use memory-mapped files that the system paging file stores.

First Process

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
TCHAR szMsg[]=TEXT("Message from first process");
int main()
{
   HANDLE hMapFile;
   LPCTSTR pBuf;
   hMapFile = CreateFileMapping(
                 INVALID_HANDLE_VALUE,    // use paging file
                 NULL,                    // default security 
                 PAGE_READWRITE,          // read/write access
                 0,                       // max. object size 
                 BUF_SIZE,                // buffer size  
                 szName);                 // name of mapping object
 
   if (hMapFile == NULL) 
   { 
      printf("Could not create file mapping object (%d).\n", 
             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) 
   { 
      printf("Could not map view of file (%d).\n", 
             GetLastError()); 
      return 2;
   }
   
   CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
   _getch();
   UnmapViewOfFile(pBuf);
   CloseHandle(hMapFile);
   return 0;
}
 

Second Process

#include <windows.h>
#include <stdio.h>
#include <conio.h>
#define BUF_SIZE 256
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
int main()
{
   HANDLE hMapFile;
   LPCTSTR pBuf;
   hMapFile = OpenFileMapping(
                   FILE_MAP_ALL_ACCESS,   // read/write access
                   FALSE,                 // do not inherit the name
                   szName);               // name of mapping object 
 
   if (hMapFile == NULL) 
   { 
      printf("Could not open file mapping object (%d).\n", 
             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) 
   { 
      printf("Could not map view of file (%d).\n", 
             GetLastError()); 
      return 2;
   }
   MessageBox(NULL, pBuf, TEXT("Process2"), MB_OK);
   UnmapViewOfFile(pBuf);
   CloseHandle(hMapFile);
 
   return 0;
}
 

这个例子的意思是,进程1开一个叫"Global\\MyFileMappingObject"的共享内存,然后把一片数据"Message from first process"拷到共享内存里面,然后等待用户的_getch()。这时,进程2开始运行,它以相同的名字"Global\\MyFileMappingObject"打开共享内存,把进程1放在里面的数据"Message from first process"读出来,然后退出。接着用户实施_getch(),进程1也退出,共享内存被撤销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值