请问在c语言中嵌入shell的问题?

我想能过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

man 3
getenv
setenv

作者: zmlovelx   发布时间: 2011-03-30

引用 1 楼 zmlovelx 的回复:

man 3
getenv
setenv

你好,能具体说一下吗?我昨天好试过一下setenv,不过还是只在调用system时才生效,退出,就没用了。我想是不是我system用法不对啊?

作者: renjiedona   发布时间: 2011-03-30

不可行
system()会创建一个新的子进程,在这个新的子进程中对环境变量的所有改变,都不可能影响父进程

作者: justkk   发布时间: 2011-03-30


是不是在c语言里system()是不可以用来赋值的啊?

作者: renjiedona   发布时间: 2011-03-30

更改方式就像1楼说的,调用setenv()
不要用system()

或者用putenv()
putenv("LANGA=zh_CN.UTF-8");

作者: justkk   发布时间: 2011-03-30

引用 4 楼 renjiedona 的回复:
是不是在c语言里system()是不可以用来赋值的啊?

不能用来给父进程赋值

作者: justkk   发布时间: 2011-03-30

引用 3 楼 justkk 的回复:

不可行
system()会创建一个新的子进程,在这个新的子进程中对环境变量的所有改变,都不可能影响父进程

请问,那有什么方法可以实现调用shell后对环境变量修改能生效的嘛?

作者: renjiedona   发布时间: 2011-03-30

调用setenv()
不要用system()

或者用putenv()
putenv("LANGA=zh_CN.UTF-8")
 学习了!

作者: liuqi05   发布时间: 2011-03-30

为什么要调用shell??
调用shell就改不了父进程的环境变量

作者: justkk   发布时间: 2011-03-30

引用 5 楼 justkk 的回复:

更改方式就像1楼说的,调用setenv()
不要用system()

或者用putenv()
putenv("LANGA=zh_CN.UTF-8");

我昨天试过putenv(),也跟system()一样。

作者: renjiedona   发布时间: 2011-03-30

你怎么试的?贴代码看看
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效

作者: justkk   发布时间: 2011-03-30

引用 11 楼 justkk 的回复:

你怎么试的?贴代码看看
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效

是啊,可是我就是想实现一样退出程序之后都可以生效的方法啊?

作者: renjiedona   发布时间: 2011-03-30

我希望能够通过c程序来改变当前系统的语言环境,从而来实现语言的切换啊

作者: renjiedona   发布时间: 2011-03-30

引用 11 楼 justkk 的回复:

你怎么试的?贴代码看看
putenv()也只是在当前进程中有效,不能指望退出程序之后仍然有效

请问,那有可以改变当前系统环境变量且退出后也能生效的方法吗?

作者: renjiedona   发布时间: 2011-03-30