Linux程序 環境變數與程式位址空間

2021-10-01 17:21:04 字數 3402 閱讀 3452

一、基本概念

一般是指在作業系統中用來指定作業系統執行環境的一些引數;

環境變數通常具有某些特殊用途,還有在系統當中通常具有全域性特性。

二、常見環境變數

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...