程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 一起talk C栗子吧(第一百三十七回:C語言實例--查看環境變量)

一起talk C栗子吧(第一百三十七回: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);
    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命令的結果相同。

各位看官,關於查看環境變量的例子咱們就說到這裡。欲知後面還有什麼例子,且聽下回分解 。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved