免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1756 | 回复: 6
打印 上一主题 下一主题

[内核入门] 请问putenv这个函数,env,set,echo都说没有 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-03 12:19 |只看该作者 |倒序浏览
我用C写了一个程序,就一句:
/root/aaa.c
#include省略
int main(void)
{putenv("MYWA=111");}


然后在终端./aaa它,程序执行正常
但是我在终端中echo $MYWA,env|grep 111,set | grep 111,都没有这个MYWA变量,
后来自己在终端里MYWA=0;然后在调用aaa,结果env后还是0,
我需求是在终端能够得到MYWA的值,就是本进程不考虑子进程
目的就是启动一个软件,这个软件将一个环境变量置1,其他脚本读取这个环境变量后知道aaa已经启动了

希望大家帮忙谢谢

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-08-03 15:12 |只看该作者
回复 1# wantaugust
putenv只对本进程以及他们子进程生效。他们父进程,也就是bash的环境变量是不受影响的,因此aaa退出后,就什么事情都像没有发生一样。
你要改变bash以及他的子进程的环境,只能在bash环境用export命令。
如果你非要在你的程序中想改,而且后续你输出的命令还能看到这个变量,那你直接在你的aaa程序里再运行一个bash吧。


   

论坛徽章:
0
3 [报告]
发表于 2014-08-03 15:40 |只看该作者
好吧
我在终端里: MYWA=0,export MYWA
然后在程序里:
getenv("USER");
getenv("MYWA");

结果是root,第二条语句没结果,不明白为什么

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
4 [报告]
发表于 2014-08-03 16:39 |只看该作者
回复 3# wantaugust
你的程序有问题吧。

给你在我这做了个实验。如下:

Tinnal@TINNAL-PC ~
$ MYWA=0

Tinnal@TINNAL-PC ~
$ export MYWA

Tinnal@TINNAL-PC ~
$ cat env.c
#include <stdlib.h>
#include <stdio.h>
main()
{
  printf("%s\n", getenv("MYWA"));
}

Tinnal@TINNAL-PC ~
$ gcc env.c -o env

Tinnal@TINNAL-PC ~
$ ./env
0

Tinnal@TINNAL-PC ~
$


   

论坛徽章:
0
5 [报告]
发表于 2014-08-04 18:22 |只看该作者
回复 4# Tinnal


    玩乐一天了多了,脑袋打结了,是个新问题

#include <stdio.h>
#include <string.h>
int main(void)
{
char *p;
p = getenv("USER");
printf("%s\n",p);
return 0;
}
昨天还好好的能输出root,但是昨天下午就说p=getenv()这行是:
警告:赋值时将整数赋给指针,未做类型转换
昨天还不用类型转换那。getenv()不是返回字符串的指针吗,怎么成了整数了,我是蒙了

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
6 [报告]
发表于 2014-08-04 23:18 |只看该作者
回复 5# wantaugust

1。用的编译器是同一个吗?
2。贴出来的代码是同一份吗?

请先回答上面的问题,但抛开这些问题,你还有一个致命的问题就是:你没有包含getenv的原型定义(stdlib.h)!!!“高级”的GCC会自动做愚蠢的假设:函数返回整型!
请看man手册http://linux.die.net/man/3/getenv

   

论坛徽章:
0
7 [报告]
发表于 2014-08-10 19:03 |只看该作者
回复 6# Tinnal


    谢谢前辈,问题解决了
我一怒之下格了硬盘,傻了,应该格的是分区,快一个星期了才把数据恢复过来,花了我500大洋,

重装系统后发现问题解决了,再也没有什么整数转换的问题了,但是其他问题还是那样,
用codeblocks就提示错误,像你一样在终端玩,结果就正确了。本人小白不知道codeblocks中的厉害
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP