網(wǎng)站建設(shè)優(yōu)化排名百度推廣登錄后臺
目錄
1.引言
1.1bash的部分工作
1.2main函數(shù)也有參數(shù)?
1.3我們可以通過給main函數(shù)傳入不同的參數(shù),讓同一份代碼實(shí)現(xiàn)不同的功能
1.4先認(rèn)識一個環(huán)境變量PATH,幫助Linux找到指令程序的地址?
2.環(huán)境變量
2.1環(huán)境變量的概念
2.2見見其他的環(huán)境變量
2.3自己設(shè)置環(huán)境變量
2.4程序自己獲取環(huán)境變量
2.4.1通過參數(shù)env獲取環(huán)境變量
2.4.2環(huán)境變量的特性?
2.4.2通過getenv()(系統(tǒng)調(diào)用接口)獲取環(huán)境變量?
2.4.3環(huán)境變量的一個小應(yīng)用
2.4.4第三方調(diào)用接口獲取環(huán)境變量
2.5環(huán)境變量的配置文件
2.5環(huán)境變量與本地變量
1.引言
1.1bash的部分工作
這一個就是我們命令行的開始,這個是誰輸入的呢?這個其實(shí)是bash輸出的。
bash不僅輸出開頭,還幫我們接受輸入值。?
1.2main函數(shù)也有參數(shù)?
?
我們在命令行中輸入字符串,都被bash傳遞給了main函數(shù),
argc存儲輸入字符串的個數(shù),argv存儲輸入的所有字符串。
1.3我們可以通過給main函數(shù)傳入不同的參數(shù),讓同一份代碼實(shí)現(xiàn)不同的功能
?./mybin -add 1 2 ,這個就是我們在運(yùn)行自己的程序,這個是不是和Linux下的指令特別相似。之前提到,Linux下的指令其實(shí)上本質(zhì)就是程序,這點(diǎn)在這里也得到了驗(yàn)證,
但是,這里還有一點(diǎn)區(qū)別的是我們自己的程序./ mybin 聲明了自己的路徑(執(zhí)行一個程序必須先找到一個程序),而Linux下的指令卻不需要聲明路徑,這是為什么呢?
我們聯(lián)想到應(yīng)該是有一個未知的東西幫助指令完成了這個工作。
1.4先認(rèn)識一個環(huán)境變量PATH,幫助Linux找到指令程序的地址?
?其實(shí)上這個PATH路徑就是一個默認(rèn)的搜索路徑,當(dāng)你輸入一個命令沒有輸入路徑時,Linux就會默認(rèn)到這個路徑下搜索。
PATH不是一個單一路徑,這是一個以冒號( :)作為分隔符的很多路徑的集合。
我們?nèi)绻麑⒆约旱某绦蛱砑拥?#xff0c;PATH內(nèi)的某一路徑下時,也可以在執(zhí)行時不需要添加路徑。?(這里不建議這么干,因?yàn)槟銓懙能浖吘怪皇且粋€半成品,貿(mào)然加進(jìn)去可能會污染命令池)。
?我們同樣也可以把我們的可執(zhí)行程序所處的路徑加入到PATH變量當(dāng)中去。
PATH = 路徑:$PATH(這里對PATH是覆蓋式寫入的,需要加上:PATH來保留之前的值)?
2.環(huán)境變量
2.1環(huán)境變量的概念
環(huán)境變量,一般是系統(tǒng)內(nèi)置的的具有特殊作用的變量(本質(zhì)就是系統(tǒng)開辟空間,給他名字和內(nèi)容)。
環(huán)境變量不是一個,而是一堆,彼此之間沒有特殊聯(lián)系。?
2.2見見其他的環(huán)境變量
如PWD就是記錄著你的當(dāng)前路徑,當(dāng)你使用pwd命令時,OS才能給你返回值。
。。。?
env 查看所以的環(huán)境變量?
就是當(dāng)你訪問操作系統(tǒng)的時候,操作系統(tǒng)根本不知道你是誰。
是操作系統(tǒng),在當(dāng)你登錄的時候,把你需要的周邊信息都暫時維護(hù)起來了。當(dāng)操作系統(tǒng)需要識別你是誰時,或者你的主機(jī)號等等你的信息時,就能夠直接通過環(huán)境變量去找。
就是每次當(dāng)你登錄的時候,操作系統(tǒng)都會開辟一段空間,把你用戶的信息維護(hù)起來。?
2.3自己設(shè)置環(huán)境變量
export name=val
2.4程序自己獲取環(huán)境變量
2.4.1通過參數(shù)env獲取環(huán)境變量
其實(shí)上,main函數(shù)還有一個參數(shù),char * env[],這個數(shù)組里就存儲著環(huán)境變量字符串的第一個字符的的地址。?
?
2.4.2環(huán)境變量的特性?
我們發(fā)現(xiàn),bash進(jìn)程真的把環(huán)境變量以參數(shù)的形式傳遞給了main函數(shù)。?
我們的程序運(yùn)行的時候,也會變成一個進(jìn)程,那么他的環(huán)境變量就應(yīng)該是來著bash,也就是他的父進(jìn)程。?
環(huán)境變量的特性:具有全局屬性 ,會被所有的子進(jìn)程和孫子進(jìn)程給繼承。
如果某一進(jìn)程需要修改,即發(fā)生寫時拷貝
2.4.2通過getenv()(系統(tǒng)調(diào)用接口)獲取環(huán)境變量?
const char *username=getenv("USER");
2.4.3環(huán)境變量的一個小應(yīng)用
利用環(huán)境變量設(shè)置一個小權(quán)限,讓代碼只有自己能夠運(yùn)行。?
2.4.4第三方調(diào)用接口獲取環(huán)境變量
#include <stdio.h>
int main(int argc, char *argv[])
{extern char **environ;int i = 0;for(; environ[i]; i++)
{printf("%s\n", environ[i]);}return 0;
}
2.5環(huán)境變量的配置文件
我們發(fā)現(xiàn),當(dāng)我們在把環(huán)境變量在命令行上直接給修改了,我們重啟Linux的時候,再次查看環(huán)境變量,他就恢復(fù)成了原樣。
這就說明了,我們的修改數(shù)據(jù)僅僅停留在了內(nèi)存上,當(dāng)虛擬機(jī)重啟的時候,文件重新加載進(jìn)入內(nèi)存的時候一切都恢復(fù)了。?
2.5環(huán)境變量與本地變量
?環(huán)境變量具有全局屬性,會被子進(jìn)程繼承。
本地變量,只會留在本進(jìn)程