一、基本概念
一般是指在作業系統中用來指定作業系統執行環境的一些引數;
環境變數通常具有某些特殊用途,還有在系統當中通常具有全域性特性。
二、常見環境變數
path:檢視可執行程式的環境變數;
home:指定使用者的主工作目錄;
shell:儲存當前所使用的shell得到的環境變數,它的值通常是/bin/bash;
ld_library_path:程式執行時,庫檔案的搜尋路徑的環境變數;
library_path:程式編譯時,庫檔案的搜尋路徑和環境變數。
三、常見指令
echo $[變數名]:顯示某個環境變數值。
在命令列中修改環境變數只在當前bash下有用:
①export [環境變數名] = 環境變數值
②export [環境變數名] = $[環境變數名] : [新增的環境變數]。
env:顯示所有環境變數及其值。
當前使用者的環境變數:~/.bashrc/~/.bash_profile
set:顯示本地定義的shell變數和環境變數。
系統下的環境變數:/etc/bashrc
readonly:將環境變數設為唯讀狀態。
unset [環境變數名]:清除環境變數。
四、組織方式
每個程式都會收到一張環境表,環境表是乙個字元指標陣列,每個指標指向乙個以』\0』結尾的環境字串
五、通過**獲取環境變數
命令列引數
#include
intmain
(int argc,
char
* ar**,
char
* env)
//argc為命令列引數的個數
第三方變數environ獲取
#include
#include
intmain()
系統呼叫
#include
#include
intmain()
六、環境變數通常具有全域性屬性,可以被子程序繼承[dev@localhost c]$ vim test.c
#include
#include
intmain()
[dev@localhost c]$ gcc test.c -o test
[dev@localhost c]$ .
/test //沒有結果,證明環境變數不存在
[dev@localhost c]$ export myenv=
"helloworld"
//匯出環境變數
[dev@localhost c]$ .
/test
helloworld //匯出環境變數後才顯示
#include
//mygetenv
intmain
(int argc,
char
* ar**)
一、程序虛擬位址空間
#include
#include
#include
int g_val =10;
intmain()
else
return0;
}child [
10574]-
[10573
]- g_val =
[100][
0x601054
]//變數值不一樣,但位址一樣
father [
10573]-
[4723
]- g_val =[10
][0x601054
]
釋:①父子程序輸出的變數不是同乙個變數,但位址是一樣的,說明該位址絕不是實體地址。
②在linux位址下,這種位址叫做虛擬位址,它是人為規定的,不能儲存資料;我們在用c/c++語言所看到的位址,都是虛擬位址。
③儲存資料依靠介質。即物理記憶體,而實體地址,使用者一概看不到,由os統一管理,os必須負責將虛擬位址轉化成實體地址。
頁表:對映程序虛擬位址空間。
寫實拷貝:資料發生修改,才分配乙個物理記憶體,並且會改變頁表當中的對映關係。eg.上述**中,若g_val的變數值不修改為100,那麼子程序的頁表對映關係不變,仍然指向物理記憶體中的g_val=10。
二、儲存器管理方式
分頁式:將虛擬位址分成一頁一頁的格式,將物理記憶體分成一塊一塊的格式。(塊大小一般為4096kb)
①頁號 = 虛擬位址/塊大小;
②頁內偏移 = 虛擬位址%塊大小;
③塊號:根據頁號在頁表中的對映查詢塊號;
④塊的起始位址 = 塊號 * 塊大小;
⑤實體地址 = 塊的起始位址 + 頁內偏移。
分段式:將虛擬位址對映為實體地址的結構為段表,以段為單位劃分,各個段的長度因程式而異。
實體地址 = 段起始位址 + 段內偏移
段頁式:
注:
分頁式儲存資料效率高,分段式效率低;
分段式可通過段表的結構,找到虛擬位址空間當中的一段。
三、程序優先順序
是為了保證作業系統排程程序時比較合理,可以使用 top 命令檢視。
pr為程序優先順序的數值,數值越小代表優先順序越高,使用者不能直接修改該值來改變程序優先順序。
ni為程序優先順序的修正值,使用者可以改變該值來影響程序優先順序,pr(new)=pr(old)+ni,
top -> r -> pid -> 輸入ni值 (範圍:-20~19),
Linux下程序與環境變數
1.在shell下可以通過命令env或set檢視當前系統的環境變數資訊。2.獲取環境變數的值 extern char getenv const char name 如果執行成功,此函式返回指定環境變數的值,否則返回null。3.新增環境變數 extern int putenv char string...
Linux程序環境變數簡介
最早知道環境變數是裝jdk時,需要對path進行操作,path也是全域性環境變數.linux有一些環境變數可以在.bashrc中修改 cabal 環境變數新增到path中 export path home cabal bin path程序也有環境變數,其實就是一些key value 儲存位置位於程序...
Linux 程式之環境變數
linux 程式之環境變數 linux 程式內部支援環境變數的設定,獲取變數值以及環境變數的取消。環境變數是系統執行時根據其值進行一些對應的操作變化。典型如path會改變系統的執行檔案的搜尋路徑。linux 命令列中對環境變數的操作有 variable value 設定環境變數的值 export v...