本文共 1392 字,大约阅读时间需要 4 分钟。
进程间的通信方式有很多种, 上次我们说了最傻瓜的“共享外存/文件”的方法。 那么, 在本文中, 我们即将学习“共享内存”的方式实现进程间的通信, 这是IPC最快的方法。有的地方又把这种“共享内存”的方式叫做“内存映射文件”方式。
我们首先来看看进程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);
- strncpy(pBuf, szInfo, BUF_SIZE - 1);
- pBuf[BUF_SIZE - 1] = '\0';
- }
-
- UnmapViewOfFile(pBuf);
- CloseHandle(hMapFile);
- return 0;
- }
然后, 我们再来看看进程B对应的程序:
- #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;
转载地址:http://zkkqi.baihongyu.com/