-
環境表
每個程序都有一張環境表。與參數表一樣,環境表也是一個字符指針數組,其中每個指針包含一個以null結束的c字符串地址。
全局變量environ則包含了該指針數組的地址:extern char ** environ;
如下程序可以打印環境表。
#include <stdio.h>
#include <stdlib.h>
extern char ** environ;
int main()
{
int i;
for(i=0;environ[i]!=NULL;i++)
{
puts(environ[i]);
}
exit(0);
}
環境表中的環境變量的值大多數預定義爲全大寫字母。
在歷史上,大多數UNIX系統支持main函數帶三個參數:
int main(int argc,char ** argv,char ** envp[]);
其中的第三個參數就是環境表。
POSIX.1規定應該使用environ而不使用第三個參數。
通常使用getnev和putenv來訪問特定的環境變量,而不是environ變量。如果要查看整個環境,還是隻能使用environ指針。
-
getenv
-
setenv、unsetenv
-
函數定義
#include <stdlib.h> int setenv(const char *name, const char *value, int overwrite); int unsetenv(const char *name);
-
功能描述
- setenv修改或者增加環境變量。如果環境中沒有name環境變量,則setnev增加該環境變量,並把值設爲value。如果有該環境變量,則根據overwrite的值來決定。overwrite爲非0值,則覆蓋之前的;overwrite爲0,則不覆蓋。
- 如果要覆蓋,則setenv會釋放原來該name字段存放的空間,再重新分配空間,把value存儲進去。
- unsetenv刪除環境表中的name字段。如果沒有該字段,也執行成功,只是環境表沒有變化。
-
返回值
- setenv:執行成功,返回0;如果環境表空間不足,返回-1。
- unsetenv:執行成功,返回0;失敗返回-1,並設置errno。
-
-
putenv
#include <stdlib.h> int putenv(char *string);
- 可以注意到putenv的變量沒有const修飾,而getenv、setenv、unsetenv都有const修飾,所以putenv不太安全,一般不使用。