Linux共享库(动态库)与进程之间共享全局变量可行性分析

来源:互联网 发布:js清除input的value值 编辑:程序博客网 时间:2024/06/07 18:30

在主程序中可以使用动态链接库中的全局变量是正确的,不可否认的,但这需要在程序编译链接时就要把动态库加上,并在需要使用的程序中使用extern声明变量,这其实没有达到动态库的本质目的(使用时再调用);这其实不算是一个大问题,如果只在一个进程中使用也不会有问题,这里主要讨论在多进程中使用动态库全局变量的问题。

如果想在进程间依靠动态库来共享全局变量恐怕是不太可能的事情,因为不同进程访问动态库时,是写时拷贝,即如果另外一个进程试图去修改动态库中的全局变量时,系统就会把这个全局变量拷贝一份单独给这个进程,而这个修改操作并不会影响到其他进程中变量的值。

测试程序:(下载地址http://www.liuzhigong.com/download/test_linux_so.tar.gz)

测试结果:



可以看到,主进程首先修改了这个值,然后在子进程中读取到的是主进程修改后的值,但是子进程中的修改并没有影响到主进程中的使用的动态库中的全局变量。所以试图使用动态库在进程间共享全局变量的方法是行不通的
 
附:编译方法
gcc -fPIC-shared testshare.c -o libtestshare.so.2.0
gcc -o main -L/main main.c libtestshare.so.2.0
./main

原创粉丝点击