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函式則先執行...