共享内存使用方法

大家都知道进程之间的通信可以使用共享内存,但是在具体代码中如何实现呢?下面就介绍下操作原理和我自己的实现代码。

在linux下使用的是shmget,shmat,shmdt等函数,所以在网上看到这类的,基本就是在介绍linux环境下的实现,windows下不适用,但可以看其原理。

上面结构的定义较为简单,仅为了测试使用。

1.我们会创建两个程序,一个称之服务端,一个称之客户端。

服务端:(1.)创建共享内存区域  (2.)内存映射到当前进程 (3.)写入数据

客户端:(1.)打开共享内存区域  (2.)内存映射到当前进程 (4.)读出数据

2.服务器端

上面是源码,简诉下过程:

 

 

(1)、创建一个特定大小的文件映射对象,名称为“GameQueen”,也可以宏来定义。

(2)、将这个对象的文件视图映射到进程的地址空间,然后向视图中写入数据/字符串。

(3)、函数参数分析

3.客户端

源码:

过程分析:

 

(1.)执行客户程序CMyShareClientDlg

(2.)打开这个名称为“GameQueen”的文件映射对象

(3.)然后把相同的文件映射视图映射到自己的地址空间中

(4.)然后从视图中读取服务进程所写入的数据。

5.注意

(1.)由于事件,信号,互斥对象和文件映射等这些内核对象都共享同一个名字空间,所以如果这个名字和其他一个对象的名称重名的话那么将创建失败。

(2.)为了实现共享内存,进程应首先调用CreateFileMapping函数然后在hFile参数中传入INVALID_HANDLE_VALUE宏来替代句柄。相应的文件映射对象会从系统的分页文件中获得一段内存。如果hFile参数的值是INVALID_HANDLE_VALUE,那么你在调用CreateFileMapping时必须给共享内存指定一个大小值。
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值