2通過程式獲得環境變數,getenv(),setenv()函數和unsetenv()函數,env查看環境變數,echo輸出指定的環境變數,getenvsetenv

來源:互聯網
上載者:User

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 右下角 很好用的
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.