一、进程与进程通信 

    进程间通信(Interprocess Communication, IPC)是指不同的进程之间进行数据共享和数据交换。

 二、进程间通信方式 

   1.  文件映射

    注:文件映射是在多个进程间共享数据的非常有效方法,有较好的安全性。但文件映射只能用于本地机器的进程之间,不能用于网络中,而开发者还必须控制进程间的同步

    使用内存映射文件的一般流程:(reference from: https://blog.csdn.net/qq_20183489/article/details/54646794)

    Windows进程间的通信

 

    另外,内存映射文件在处理大数据量的文件时表现出了良好的性能(实际上,文件越大,内存映射的优势就越明显)。示例可以参考:https://blog.csdn.net/zzq060143/article/details/54619571

  2.2 共享内存
        Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF(INVALID_HANDLE_VALUE)来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间

    共享内存实现数据共享示例如下:

 1 //发送数据的进程先启动,用于发送数据,即将数据写入视图 。
 2 
 3 #include "stdafx.h"
 4 #include <Windows.h>
 5 #include <conio.h>
 6 
 7 #define BUFFER_SIZE    256
 8 TCHAR szMapFileName[] = TEXT("MyFileMappingName");  //映射文件名,即共享内存的名称
 9 TCHAR szSendData[]    = TEXT("Message from the send process.");
10 
11 int main()
12 {
13     HANDLE  hMapFile = NULL;
14     LPCTSTR pBuf = NULL;
15 
16     //1. 创建一个文件映射内核对象
17     hMapFile = ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUFFER_SIZE, szMapFileName);  //INVALID_HANDLE_VALUE表示创建一个进程间共享的对象
18     if (NULL == hMapFile)
19     {
20         _tprintf(TEXT("Could not create file mapping object (%d).\n"), GetLastError());
21         return -1;
22     }
23 
24     //2. 将文件数据映射到进程的地址空间
25     pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUFFER_SIZE);
26     if (NULL == pBuf)
27     {
28         _tprintf(TEXT("Could not map view of file (%d). \n"), GetLastError());
29 
30         CloseHandle(hMapFile);
31         hMapFile = NULL;
32 
33         return -1;
34     }
35 
36     //3. 写入到内存中
37     CopyMemory((void*)pBuf, szSendData, _tcslen(szSendData) * sizeof(TCHAR));  
38     _getch();  //这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车
39 
40     //4. 从进程的地址空间中撤消文件数据的映像
41     UnmapViewOfFile(pBuf);
42 
43     //5. 关闭文件映射对象和文件对象
44     CloseHandle(hMapFile);
45 
46     getchar();
47     return 0;
48 }
View Code

相关文章: