2通過程式獲得環境變數,getenv(),setenv()函數和unsetenv()函數,env查看環境變數,echo輸出指定的環境變數,getenvsetenv
1進程環境
libc中定義的全域變數environ指向環境變數表,environ沒有包含在任何標頭檔中,所以在使用時要用extern聲明。例如:
運行結果:
2.env命令可以查看進程資訊
3.echo $環境變數名 得出環境變數的值
4getenv()
A依賴標頭檔
#include<stdlib.h>
B函式宣告
char *getenv(constchar *name);
用environ指標可以查看所有環境變數字串,但是不夠方便,如果給出name要在環境變數表中尋找它對應的value,可以用getenv函數。
C案例說明:
運行結果:
5setenv()函數和unsetenv()函數
A依賴的標頭檔
#include <stdlib.h>
B函式宣告:
int setenv(constchar *name,const char *value,int rewrite);
voidunsetenv(const char *name);
函數說明:
putenv和setenv函數若成功則返回0,若出錯,則返回非0.
setenv將環境變數name的值設定為value.如果已存在環境變數name,那麼若rewrite非0,則覆蓋原來的定義,若rewrite為0,則不覆蓋原來的定義,也不返回錯誤。
unsetenv刪除name的定義。即使name沒有定義也不返回錯誤。
例:修改環境變數
運行結果:
怎從程式中獲得/設定環境變數
獲得一個環境變數可以通過調用‘getenv()’函數完成。#include <stdlib.h> char *getenv(const char *name);設定一個環境變數可以通過調用‘putenv()’函數完成。#include <stdlib.h> int putenv(char *string);變數string應該遵守"name=value"的格式。已經傳遞給putenv函數的字串*不*能夠被釋放或變成無效,因為一個指向它的指標將由‘putenv()’儲存。這意味著它必須是在待用資料區中或是從堆(heap)分配的。如果這個環境變數被另一個‘putenv()’的調用重新定義或刪除,上述字串可以被釋放。/**************************譯者增加***********************************因為putenv()有這樣的局限,在使用中經常會導致一些錯誤,GNU libc 中還包括了兩個BSD風格的函數:#include <stdlib.h> int setenv(const char *name, const char *value, int replace); void unsetenv(const char *name);setenv()/unsetenv()函數可以完成所有putenv()能做的事。setenv() 可以不受指標限制地向環境變數中添加新值,但傳入參數不可為空(NULL)。當replace為0時,如果環境變數中已經有了name項,函數什麼也不做(保留原項),否則原項被覆蓋。 unsetenv()是用來把name項從環境變數中刪除。注意:這兩個函數只存在在BSD和GNU 庫中,其他如SunOS系統中不包括它們,因此將會帶來一些相容問題。我們可以用 getenv()/putenv()來實現:int setenv(const char *name, const char *value, int replace) { char *envstr; if (name == NULL || value == NULL) return 1; if (getenv(name) !=NULL) { envstr = (char *) malloc(strlen(name) + strlen(value) + 2); sprintf (envstr, "%s=%s", name, value); if (putenv(envstr)); return 1; } return 0; }**************************譯者增加***********************************/記住環境變數是被繼承的;每一個進程有一個不同的環境變數表拷貝(譯者註:從core檔案中我們可以看出這一點)。結果是,你不能從一個其他進程改變當前進程的環境變數,比如shell進程。假設你想得到環境變數‘TERM’的值,你需要使用下面的程式:char *envvar; envvar=getenv("TERM"); printf("The value for the environment variable TERM is "); if(envvar) { printf("%s\n",envvar); } else { ......餘下全文>>
C語言怎產生UTF-8編碼格式的檔案
如果你要在linux下使用 這個指令碼可以讓你批量成為utf8
#!/bin/sh
#Convert all xml config files to EUC
for file in $(find . -name '*.xml') ;
do
if [ -f $file ] ; then
#echo Converting to euc: $file
nkf -utf8 $file > temp_file
mv -f temp_file $file
fi
done
如果你是用弄utf8檔案的話 使用emeditor free 右下角 很好用的