linux c 環境變數函式 getenv putenv 簡介

whatday發表於2020-09-30

環境變數相關函式:
getenv()和putenv()

程式功能:編寫一個程式來列印所選的任意環境變數的值;如果給程式傳遞第二個引數,還設定環境變數的值

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/************************
argc:引數個數(包含程式名)
argv:代表引數自身的字串陣列;
argv[0]為程式名,argv[1]為第1個實際引數  argv[2]為第2個實際引數 
************************/

int main(int argc, char *argv[])  
{
    char *var, *value;

    if(argc == 1 || argc > 3) {    //確保實際引數只有1個(argc=2)或2個(argc=3)
        fprintf(stderr,"usage: environ var [value]\n");
        exit(1);
    }

    var = argv[1]; //第一個實際引數的引數名
    value = getenv(var);  //第一個實際引數的引數值
    if(value) //判斷引數值是否存在
        printf("Variable %s has value %s\n", var, value);
    else
        printf("Variable %s has no value\n", var);

    if(argc == 3) { //如果第二個實際引數存在
        char *string; 
        value = argv[2]; //獲取第2個引數的值
        string = malloc(strlen(var)+strlen(value)+2); //為第二個引數的“引數名=引數值”開闢空間(+2表示“=”和空格)
        if(!string) { //如果開闢空間失敗
            fprintf(stderr,"out of memory\n");
            exit(1);
        }
        strcpy(string,var); 
        strcat(string,"=");
        strcat(string,value);
        printf("Calling putenv with: %s\n",string);
        if(putenv(string) != 0) {  //putenv()成功返回0.若環境變數設定失敗
            fprintf(stderr,"putenv failed\n");
            free(string); //釋放開闢的記憶體空間
            exit(1);
        }


        value = getenv(var);
        if(value)
            printf("New value of %s is %s\n", var, value);
        else
            printf("New value of %s is null??\n", var);
    }
    exit(0);
}

注意:環境僅對程式本身有效。在程式裡做的環境變數更改不會反映到外部環境,這是因為變數的值不會從子程式(你的程式)傳播到父程式(shell)

 

 

相關文章