请教各位大虾,小虾,虾米,有没有可能在重起进程后保留dlopen打开的动态库的内存空间

foreverfresh 2009-03-10 06:52:44
程序大概是这样的:
int main()
{
void *lib_handel = dlopen(filename, RTLD_LAZY);
... //基于加载得动态库做一些运算,预算结果保留在动态库中
execvp(progname,argv); //replace the current process image with a new process image
//这之后,进程会重新加载上面得动态库,所以动态库中保留得数据就没有了
}

我想要得效果是在exec后不需要重新加载动态库,而是拿到第一次打开的动态库,里面有保存的数据.
大家帮忙想想,先谢谢了.

...全文
90 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liliangbao 2009-03-31
  • 打赏
  • 举报
回复
学习!
帮顶~
foreverfresh 2009-03-18
  • 打赏
  • 举报
回复
谢谢4楼,不过看来这些方法似乎都不可行.

1创建队列,写入队列。更换进程后去读。
==〉这个过程和一楼提到的读写文件一样也必须实现在dll内部实现,而且创建队列必须在第三方进程中实现,要不然重启进程后队列消失了。

2dlopen打开后的地址作为参数传入进程。根据这个参数来判断是否需要再次打开。
==〉dlopen打开后的地址在重启进程后是无效的,因为进程会重新分配地址空间.

3或者在重启进程的时候,就把数据当作参数或者环境变量带到下个进程,尽量模拟进程间通讯。
==> 数据事实上在dll内部,对外部执行程序来说是不可见的,而且量大不可能通过环境变量货参数形式传入新进程.

conquer 2009-03-17
  • 打赏
  • 举报
回复
想法未验证:
1创建队列,写入队列。更换进程后去读。
2dlopen打开后的地址作为参数传入进程。根据这个参数来判断是否需要再次打开。
3或者在重启进程的时候,就把数据当作参数或者环境变量带到下个进程,尽量模拟进程间通讯。
foreverfresh 2009-03-12
  • 打赏
  • 举报
回复
自己顶一下,有没有更好的方法阿?
foreverfresh 2009-03-10
  • 打赏
  • 举报
回复
是的,目前我也只想到这种方法,但不是很好,因为要在dll内部增加读写文件的功能.
oyljerry 2009-03-10
  • 打赏
  • 举报
回复
这种情况需要把dll中的数据导入文件等硬盘空间上

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧