进程入门之使用文件映射

服务端涉及的API

1、CreateFileMapping   创建一个特定大小的文件映射对象,对象名为该函数的最后一个参数. 另外这个函数的第一个参数是 物理文件句柄,   任何可以获得的物理文件句柄, 如果你需要创建一个物理文件无关的内存映射也无妨, 将它设置成为 0xFFFFFFFF(INVALID_HANDLE_VALUE)就可以了.

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

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

  

 

2、 MapViewOfFile   把这个文件对象 映射到 该进程的地址空间,即该进程可以用这个 文件对象了,返回一个指针,如m_pSharedBlock

3、利用返回的指针,可以往里面写数据。如  memcpy(m_pSharedBlock,(char*)str.GetBuffer(str.GetLength()),str.GetLength());

4、可以利用该指针,获取数据。GetDlgItem(IDC_EDIT2)->SetWindowText((LPCTSTR)m_pSharedBlock);

5、结束映射 UnmapViewOfFile(m_pSharedBlock);

6关闭映射文件
 ::CloseHandle(m_hFileMapping) ;

 

客户端涉及的API

1、OpenFileMapping  根据服务端创建的文件映射对象名,来打开该对象(与服务端的联系是通过映射对象名)

2、MapViewOfFile  把文件映射到当前进程的地址空间,返回一个地址

3、 同服务端的4 样,获取该地址下的数据。

4、结束映射

      UnmapViewOfFile(pView);

5、关闭映射文件

  CloseHandle(hMapFile);

参考 http://www.51testing.com/html/63/n-845063.html

参考 http://blog.sina.com.cn/s/blog_628af5cf01010d6r.html

 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值