1、设置环境变量
vi ~/.bash_profile 
增加export SYSDEV_ID=100022、source ~/.bash_profile使之生效
[tclient@testdb1 ~]$ echo $SYSDEV_ID
100023、linux C程序中使用如下语句获取环境变量:
char *penv = NULL;
penv = getenv("SYSDEV_ID");
if(penv != NULL)
    g_config.sysdev_id = atoi(penv);
output(LOG, "%d",  g_config.sysdev_id);//打印日志
...程序运行后,日志打印结果是0,应该是10002才对啊。为啥呢?请各位帮忙分析一下,谢谢!
注:
1)先改环境变量,后启动程序;
2)gdb调试时打印结果是10002,但是直接运行程序,打印出来就是0

解决方案 »

  1.   

    楼主你的系统是什么,我在我的Redhat 6.4上面按你说的测试,是可以的。如下图:
      

  2.   


    系统版本:
    [root@transfor ~]# uname -a
    Linux transfor 2.6.32-279.el6.x86_64 #1 SMP Wed Jun 13 18:24:36 EDT 2012 x86_64 x86_64 x86_64 GNU/Linux我也觉得很奇怪,换一台服务器直接运行是正确的输出。
    况且这台服务器上GDB的话输出也正确,但是直接运行就0了
      

  3.   

    你没有直接输出结果看看而是用日志输出再查看,是不是因为你的程序是守护程序或者用了其它什么特殊的办法调用的?如果是的话,有可能在这些环节丢失了环境变量。你可以试着输出PATH这种试下。
      

  4.   

    某些嵌入式系统(搭载的是阉割版的linux)是不支持 getenv的(函数功能未实现), 调用getenv()获取任何环境变量的返回结果都是NULL,
    你可以试试获取其他环境变量, 如果都返回NULL,就是我说的这种情况