请问在c语言中嵌入shell的问题?
我的方法的在c里用system()函数。可是有一个问题,退出之后,数据就失效了,无法保存。
具体程序如下:
下面是自己写的shell,就是想改变一下当前环境变量。
#!/bin/sh
#test.sh
export LANGA=zh_CN.UTF-8
##echo "hello"
echo $LANGA
下面是c程序:
/* test.c */
#include<stdlib.h>
main()
{
system("/bin/sh test.sh");
system("echo $LANGA");
}
打印时,在shell里是有赋值的,可是退出system()之后就没有了,
请大哥们帮忙解决一下吧,或者有更好的通过c来改变类似环境变量值的方法也请教教小弟!
先谢谢了!
作者: renjiedona 发布时间: 2011-03-30
getenv
setenv
作者: zmlovelx 发布时间: 2011-03-30
man 3
getenv
setenv
你好,能具体说一下吗?我昨天好试过一下setenv,不过还是只在调用system时才生效,退出,就没用了。我想是不是我system用法不对啊?
作者: renjiedona 发布时间: 2011-03-30
system()会创建一个新的子进程,在这个新的子进程中对环境变量的所有改变,都不可能影响父进程
作者: justkk 发布时间: 2011-03-30
是不是在c语言里system()是不可以用来赋值的啊?
作者: renjiedona 发布时间: 2011-03-30
不要用system()
或者用putenv()
putenv("LANGA=zh_CN.UTF-8");
作者: justkk 发布时间: 2011-03-30
是不是在c语言里system()是不可以用来赋值的啊?
不能用来给父进程赋值
作者: justkk 发布时间: 2011-03-30
不可行
system()会创建一个新的子进程,在这个新的子进程中对环境变量的所有改变,都不可能影响父进程
请问,那有什么方法可以实现调用shell后对环境变量修改能生效的嘛?
作者: renjiedona 发布时间: 2011-03-30
不要用system()
或者用putenv()
putenv("LANGA=zh_CN.UTF-8")
学习了!
作者: liuqi05 发布时间: 2011-03-30
调用shell就改不了父进程的环境变量
作者: justkk 发布时间: 2011-03-30
更改方式就像1楼说的,调用setenv()
不要用system()
或者用putenv()
putenv("LANGA=zh_CN.UTF-8");
我昨天试过putenv(),也跟system()一样。
作者: renjiedona 发布时间: 2011-03-30
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效
作者: justkk 发布时间: 2011-03-30
你怎么试的?贴代码看看
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效
是啊,可是我就是想实现一样退出程序之后都可以生效的方法啊?
作者: renjiedona 发布时间: 2011-03-30
作者: renjiedona 发布时间: 2011-03-30
你怎么试的?贴代码看看
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效
请问,那有可以改变当前系统环境变量且退出后也能生效的方法吗?
作者: renjiedona 发布时间: 2011-03-30