linux C 调用getenv获取环境变量返回NULL

yaycici 2018-06-15 04:56:12
1、设置环境变量
vi ~/.bash_profile
增加export SYSDEV_ID=10002

2、source ~/.bash_profile使之生效
[tclient@testdb1 ~]$ echo $SYSDEV_ID
10002

3、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
...全文
2272 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LubinLew 2018-06-29
  • 打赏
  • 举报
回复
某些嵌入式系统(搭载的是阉割版的linux)是不支持 getenv的(函数功能未实现), 调用getenv()获取任何环境变量的返回结果都是NULL,
你可以试试获取其他环境变量, 如果都返回NULL,就是我说的这种情况
ckc 2018-06-29
  • 打赏
  • 举报
回复
你没有直接输出结果看看而是用日志输出再查看,是不是因为你的程序是守护程序或者用了其它什么特殊的办法调用的?如果是的话,有可能在这些环节丢失了环境变量。你可以试着输出PATH这种试下。
菜鸟小小花园 2018-06-28
  • 打赏
  • 举报
回复
围观,萌新!!!!!
yaycici 2018-06-26
  • 打赏
  • 举报
回复
还有没有前辈帮忙回答一下啊。。。。。
「已注销」 2018-06-21
  • 打赏
  • 举报
回复
楼主你的系统是什么,我在我的Redhat 6.4上面按你说的测试,是可以的。如下图:
yaycici 2018-06-21
  • 打赏
  • 举报
回复
引用 2 楼 chenjifeng1987 的回复:
楼主你的系统是什么,我在我的Redhat 6.4上面按你说的测试,是可以的。如下图:


系统版本:
[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了

23,110

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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