花心胡萝卜BLOG花心胡萝卜BLOG

努力,进步,创造价值. YY综合频道:84613536 集学习休闲娱乐于一身的频道!

like

LinuxC 对getenv函数的疑问

浏览(113) 评论(4) 分类:LinuxC  作者:花心胡萝卜  发布时间:
分享到:

今天写程序的时候,发现一个很奇怪的现象.

我的程序必须要获得系统的环境变量,假设是LANG,是在.bash_profile中export的.

那么,一共有2个c文件(当然,程序很大,文件很多,但是关键代码就2个c文件).

当程序第一次在A.c执行getenv("LANG")的时候,程序正常返回LANG的值.

奇怪的事情发生了,当第二次在文件B.c中执行相同代码getenv("LANG")的时候,不管怎么样,都是返回的NULL;

百思不得其解,最后在getenv之前,调用了一下系统命令export,发现LANG这个系统变量没有了.(系统中还有)

最后没有办法,选择了一个折中的办法,在文件A.c中getenv之后立即putenv把LANG在设置一遍,然后在B.c中正常获取到了.

虽然是这样解决了,但是心里总是很费解,于是回家打开虚拟机进行测试.

测试结果却让我很吃惊,不管如何getenv,结果总是正确的.

这是我最不能理解的地方.

不过,也没法说,因为我公司的linux是64位HP,我虚拟机是ubuntu.

本来我想公司出现的情况,是因为子shell执行的问题,不过我没有办法去证明.

只能盼望大牛们能够给我说一下,让我也明白明白.

我测试的代码打包(就几行,没一点技术):

 点击这里下载:http://www.hxcarrot.com/Download/getEnvs.zip

Tags: Linux C getenv 
评论
评论正在努力加载...