一起talk C栗子吧(第一百三十七回:C语言实例--查看环境变量)
2016-04-03 09:02
465 查看
各位看官们,大家好,上一回中咱们说的是exec系列函数的例子,这一回咱们说的例子是:查看环境变量。闲话休提,言归正转。让我们一起talk C栗子吧!
看官们,我们在前面介绍exec系列函数时提到过程序的运行环境,有些看官可能不太明白,今天我们一起来看看程序运行环境中的环境变量。环境变量在实际编写程序的时候经常使用,比如常用的PATH环境变量。有时候程序无法运行,就是环境变量错误引起的。
环境变量是操作系统提供的一种参数,程序可以通过这些参数来在操作系统中运行,它是本质上是键值对序列。
其中SHELL是环境变量的名称,它的值是等于号后面的内容,它提示我们运行的shell程序是/bin/bash。我们可以把SHELL看作键,等号后面的内容看作是值。这就是它的本质:键值对。
我们可以在终端中通过命令来查看当前的环境变量,常用的命令有echo,set和env.
环境变量有很多,比如我们常用的SHELL,PATH,可以使用echo命令来查看单个环境变量的值,前提是
你需要知道环境变量的名字。
如果忘记环境变量的名字,也不要担心,我们可以使用set命令查看当前终端中的环境变量。
这里只选择了一些常见的环境变量,其它的环境变量就不一一列出了。
此外,env命令也可以查看环境变量,只是它比set命令查看的范围更加大一些。它可以查看到当前系统中所有的环境变量。
系统的环境变量比较多,这里只选择了一些常见的环境变量,其它的环境变量就不一一列出了。
台下已经有不少看官在终端中试验这些命令了,哈哈。不过大家不要忘记我们是talkC粟子呀,除了这些命令可以查看环境变量外,我们也可以在C程序中查看环境变量。
系统提供了getenv函数来查看环境变量,下面是该函数的原型:
函数只有一个参数,参数是字符指针,用来接收变量名;
函数返回与变量名匹配的值,如果变量名不存在或者变量没有值,返回空指针;
下面是程序的核心代码,请大家参考
在代码中我们通过getenv函数获取了环境变量SHELL的值,并且显示到终端中,下面是程序的运行结果:
大家可以看到,该结果和我们刚才使用echo命令得到的结果完全一致。
大家可能已经感觉到了,使用该函数需要提前知道环境变量名,这点和echo命令一样,有没有像set和env命令一样查看所有环境变量的函数。答案是没有。台下已经看官叹气了,哈哈。看官别失望。没有函数咱们可以自己写一个呀,自己写?怎么写?我给个提示:系统中所有的环境变量都存放在了一个叫environ的变量中,不过该变量是一个指向字符串的指针。它的定义如下:
现在大家明白如何了吗?咱们比一比谁写的快。下面是我写的代码:
关于代码,我说几个需要注意的地方:
我们在使用前需要先对environ变量进行声明。
我们可以把该变量当作一个字符串数组,该数组的最后一个元素为空指针。
明白这些后,显示环境变量就和遍历数组一样简单。
程序的运行结果,我就不列出了,相信大家已经自己完成了该程序。大家可以把该程序的运行结果和env命令的运行结果比较一下,你将会发现它们是完全相同的。
看官们,完整的代码放到了我的资源中,大家可以点击这里下载使用。
最后,我们总结一下查看环境变量的方法:
使用Linux命令:echo,set和env.
使用函数:getenv。该函数得到结果和echo相同。
使用变量:environ。该变量得到的结果和env命令的结果相同。
各位看官,关于查看环境变量的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
看官们,我们在前面介绍exec系列函数时提到过程序的运行环境,有些看官可能不太明白,今天我们一起来看看程序运行环境中的环境变量。环境变量在实际编写程序的时候经常使用,比如常用的PATH环境变量。有时候程序无法运行,就是环境变量错误引起的。
环境变量是操作系统提供的一种参数,程序可以通过这些参数来在操作系统中运行,它是本质上是键值对序列。
例如:SHELL=/bin/bash。
其中SHELL是环境变量的名称,它的值是等于号后面的内容,它提示我们运行的shell程序是/bin/bash。我们可以把SHELL看作键,等号后面的内容看作是值。这就是它的本质:键值对。
我们可以在终端中通过命令来查看当前的环境变量,常用的命令有echo,set和env.
环境变量有很多,比如我们常用的SHELL,PATH,可以使用echo命令来查看单个环境变量的值,前提是
你需要知道环境变量的名字。
$ echo $SHELL //通过echo命令查看单个环境变量的值 /bin/bash $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
如果忘记环境变量的名字,也不要担心,我们可以使用set命令查看当前终端中的环境变量。
$ set //运行set命令 BASH=/bin/bash HISTFILESIZE=2000 HISTSIZE=1000 HOME=/home/talk8 HOSTNAME=talk8-PC HOSTTYPE=i686 LOGNAME=talk8
这里只选择了一些常见的环境变量,其它的环境变量就不一一列出了。
此外,env命令也可以查看环境变量,只是它比set命令查看的范围更加大一些。它可以查看到当前系统中所有的环境变量。
$ env //运行env命令 LC_PAPER=zh_CN.UTF-8 TERM=xterm SHELL=/bin/bash USER=talk8 USERNAME=talk8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games LANG=zh_CN.UTF-8 HOME=/home/talk8 GNOME_DESKTOP_SESSION_ID=this-is-deprecated XDG_SESSION_DESKTOP=default LOGNAME=talk8
系统的环境变量比较多,这里只选择了一些常见的环境变量,其它的环境变量就不一一列出了。
台下已经有不少看官在终端中试验这些命令了,哈哈。不过大家不要忘记我们是talkC粟子呀,除了这些命令可以查看环境变量外,我们也可以在C程序中查看环境变量。
系统提供了getenv函数来查看环境变量,下面是该函数的原型:
char *getenv(const char *name);
函数只有一个参数,参数是字符指针,用来接收变量名;
函数返回与变量名匹配的值,如果变量名不存在或者变量没有值,返回空指针;
下面是程序的核心代码,请大家参考
char *env_key = "SHELL"; char *env_value = NULL; env_value = getenv(env_key); if(NULL != env_value) printf("the value of %s is %s \n",env_key,env_value); else printf("there is not any value of %s \n",env_key);
在代码中我们通过getenv函数获取了环境变量SHELL的值,并且显示到终端中,下面是程序的运行结果:
the value of SHELL is /bin/bash
大家可以看到,该结果和我们刚才使用echo命令得到的结果完全一致。
大家可能已经感觉到了,使用该函数需要提前知道环境变量名,这点和echo命令一样,有没有像set和env命令一样查看所有环境变量的函数。答案是没有。台下已经看官叹气了,哈哈。看官别失望。没有函数咱们可以自己写一个呀,自己写?怎么写?我给个提示:系统中所有的环境变量都存放在了一个叫environ的变量中,不过该变量是一个指向字符串的指针。它的定义如下:
char **environ;
现在大家明白如何了吗?咱们比一比谁写的快。下面是我写的代码:
extern char ** environ; char ** env_array = NULL; env_array = environ; while(NULL != *env_array) printf("%s \n",*env_array++);
关于代码,我说几个需要注意的地方:
我们在使用前需要先对environ变量进行声明。
我们可以把该变量当作一个字符串数组,该数组的最后一个元素为空指针。
明白这些后,显示环境变量就和遍历数组一样简单。
程序的运行结果,我就不列出了,相信大家已经自己完成了该程序。大家可以把该程序的运行结果和env命令的运行结果比较一下,你将会发现它们是完全相同的。
看官们,完整的代码放到了我的资源中,大家可以点击这里下载使用。
最后,我们总结一下查看环境变量的方法:
使用Linux命令:echo,set和env.
使用函数:getenv。该函数得到结果和echo相同。
使用变量:environ。该变量得到的结果和env命令的结果相同。
各位看官,关于查看环境变量的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。
相关文章推荐
- C++中C/C++格式化输出
- C++对象模型:成员变量<一>非静态成员变量
- C/C++中的指针
- C++ 11的新特性(初识)
- C++ Prime chapter.9 顺序容器性质(表)
- C++获取一行字符串getline(cin,s),不能用cin>>s
- C++中慎用逐位拷贝(bitwise copy)的函数
- C++模板元编程
- C语言-交换两个变量的值
- c++归并排序算法
- 【C++ Primer plus】【第八章】函数探幽
- hdoj 2024 C语言合法标识符
- C语言-位运算
- C++ 计时/时间 函数
- C语言实现由PID获取进程名&由进程名获取PID
- 20160402_C语言位操作符的使用
- c++ primer 第五版 Screen类(不包含Window_mgr类)
- C语言单链表实现栈
- C++中的OOP
- C++中,头文件stdlib.h主要包含什么函数? C++