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