网站大量收购独家精品文档,联系QQ:2885784924

CreateFileMapping的使用.pdf

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CreateFileMapping的使用

CreateFileMapping 的使用 测试创建和打开文件映射的时候老是得到句柄无效的错误, 仔细看了 MSDN 以后才发觉是函数认识不 透, 这里把相关的解释翻译出来 HANDLE CreateFileMapping( HANDLE hFile, //物理文件句柄 LPSECURITY_ATTRIBUTES lpAttributes, //安全设置 DWORD flProtect, //保护设置 DWORD dwMaximumSizeHigh, //高位文件大小 DWORD dwMaximumSizeLow, //低位文件大小 LPCTSTR lpName //共享内存名称 ); 1) 物理文件句柄 任何可以获得的物理文件句柄, 如果你需要创建一个物理文件无关的内存映射也无妨, 将它设置成 为 0xFFFFFFFF(INVALID_HANDLE_VALUE)就可以了. 如果需要和物理文件关联, 要确保你的物理文件创建的时候的访问模式和保护设置匹配, 比如 : 物理文件只读, 内存映射需要读写就会发生错误. 推荐你的物理文件使用独占方式创建. 如果使用 INVALID_HANDLE_VALUE, 也需要设置需要申请的内存空间的大小, 无论物理文件句柄参数是 否有效, 这样 CreateFileMapping 就可以创建一个和物理文件大小无关的内存空间给你, 甚至超过实际文 件大小, 如果你的物理文件有效, 而大小参数为 0, 则返回给你的是一个和物理文件大小一样的内存空间 地址范围. 返回给你的文件映射地址空间是可以通过复制, 集成或者命名得到, 初始内容为 0. 2) 保护设置 就是安全设置, 不过一般设置NULL 就可以了, 使用默认的安全配置. 在 win2k 下如果需要进行限制, 这是针对那些将内存文件映射共享给整个网络上面的应用进程使用是, 可以考虑进行限制. 3) 高位文件大小 弟兄们, 我想目前我们的机器都是 32 位的东东, 不可能得到超过 32 位进程所能寻址的私有 32 位地 址空间, 一般还是设置 0 吧, 我没有也不想尝试将它设置超过 0 的情况. 4) 低位文件大小 这个还是可以进行设置的, 不过为了让其他共享用户知道你申请的文件映射的相关信息, 我使用的 时候是在获得的地址空间头部添加一个结构化描述信息, 记录内存映射的大小, 名称等, 这样实际申请的 空间就比输入的增加了一个头信息结构大小了, 我认为这样类似 BSTR 的方式应该是比较合理的. 5) 共享内存名称 这个就是我今天测试的时候碰壁的祸根, 因为为了对于内存进行互斥访问, 我设置了一个互斥句柄, 而名称我选择和命名共享内存同名, 之下就是因为他们使用共同的 namespace 导致了错误, 呵呵. 7) 调用 CreateFileMapping 的时候 GetLastError 的对应错误 ERROR_FILE_INVALID 如果企图创建一个零长度的文件映射, 应有此报 ERROR_INVALID_HANDLE 如果发现你的命名内存空间和现有的内存映射, 互斥量, 信号量, 临界区 同名就麻烦了 ERROR_ALREADY_EXISTS 表示内存空间命名已经存在 8) 相关服务或者平台的命名保留 Terminal Services: 命名可以包含 Global 或者 Local 前缀在全局或者会话名空间初级文件映射. 其他部分可以包 含任何除了 ()以外的字符, 可以参考 Kernel Object Name Spaces. 摘要: 本文给出了一种方便实用的解决大文件的读取、存储等处理的方法 ,并结合相关程序代码对具体的 实现过程进行了介绍。 引言 文件操作是应用程序最为基本的功能之一,Win32 API 和 MFC 均提供有支持文件处理的函数和类,常用 的有 Win32 API 的 CreateFile()、WriteFile()、ReadFile()和 MFC 提供的 CFile 类等。一般来说,以上这 些函数可以满足大多数场合的要求,但是

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档