`
happmaoo
  • 浏览: 4325038 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Windows API一日一练(59)CreateFileMapping和MapViewOfFile函数

阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
在开发软件过程里,也经常碰到进程间共享数据的需求。比如A进程创建计算数据,B进程进行显示数据的图形。这样的开发方式可以把一个大程序分开成独立的小程序,提高软件的成功率,也可以更加适合团队一起开发,加快软件的开发速度。下面就来使用文件映射的方式进行共享数据。先要使用函数CreateFileMapping来创建一个想共享的文件数据句柄,然后使用MapViewOfFile来获取共享的内存地址,然后使用OpenFileMapping函数在另一个进程里打开共享文件的名称,这样就可以实现不同的进程共享数据。
函数CreateFileMappingMapViewOfFile声明如下:
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileMappingA(
__in HANDLE hFile,
__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
__in DWORD flProtect,
__in DWORD dwMaximumSizeHigh,
__in DWORD dwMaximumSizeLow,
__in_opt LPCSTR lpName
);
WINBASEAPI
__out
HANDLE
WINAPI
CreateFileMappingW(
__in HANDLE hFile,
__in_opt LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
__in DWORD flProtect,
__in DWORD dwMaximumSizeHigh,
__in DWORD dwMaximumSizeLow,
__in_opt LPCWSTR lpName
);
#ifdef UNICODE
#define CreateFileMappingCreateFileMappingW
#else
#define CreateFileMappingCreateFileMappingA
#endif // !UNICODE
WINBASEAPI
__out
LPVOID
WINAPI
MapViewOfFile(
__in HANDLE hFileMappingObject,
__in DWORD dwDesiredAccess,
__in DWORD dwFileOffsetHigh,
__in DWORD dwFileOffsetLow,
__in SIZE_T dwNumberOfBytesToMap
);
hFile是创建共享文件的句柄。
lpFileMappingAttributes是文件共享的属性。
flProtect是当文件映射时读写文件的属性。
dwMaximumSizeHigh是文件共享的大小高位字节。
dwMaximumSizeLow是文件共享的大小低位字节。
lpName是共享文件对象名称。
hFileMappingObject是共享文件对象。
dwDesiredAccess是文件共享属性。
dwFileOffsetHigh是文件共享区的偏移地址。
dwFileOffsetLow是文件共享区的偏移地址。
dwNumberOfBytesToMap是共享数据长度。
调用函数的例子如下:
#001//文件共享。
#002//蔡军生2007/10/27 QQ:9073204 深圳
#003void FileMapping(void)
#004{
#005 //打开共享的文件对象。
#006 m_hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS,
#007 FALSE,_T("TestFileMap"));
#008 if (m_hMapFile)
#009 {
#010 //显示共享的文件数据。
#011 LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,
#012 0,0,0);
#013 OutputDebugString(lpMapAddr);
#014 }
#015 else
#016 {
#017 //创建共享文件。
#018 m_hMapFile = CreateFileMapping( (HANDLE)0xFFFFFFFF,NULL,
#019 PAGE_READWRITE,0,1024,_T("TestFileMap"));
#020
#021 //拷贝数据到共享文件里。
#022 LPTSTR lpMapAddr = (LPTSTR)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,
#023 0,0,0);
#024 std::wstring strTest(_T("TestFileMap"));
#025 wcscpy(lpMapAddr,strTest.c_str());
#026
#027 FlushViewOfFile(lpMapAddr,strTest.length()+1);
#028 }
#029}



分享到:
评论

相关推荐

    API之网络函数---整理网络函数及功能

    CreateScalableFontResource 为一种TureType字体创建一个资源文件,以便能用API函数AddFontResource将其加入Windows系统 DrawText 将文本描绘到指定的矩形中 DrawTextEx 与DrawText相似,只是加入了更多的功能 ...

    通过APIHOOK钩子CreateFileMapping实现进程间密钥的传递.zip

    APIHOOK通过CreateFileMapping实现进程间密钥的传递 注exe不可关闭,关闭了内在中的密钥就不存在了

    windows用户称拦截api

    对于一个被映射的文件,主要是使用CreateFileMapping函数,利用他我们可以设定一些读写属性:PAGE_READONLY,PAGE_READWRITE,PAGE_WRITECOPY.第一参数指定只能对该映射文件进行读操作。任何写操作将导致内存访问错误。...

    createfilemapping_src.zip_CreateFileMapping

    内存映射文件,createfilemapping

    CreateFileMapping

    CreateFileMapping内存映射文件

    CreateFileMapping的使用

    CreateFileMapping的多种使用方式,对C语言学习很有帮助,希望能对你有用。在百度文库我也有上传。

    易语言ShareBin

    易语言ShareBin源码,ShareBin,OpenFileMapping,CreateFileMapping,MapViewOfFile,UnmapViewOfFile,CloseHandle,MoveMemory1,MoveMemory2

    Visual C++2010开发权威指南.part07

    16.2.5 GetFileTime()函数和 16.1.9 SetFileTime()函数 621 16.2.6 CreateFile()函数 622 16.2.7 WriteFile()函数 623 16.2.8 CloseHandle()函数 623 16.2.9 一个利用邮槽在不同进程 16.1.9 间通信的示例 623 16.3 ...

    易语言ShareText

    易语言ShareText源码,ShareText,OpenFileMapping,CreateFileMapping,MapViewOfFile,UnmapViewOfFile,CloseHandle,MoveMemory1,MoveMemory2,SetDlgItemText,GetDlgItemText,GetID

    文件映射实现文件逆序

    采用文件映射(CreateFileMapping与MapViewOfFile)可快速实现大文件(&gt;4G)的逆序输出,并且能快速根据行号索引行号内容!

    用API函数写的共享内存的类

    虽然有很共享内存的方法,但用别人的头文件时包括了一堆的别的东西,要求程序很小时,总感觉不好用!所以自己写了一个共享的类!只达到各程序间共享的目的!用于程序中时可以让其很小!

    Visual C++2010开发权威指南(共三部分).part1.rar

    8.4.1 DrawText()函数和字符串资源 404 8.4.2 定时器和变色文字 408 8.5 小结 410 第9章 Visual C++ 2010 MFC图形图像编程 411 9.1 Windows绘图简介 411 9.1.1 设备描述表 411 9.1.2 绘图属性 412 9.1.3 元文件和...

    内存映射的封装 包含读、写文件

    本代码 完美封装 好用易懂. 已在自己的项目中使用很久 稳定无bug, 内存映射的好处就不说了 但如果直接使用API 过程很繁复.

    内存共享,进程间通讯

    //创建文件映射对象 CreateFileMapping MapViewOfFile 内存共享,进程间通讯

    memorymapped:mmap (Linux) CreateFileMapping (win32) 的包装器

    具体来说,Linux 上的mmap和 Windows 上的CreateFileMapping 。 例子: MemoryMapped::File fh("thing"); // loop over mapped data ... for(size_t i=0; i&lt;fh.size(); i++) { do_something_with(fh[i]); } ...

    1120182525-梁瑛平1

    2、Windows(1)使用CreateFileMapping()创建一个文件映射对象(2)使用MapViewOfFile()将一个文件映射对象映射到当前程序地

    Windows 2000 Native API 电子书的源代码 [评价可免费]

    一、评价=评论加评价(评星星); 二、评价必须是下载完了该资源后的评价,没下载就评论无效; 三、如果正确评价了,返还积分可能需要等等,系统需要反应下。呵呵 评论时记得要评分。然后会返回给你花费的分再加1...

    windows 下Map文件读写的类

    原始代码是从codeproject上下载下来的,但是里面有问题,当文件大小大于4G以上是,不可能将所有内容都一次性装入内存,因此需要部分装入。另外文件的偏移量必须按照windows 页的大小对齐,这些都是原来的代码不曾...

    函数sync、fsync与fdatasync的总结整理(必看篇)

    一、术语解释 ...Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping)。内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,内

Global site tag (gtag.js) - Google Analytics