一起talk C栗子吧(第一百三十七回:C语言实例--查看环境变量)

本文主要是介绍一起talk C栗子吧(第一百三十七回:C语言实例--查看环境变量),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


各位看官们,大家好,上一回中咱们说的是exec系列函数的例子,这一回咱们说的例子是:查看环境变量。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前面介绍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);elseprintf("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命令的结果相同。

各位看官,关于查看环境变量的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


这篇关于一起talk C栗子吧(第一百三十七回:C语言实例--查看环境变量)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/800203

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

Python如何使用seleniumwire接管Chrome查看控制台中参数

《Python如何使用seleniumwire接管Chrome查看控制台中参数》文章介绍了如何使用Python的seleniumwire库来接管Chrome浏览器,并通过控制台查看接口参数,本文给大家... 1、cmd打开控制台,启动谷歌并制定端口号,找不到文件的加环境变量chrome.exe --rem

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结