Windows or Linux环境下利用“共享内存”实现进程间通信的C/C++代码

来源:互联网 发布:肩颈按摩仪 知乎 编辑:程序博客网 时间:2024/06/06 01:01

原文链接:http://blog.csdn.net/stpeace/article/details/39534361(windows)

http://blog.chinaunix.net/uid-26000296-id-3421346.html(Linux,本文未列取,请查看链接)

进程A对应的程序:

#include <iostream>#include <windows.h>using namespace std;#define BUF_SIZE 1025char 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对应的程序:

#include <iostream>#include <windows.h>using namespace std;#define BUF_SIZE 1025char szName[] = "NameOfMappingObject";    // 共享内存的名字int main(){// 创建共享文件句柄    HANDLE hMapFile = OpenFileMapping(        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;}

结果:




阅读全文
0 0
原创粉丝点击