命令行參數
命令行參數是指用戶在啟動程序時通過命令行傳遞給程序的參數。這些參數可以用于控制程序的行為、傳遞輸入數據或配置選項。
在 C/C++ 中,命令行參數通過?main
?函數的參數傳遞
命令行參數列表? ??argc:參數的個數? argv[]:參數的清單
為什么要有它?看以下代碼及運行結果
我們用的指令后面為什么可以帶選項,帶選項運行結果就不一樣,這就是通過命令行參數實現的
同一個程序,可以根據選項的不同,表現出不同的功能
環境變量
在main函數中可以有三個參數,前兩個講過了,第三個參數是環境變量
常見環境變量
PATH
為什么我們編譯的代碼不能直接寫code必須待帶./code表示當前路徑的文件
而系統的指令就不用帶./
系統的指令不用帶./,因為系統默認在/usr/bin目錄里找,系統的指令已經在usr/bin目錄里了
為什么系統知道命令在/usr/bin路徑下?
因為環境變量PATH,告訴了shell應該去哪一個路徑下查指令
查看PATH
?PATH是指定路徑的集合,系統可執行文件的搜索集合
如果我不想帶路徑,讓我的程序運行起來?
1. cp /usr/bin
2.把自己的路徑,添加到PATH中
我們把xshell關掉再重新打開,看看PATH會不會變
發現我們改過的PATH又回到初始狀態了,這說明環境變量PATH是內存級別的。那么最開始環境變量的內容是從哪里來的--開始都是在系統配置文件中的
我們登陸xshell,啟動一個xshell進程->讀取用戶和系統相關環境變量的配置文件->形成自己的環境變量表
配置文件在家目錄里 .bashrc? .bach_profile
?
我們在配置文件中,PATH加上我們的路徑,這樣我們即使關掉xshell再打開,我們的路徑在PATH中也不會消失了。
HOME
當前路徑對應的家目錄
發現用戶身份變化,同一個HOME變量,但是環境變量的內容是不一樣的
是默認在我的家目錄下才設置的環境變量,還是先讀取環境變量,把我當前的用戶設置進當前的默認路徑呢?
當我們登陸的時候,先創建bash,bash讀取環境變量配置文件->PATH,HOME已經被設置好了,bash也是一個進程也有自己的cwd,環境變量HOME就是用戶登陸時的cwd
獲取環境變量
getenv()
PWD是保存進程所在的工作路徑的,進程能獲得自己所在的路徑
可以寫一個程序只讓某一個用戶進行訪問
sunhao用戶可以正常訪問
切換到root,不可以訪問
環境變量的導入刪除和驗證
shell中既有本地變量又有環境變量
set可以查到本地變量以及環境變量的信息
?使用
export
命令設置新的環境變量。
刪除環境變量
unset?
本地變量和環境變量都是bash進程維護的字符串
?本地變量不會子進程被繼承,環境變量會被子進程繼承
下面代碼驗證環境變量會被子進程繼承
最開始ISRUNNING=1,ISRUNNING在本地變量中,子進程不能繼承
后來把ISRUNNING? export導入環境變量中,子進程可以繼承
?上面代碼確實驗證了環境變量可以被bash的子進程繼承,那么子進程再fork()出來的子進程也會繼承環境變量嗎?可以的。這就說明環境變量具有"全局屬性"
為什么?
1.系統的配置信息,尤其是具有指導性的配置信息,他是系統配置起效的一種表現
2.進程具有獨立性,環境變量可以用來進程間傳遞數據(只讀數據)
第三方變量environ獲取環境變量