天天看點

LinuxC中全局變量environ

Linux C中environ 變量是一個char** 類型,存儲着系統的環境變量。

要想周遊環境變量可以用下面這個程式:

#include <stdio.h>

extern char ** environ;

int main()
{
    char ** envir = environ;
    
    while(*envir)
    {
        fprintf(stdout,"%s\n",*envir);
        envir++;
    }
    return 0;
}      

因為environ是一個全局的外部變量,是以切記使用前要用extern關鍵字進行聲明,然後在使用。

unistd.h頭檔案中聲明了這個變量,是以也可以将unist.h進行include,這個時候就不用再對environ進行extern聲明了(應為unistd.h中已經聲明了),代碼如下:

#include <stdio.h>
#define __USE_GNU
#include <unistd.h>
//extern char ** environ;
int main()
{
    char ** envir = environ;
    
    while(*envir)
    {
        fprintf(stdout,"%s\n",*envir);
        envir++;
    }
    return 0;
}      

要注意的問題是,在unistd.h中聲明environ的地方使用了條件編譯,編譯的條件就是#ifdef __USE_GNU,LinuxC中預設沒有定義這個宏,是以要在#include <unistd.h>之前加上#define __USE_GNU

還有一種方法周遊環境變量,就是利用main函數的參數,我們常見的main函數帶有兩個參數int argc 和 char * argv[], 但實際上還有一個帶有三個參數的main函數,如下:

int main(int argc, char *argv[], char *env[])
{
    int index = 0;
    while(env[index] != NULL)
    {
        printf("env[%d]: %s\n", index, env[index]);
        ++index;
    } 
    return 0;
}      

就寫到這裡了,希望對大家有幫助。。不對之處還請指教,,謝謝~~