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

2021-05-24 07:38:52 字數 1805 閱讀 7583

1:程序環境

簡介當乙個程序(proecss)

呼叫另乙個程式

(program)

時,同時會傳遞這個程式執行的環境列表

(environment list)。

程序環境列表是乙個字元指標陣列,每個字元指標是乙個以空字元(null-terminated)

結束的c

字串。

字元指標陣列位址包含在全域性變數environ

裡。如下:

extern char **environ;

加入環境包含五個字串,則表示為以下圖示:

通常環境列表有名稱---

值對組成,名稱為大寫,大寫只是約定的慣例。

要訪問特定的環境變數不用environ

指標,通常通過函式

getenv

和 putenv

來訪問。但是要訪問整個環境變數就要用到environ

指標了。

2:程序環境操作函式

iso c定義了乙個函式可以用來取得環境列表值,前提是這個列表值要提前定義好。函式的標頭檔案及函式原型為:

#include 

char *getenv(const char *name);

returns: pointer to value associated with name, null if not found

要去的特定的環境列表,用getenv

直接返回結果。比如,取得登入使用者名為:

char * user = getenv("logname"); user 儲存登入使用者名稱。

3:以下是取得環境變數的例子:

程式中所用到的環境變數值由single unix

所定義,程式在

ubuntu10.4

上執行,所以有些值為空。

4:操作環境變數:

以下函式可以操作環境變數值:getenv

,putenv

,setenv

,unsetenv

,clearenv

。linux

系統支援這

5個函式,其他的

unix

系統不全支援。

clearenv 不是 

single unix 

規範. 

用來從environment list

移除所有的值.

函式標頭檔案及原型如下:

#include 

int putenv(char *str);

int setenv(const char *name, const char *value, int rewrite);

int unsetenv(const char *name);

all return: 0 if ok, nonzero on error

注意:1:對於

setenv

函式,如果名稱存在有以下兩種情況:

a:rewrit為

非0 ,存在的名稱將會被移除。

b:rewrit為

0,為存在的名稱更新值。

2:unsetenv 

函式用來移除特定的環境值。 3:

putenv 

和setenv

的差別。

setenv為環境列表引數分配記憶體來生成新的名稱

---值對字串。

putenv 用新的值字串位址來替換原來的位址。因此,在

linux 

和solaris

上,putenv

函式用新的字串位址來替換原來的位址,所以不能用分配在棧上的字串位址。因為棧位址在函式返回時會重新利用,導致賦值錯誤。

Unix程序環境

1.快取 a.全快取 當填滿標準i o快取後才進行實際i o操作 b.行快取 當在輸入和輸出中遇到新行符時,標準i o庫執行i o操作 2.printf返回值表示成功輸入的字元個數,返回0表示沒有輸出任何字元。unix程序環境 1.int main int a rg c,char a rg v ar...

UNIX程序環境

當執行程式時,main函式時如何被呼叫的?c程式總是從main函式開始執行。當核心在啟動c程式時,在呼叫main之前先呼叫乙個特殊的啟動例程。可執行程式將 核心取得命令列引數和環境變數,然後為呼叫main函式做好安排。程序的終止 1 正常終止 a 從main返回 b 呼叫exit c 呼叫 exit...

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

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