浅谈Linux环境变量与系统编程
目录
- 1、基本概念:
- 2、环境变量的操作:
- (1)、对于环境变量的基本操作命令如下:
- (2)、如何使得修改长期有效,并且不会覆盖原有路径?
- 3、环境变量与环境表:
- 4、如何用函数来对环境变量修改?
1、基本概念:
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
系统环境变量有多种多样,比如:
- PATH:指定可执行程序的搜索路径(命令也属于程序)
- LD_LIBRARY_PATH:指定动态库的搜索路径
举个简单的例子:
我们查看PATH这个变量,可以发现该目录下有许多路径(每个路径用冒号(:)分隔),其中包括shell命令目录。若果我们将/bin这个路径从PATH中删除掉,那么ls就不能直接使用了,而必须在命令行下输入:/bin/ls,所以为了方便,将shell命令这种可执行文件的路径加入到PATH变量中来,就可以实现不带路径执行。那么带路径也是同样的效果,如下所示(虽然我们在根目录下,但是依旧可执行/bin目录下的ls,就是因为PATH中存在/bin默认路径):
2、环境变量的操作:
(1)、对于环境变量的基本操作命令如下:
echo //显示某个环境变量值
export //设置一个新的环境变量
env //显示所有环境变量
set //显示本地定义的shell变量
unset //清除环境变量
readonly //设置只读环境变量
echo我们在上面用过了,而export则是为一个环境变量修改新的内容,我们经常在动态库制作时会这样写:export LD_LIBRARY_PATH=.
,就是将当前路径设置为动态库的搜索路径的环境变量中。注意:export只能在当前shell下生效,登出重新启动shell就失效了。
举例如下:
当我们编写一个“Hello PATH!”的打印程序时,编译完成,在运行时需要加上./path_test,而不是直接像ls那样不带路径运行path_test,因为当前目录不在PATH中,而当我们将当前目录加到PATH变量中export PATH=.
时再运行path_test就可以执行了。
但是当我们CTRL+D退出,再重新登录时,修改已经不再生效了,如下:
并且,export有个缺点:export为修改,而不是增加。它会将原有的路径完全删除,使得当前shell下不能使用基本命令,如下:
(2)、如何使得修改长期有效,并且不会覆盖原有路径?
方法如下(修改配置文件.bashrc):
①回到当前用户家目录
②ls -a
③vim .bashrc
④重启shell后生效
注意:“export PATH=$PATH:.”千万不能写错,写错有可能导致基本的ls等命令不能使用,而且你的vim、vi都不能使用(其实是可以用的,下面再说)!!但是,只有出错,才会使得记忆更加深刻,在我第一次修改时,我就写错了(←_←)。那怎样解决呢?
方法一:重新设置PATH
PATH=/bin:/usr/bin
cd
vim .bashrc
方法二:
既然明白方法一,那么方法二就自然而然容易明白了:
操作如下:
cd
/usr/bin/vim .bashrc
修改.bashrc文件即可
3、环境变量与环境表:
所有的环境变量在程序中通过环境表获取;环境表是一个全局变量,类型为字符串数组指针(二级指针),以NULL结束,获取方式为:
extern char ** environ;//envioron存储环境表的首地址
举例说明:
# include<stdio.h>
# include<string.h>
int main(void)
{
extern char ** environ;
char ** p = environ;
while(*p){
printf("%s\n",*p);
p++;
}
return 0;
}
那么如何取得某一个特定的环境变量,如PATH呢?
# include<stdio.h>
# include<string.h>
int main(void)
{
extern char ** environ;
char ** p = environ;
while(*p){
if(strncmp(*p,"PATH=",5) == 0){
我们还有一种方式来获取环境表:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char ** argv, char ** env)
{
extern char ** environ;
printf("env=%p\nenviron=%p
这几个程序就不测试了,编译运行即可观察
4、如何用函数来对环境变量修改?
函数如下:
#include<stdlib.h>
char * getenv(const char * name);
int putenv(char * string);
int setenv(const char * name,const char *value,int overwrite);
int unsetenv(const char * name);
int clearenv(void);
基本测试:
#include<stdio.h>
#include<stdlib.h>
int main(void)
{
extern char ** environ;
char * path_value = getenv("PATH");
printf("PATH=%s\n",path_value);
putenv("KANGRUOJIN=123456789");
printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
putenv("KANGRUOJIN=987654321");
printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
setenv("KANGRUOJIN","ABCDEFG",0);
printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
setenv("KANGRUOJIN","GFEDCBA",1);
printf("KANGRUOJIN=%s\n",getenv("KANGRUOJIN"));
return 0;
}
结果如下:
到此这篇关于浅谈linux环境变量与系统编程的文章就介绍到这了,更多相关Linux环境变量与系统编程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341