映射文件实现进程通信

发送端

    //1.在页面文件中创建一个可共享的文件句柄
    //2使用默认安全对象
    //3.可读,可写打开打开映射
    //4.最大长度的高32位
    //5.最大长度的低32位,此为size大小
    //6.指定文件映射对象的名字
    //return:新建文件映射对象的句柄,0表示出错
    HANDLE m_sh = CreateFileMappingA(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1000, "yingshe");
    if (!m_sh)
    {
        return 0;
    }
    //1.文件映射对象的句柄
    //2.权限
    //3.高32位,低32位,0:映射整个映像文件
    //return:文件映射在内存中的起始地址
    char* head = (char*)MapViewOfFile(m_sh, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    *(int*)head = 90;

接收端

    //1.权限:可读,可写
    //2.TRUE:表示可以由当前进程启动的新进程继承
    //3.文件映射对象的名称
    //return:文件映射对象的句柄,0表示出错
    HANDLE m_handle = OpenFileMappingA(FILE_MAP_ALL_ACCESS, TRUE, "yingshe");
    if (!m_handle)
    {
        return 0;
    }
    int* head = (int*)MapViewOfFile(m_handle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
    std::cout << *head;

 通常用的是boost是共享的内存,这个映射文件实现的。

posted @ 2014-08-10 23:08  zzyoucan  阅读(387)  评论(0编辑  收藏  举报