进程间动态对象共享
来源:互联网 发布:淘宝爆款采集软件 编辑:程序博客网 时间:2024/06/02 06:06
设想:在两个子进程之间共享类实例
说明:前几天要写一个多进程的服务程序,用到了一个日志类记录程序的运行情况,日志类用到了单态保证只有一个对象存在。后来想到如果要在两个子进程之间共享一个普通的类对象,该用什么方法。于是做了一个试验,尝试一下。
试验中用到了两个比较重要的概念,由于我对此不是很了解,就在网上找到了两篇文章分别学习了一下,以下是文章的链接,如果需要,可以仔细研究一下:
宋久擎:关于C++中new的深入探讨 http://blog.csdn.net/songthin/archive/2007/07/23/1703966.aspx
郑彦兴:Linux 进程间通信:共享内存 http://blog.csdn.net/realone78/archive/2008/08/29/2846747.aspx
我的思路是这样,在程序代码中,主函数首先创建一块共享内存,然后用C++ new的定位构造功能,在这块申请的共享内存中创建并且初始化一个类对象,这样 ,在子进程中就可以使用这个内存区域的类实例。
以下是验证用得代码,结果是正确的但是不知道是否符合规范:
- #include <iostream>
- #include <unistd.h>
- #include <sys/types.h>
- #include <string>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/mman.h>
- #include <string>
- #include <new>
- #define N (1)
- using namespace std;
- class A{
- char content[200];
- int i;
- public:
- A(int j){ content[0]=0;i=j;cout<<"Construct class A"<<endl;};
- void Say()
- {
- cout<<"Information from father: ";
- cout<<"i="<<i<<";content="<<content<<endl;
- };
- void Set(int j){ i=j;};
- void Set(const char* p){ strcpy(content,p);};
- };
- main(int argc, char** argv)
- {
- int i;
- A *p_map;
- char temp;
- p_map=(A*)mmap(NULL,sizeof(A)*N,PROT_READ|PROT_WRITE,MAP_SHARED|MAP_ANONYMOUS,-1,0);
- if(fork() == 0)
- {
- sleep(1);
- A* p=(A*)p_map;
- p->Say();
- munmap(p_map,sizeof(A)*N);
- exit(0);
- }
- new(p_map) A(67);//在 p_map 处构造一个A对象
- p_map->Set(11);
- p_map->Set("/"Hello child, I am father!/"");
- sleep(2);
- printf("umap/n");
- munmap( p_map,sizeof(A)*N );
- printf( "umap ok/n" );
- }
运行结果是
LeoS:~/project/proc$ ./a.out
Construct class A
Information from father: i=11;content="Hello child, I am father!"
umap
umap ok
- 进程间动态对象共享
- 【2】进程间共享串口对象
- CreateEvent共享事件对象(进程间共享)
- 多个进程间共享动态链接库的原理
- 多个进程间共享动态链接库的原理
- 多个进程间共享动态链接库的原理
- 进程间通信 - 动态链接库中共享内存
- 进程间通讯--动态库的共享数据
- 进程间通信——共享内存区对象
- 进程间共享数据
- 进程间数据共享
- 进程间共享变量
- 进程间共享内存
- 进程间共享内存
- 如何在进程之间共享内核对象
- 多进程共享内核对象的方法
- 3.3 跨越进程边界共享内核对象
- 3.3 跨越进程边界共享内核对象
- 大三了
- dbx 命令 调试程序
- 如何下载和安装Struts2框架
- 全景图制作过程简介
- WMI 开发经典文章
- 进程间动态对象共享
- CAB打包错误
- 好用的java web图表组件──chartdirector
- 招行迈出国际化步伐
- 谈IIS安全机制
- 白盒测试和黑盒测试
- ARM指令集
- 女人必看与男人约会12个潜规则
- 测试常用技巧