Chinaunix
标题:
请问putenv这个函数,env,set,echo都说没有
[打印本页]
作者:
wantaugust
时间:
2014-08-03 12:19
标题:
请问putenv这个函数,env,set,echo都说没有
我用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已经启动了
希望大家帮忙谢谢
作者:
Tinnal
时间:
2014-08-03 15:12
回复
1#
wantaugust
putenv只对本进程以及他们子进程生效。他们父进程,也就是bash的环境变量是不受影响的,因此aaa退出后,就什么事情都像没有发生一样。
你要改变bash以及他的子进程的环境,只能在bash环境用export命令。
如果你非要在你的程序中想改,而且后续你输出的命令还能看到这个变量,那你直接在你的aaa程序里再运行一个bash吧。
作者:
wantaugust
时间:
2014-08-03 15:40
好吧
我在终端里: MYWA=0,export MYWA
然后在程序里:
getenv("USER");
getenv("MYWA");
结果是root,第二条语句没结果,不明白为什么
作者:
Tinnal
时间:
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 ~
$
作者:
wantaugust
时间:
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()不是返回字符串的指针吗,怎么成了整数了,我是蒙了
作者:
Tinnal
时间:
2014-08-04 23:18
回复
5#
wantaugust
1。用的编译器是同一个吗?
2。贴出来的代码是同一份吗?
请先回答上面的问题,但抛开这些问题,你还有一个致命的问题就是:你没有包含getenv的原型定义(stdlib.h)!!!“高级”的GCC会自动做愚蠢的假设:函数返回整型!
请看man手册
http://linux.die.net/man/3/getenv
作者:
wantaugust
时间:
2014-08-10 19:03
回复
6#
Tinnal
谢谢前辈,问题解决了
我一怒之下格了硬盘,傻了,应该格的是分区,快一个星期了才把数据恢复过来,花了我500大洋,
重装系统后发现问题解决了,再也没有什么整数转换的问题了,但是其他问题还是那样,
用codeblocks就提示错误,像你一样在终端玩,结果就正确了。本人小白不知道codeblocks中的厉害
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2