悉野小楼

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

MFC学习 进程间通信

内存共享通信方式

server.cpp

复制代码
#include <stdio.h>
#include <Windows.h>
int main()
{
    HANDLE hFile;
    hFile = CreateFile("tmpfile", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        printf("create file failed");
        system("pause");
        return 0;
    }
    
    DWORD dwWrite;
    WriteFile(hFile, "test data", strlen("test data") + 1, &dwWrite, NULL);
    
    HANDLE hFileMapping;
    hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, "mytestfilemapping");
    if(hFileMapping == NULL)
    {

        CloseHandle(hFile);
        
        printf("Create file mapping failed!");
        system("pause");
        return 0;
    }
    /* 可以在这里面修改pfile
    char * pFile = (char*)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    if(pFile == NULL)
    {
        CloseHandle(hFileMapping);
        CloseHandle(hFile);
        printf("map view of file failed!");
        system("pause");
        return 0;
    }
    */
    Sleep(5000);
    CloseHandle(hFile);
    CloseHandle(hFileMapping);
    
    system("pause");
    return 0;
}
复制代码

client.cpp

复制代码
#include <stdio.h>
#include <Windows.h>
int main()
{
    HANDLE hFile;
    hFile = CreateFile("tmpfile", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
        NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
    if(hFile == INVALID_HANDLE_VALUE)
    {
        printf("create file failed");
        system("pause");
        return 0;
    }
    
    DWORD dwWrite;
    WriteFile(hFile, "test data", strlen("test data") + 1, &dwWrite, NULL);
    
    HANDLE hFileMapping;
    hFileMapping = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, "mytestfilemapping");
    if(hFileMapping == NULL)
    {

        CloseHandle(hFile);
        
        printf("Create file mapping failed!");
        system("pause");
        return 0;
    }
    /* 可以在这里面修改pfile
    char * pFile = (char*)MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    if(pFile == NULL)
    {
        CloseHandle(hFileMapping);
        CloseHandle(hFile);
        printf("map view of file failed!");
        system("pause");
        return 0;
    }
    */
    Sleep(5000);
    CloseHandle(hFile);
    CloseHandle(hFileMapping);
    
    system("pause");
    return 0;
}
复制代码

例子包括剪切板,  匿名管道(父子进程通信), 命名管道, 油槽(单向, 但可以一边同时建立服务与客户端),  内存共享

源码下载

posted on   悉野  阅读(1306)  评论(1编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示