共享内存源码
来源:互联网 发布:人性的枷锁 知乎 编辑:程序博客网 时间:2024/05/01 16:23
FileMapping.h
#pragma once#define WIN32_LEAN_AND_MEAN #include <windows.h>class FileMapping{public:FileMapping();~FileMapping();enum OpenMode { FMOM_READ, FMOM_READ_WRITE };BOOL Open(LPCTSTR pchsMappingName, LPSTR* ppchsBuf, DWORD openMode, DWORD fileSize, DWORD dwOffset = 0);void CloseFileMapping();private:struct _FM{HANDLE hFileMapping;LPSTR pFileBuf;};_FM m_p_fm[1];};
FileMapping.cpp
#include "FileMapping.h"FileMapping::FileMapping(){ZeroMemory(m_p_fm, sizeof(_FM));}FileMapping::~FileMapping(){CloseFileMapping();}BOOL FileMapping::Open(LPCTSTR pchsMappingName, LPSTR* ppchsBuf, DWORD openMode, DWORD fileSize, DWORD dwOffset /*= 0*/){DWORD protect, desiredAccess;if ( openMode == FMOM_READ ){protect = PAGE_READONLY;desiredAccess = FILE_MAP_READ;}else if ( openMode == FMOM_READ_WRITE ){protect = PAGE_READWRITE;desiredAccess = FILE_MAP_WRITE;}else{return FALSE;}m_p_fm->hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, protect, 0, fileSize, pchsMappingName);if ( m_p_fm->hFileMapping ){m_p_fm->pFileBuf = (LPSTR) MapViewOfFile(m_p_fm->hFileMapping, desiredAccess, 0, dwOffset, fileSize);*ppchsBuf = m_p_fm->pFileBuf;}return *ppchsBuf != NULL;}void FileMapping::CloseFileMapping(){if ( m_p_fm->pFileBuf ){if ( UnmapViewOfFile(m_p_fm->pFileBuf) )m_p_fm->pFileBuf = NULL;}if ( m_p_fm->hFileMapping ){if ( CloseHandle(m_p_fm->hFileMapping) )m_p_fm->hFileMapping = NULL;}}
使用:
进程1
FileMapping fm;char* pTmp = NULL;if (fm.Open(GET_DIR_MEMORY_NAME_U, (LPSTR*) &pTmp, FileMapping::FMOM_READ_WRITE, bufLen/*分配空间长度*/)){//通知进程2写入数据 //保存数据strcpy_s(csDir,nDirLen,pTmp);fm.CloseFileMapping();}
进程2
//收到写数据请求FileMapping fm;char *pBuf = NULL;if ( fm.Open(GET_DIR_MEMORY_NAME_U, &pBuf, FileMapping::FMOM_READ_WRITE, bufLen/*分配空间长度*/) ){//写入数据memcpy(pBuf,"12345",MAX_PATH);fm.CloseFileMapping();}
0 0
- 共享内存源码
- 共享内存操作类(C#源码)
- 共享内存操作类(C#源码)
- 共享内存操作类(C#源码)
- 共享内存操作类(C#源码)
- C#共享内存操作类(含源码)
- C#共享内存实例 附源码
- 共享内存操作类(C#源码)[转]
- 共享内存操作类(C#源码)
- 共享内存操作类(C#源码)
- 共享内存操作类(C#源码)
- Android 匿名共享内存驱动源码分析
- 一个共享内存封装类的源码
- 共享内存操作类(C#源码)
- Android 匿名共享内存驱动源码分析
- 【共享内存】共享内存
- Linux进程间通信源码剖析,共享内存(mmap)
- Linux进程间通信源码剖析,共享内存(mmap)
- 剑指offer (30)选择问题-----1.有一组N个数,确定其中第K个最大者;2.求最小的k个数
- ipv4网络中特殊地址
- Supermarket 并查集或贪心
- oracle 数据库无法自动创建snapshot
- 如何找回U盘清理了的文件
- 共享内存源码
- 放假咯,才2天啊
- Android 解读Volley
- sftp opensuse配置
- git / ssh 不用每次都输入密码的方法
- TortoiseGit的远程拉取
- 硬盘丢失了文件还能找回吗
- 白话机器学习算法(十五)文档与图片的特征提取(学习笔记)
- 回调函数