(二十)程序 程序環境

2021-07-25 20:14:57 字數 1637 閱讀 3493

libc中定義的全域性變數environ指向環境變數表,environ沒有包含在任何標頭檔案中,所以在使用時要用extern宣告。例如:

#include 

int main(void)

由於父程序在呼叫fork建立子程序時會把自己的環境變數表也複製給子程序,所以a.out(編譯以上程式所生成的應用程式)列印的環境變數和shell程序的環境變數是相同的。

按照慣例,環境變數字串都是name=value這樣的形式,大多數name由大寫字母加下劃線組成,一般把name的部分叫做環境變數,value的部分則是環境變數的值。環境變數定義了程序的執行環境,一些比較重要的環境變數的含義如下:

path

* 可執行檔案的搜尋路徑。ls命令也是乙個程式,執行它不需要提供完整的路徑名/bin/ls,然而通常我們執行當前目錄下的程式a.out卻需要提供完整的路徑名./a.out,這是因為path環境變數的值裡面包含了ls命令所在的目錄/bin,卻不包含a.out所在的目錄。path環境變數的值可以包含多個目錄,用:號隔開。在shell中用echo命令可以檢視這個環境變數的值:

$ echo $path

shell

* 當前shell,它的值通常是/bin/bash。

term

* 當前終端型別,在圖形介面終端下它的值通常是xterm,終端型別決定了一些程式的輸出顯示方式,比如圖形介面終端可以顯示漢字,而字元終端一般不行。

lang

* 語言和locale,決定了字元編碼以及時間、貨幣等資訊的顯示格式。

home

* 當前使用者主目錄的路徑,很多程式需要在主目錄下儲存配置檔案,使得每個使用者在執行該程式時都有自己的一套配置。

用environ指標可以檢視所有環境變數字串,但是不夠方便,如果給出name要在環境變數表中查詢它對應的value,可以用getenv函式。

#include 

char *getenv(const

char *name);

getenv的返回值是指向value的指標,若未找到則為null。

修改環境變數可以用以下函式

#include 

int setenv(const

char *name, const

char *value, int rewrite);

void unsetenv(const

char *name);

putenv和setenv函式若成功則返回為0,若出錯則返回非0。

setenv將環境變數name的值設定為value。如果已存在環境變數name,那麼:

若rewrite非0,則覆蓋原來的定義;

若rewrite為0,則不覆蓋原來的定義,也不返回錯誤。

unsetenv刪除name的定義。即使name沒有定義也不返回錯誤。

例:修改環境變數

#include 

#include

int main(void)

linux 程序與程序環境

程序與程序環境 程序是執行中的程式,每個程序都執行在各自的虛擬位址空間中,某個程序的崩潰不會影響其它程序的執行。程序間的通訊 ipc 要通過系統核心 系統呼叫 來實現。程序分類 在linux系統中,根據程序的特點,程序可分為3大類 互動程序 批處理程序和守護程序。l 互動程序 由shell啟動的程序...

Unix程序環境之3 程序環境列表

1 程序環境 簡介當乙個程序 proecss 呼叫另乙個程式 program 時,同時會傳遞這個程式執行的環境列表 environment list 程序環境列表是乙個字元指標陣列,每個字元指標是乙個以空字元 null terminated 結束的c 字串。字元指標陣列位址包含在全域性變數envir...

《unix高階環境程式設計》程序環境 程序終止

當核心執行c程式時 使用乙個exec函式執行 在呼叫mian函式前先呼叫乙個特殊的啟動例程。可執行程式檔案將此啟動例程指定為程式的起始位址。下面是c程式啟動和終止的流程,由圖中可以知道,程序的終止根據不同的函式呼叫是不一樣的,其中 exit和 exit函式是終止程序直接進入核心,exit函式則先執行...