Mapping

 

功能:创建文件映射

参数:

1)物理文件句柄

        任何可以获得的物理文件句柄, 如果需要创建一个物理文件无关的内存映射, 将它设置成为0xFFFFFFFF(INVALID_HANDLE_VALUE).

        如果需要和物理文件关联, 要确保你的物理文件创建的时候的访问模式和"保护设置"匹配, 比如: 物理文件只读, 内存映射需要读写就会发生错误. 推荐你的物理文件使用独占方式创建.

        如果使用 INVALID_HANDLE_VALUE, 也需要设置需要申请的内存空间的大小, 无论物理文件句柄参数是否有效, 这样 CreateFileMapping 就可以创建一个和物理文件大小无关的内存空间给你, 甚至超过实际文件大小, 如果你的物理文件有效, 而大小参数为0, 则返回给你的是一个和物理文件大小一样的内存空间地址范围. 返回给你的文件映射地址空间是可以通过复制, 集成或者命名得到, 初始内容为0.

2)安全设置

        就是安全设置, 不过一般设置NULL就可以了, 使用默认的安全配置. 在win2k下如果需要进行限制, 这是针对那些将内存文件映射共享给整个网络上面的应用进程使用是, 可以考虑进行限制.

3)保护方式

        类似文件的保护方式,例如只读、共享等。

4)高位文件大小

        由于我们的机器都是32位, 不可能得到超过32位进程所能寻址的私有32位地址空间, 一般设置0.
5)低位文件大小
        这个还是可以进行设置的, 不过为了让其他共享用户知道你申请的文件映射的相关信息, 我使用的时候是在获得的地址空间头部添加一个结构化描述信息, 记录内存映射的大小, 名称等, 这样实际申请的空间就比输入的增加了一个头信息结构大小.

6)内存映射的名称
        这是一个系统全局唯一的字符串,代表创建的mapping。如果使用的名称已经被mapping、互斥量、信号量等同名,则创建失败。

7) 调用CreateFileMapping的时候GetLastError的对应错误

        ERROR_FILE_INVALID          如果企图创建一个零长度的文件映射
        ERROR_INVALID_HANDLE    如果命名内存映射和现有的内存映射, 互斥量, 信号量同名
        ERROR_ALREADY_EXISTS    表示内存映射已经存在

 

 

功能:一个进程通过CreateFileMapping创建映射以后,其他进程通过OpenFileMapping获得这个映射的句柄从而操作这个映射。

参数:

1)保护方式

        与CreateFileMapping的DWORD flProtect参数相同。

2)句柄的继承属性

        如果为TRUE,表示能够被此进程创建的进程继承,否则为FALSE。

3)内存映射的名称

        与CreateFileMapping的LPCTSTR lpName相同。

返回:映射的句柄。

 

 

功能:无论是通过CreateFileMapping还是通过OpenFileMapping都只能得到映射的句柄,要想操作这个共享内存,必须得到此内存的地址。

参数:

1)内存映射的句柄

        CreateFileMapping或OpenFileMapping的返回值。

2)保护方式

        与CreateFileMapping的DWORD flProtect参数相同。

3)高位地址位移

4)地位地址位移

        一般为0。这样可以访问整个共享内存。

5)从地址位移开始的访问大小

        如果为0 ,则表示从地址位移开始一直到整个内存映射的结束。

返回:共享内存的可访问地址。

 

 

 

功能:调用MapViewOfFile获取内存地址,操作完共享内存之后,需要是否指针。

参数:MapViewOfFile的返回值。

 

内存映射是系统对象,使用完需要调用CloseHandle()关闭句柄。

 

下面是两个进程共享内存的例子(摘自MSDN)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值