環境變數和地址空間
環境變數
linux系統中的環境變數是用來指定系統執行的環境的一些引數,例如編寫程式碼時,連結時的動態靜態庫,我們並不知道在哪裡,但照樣可以連結成功,簡單來說,就是通過環境變數幫助編譯器進行查詢。
檢視環境變數
echo $環境變數名稱
常見的幾個環境變數
- PATH:系統提供搜尋路徑的環境變數
- HOME: 簡單來說就是使用者登入到linux系統中時,預設的目錄
- HISTSIZE:儲存歷史命令記錄的條數(例如,翻動上鍵時可以找到上一次的命令,此次算一條)
- SHELL:當前SHELL,值通常為/bin/bash
環境標量相關的指令
- env :顯示所有的環境變數
- echo:顯示某個環境標量
- export:設定一個新的環境變數
- unset: 清除環境變數
- set: 顯示本地定義的環境變數
環境變數也是一種變數,這種變數具有全域性屬性
獲取環境變數的方法
1. 通過程式碼獲取,用main函式的引數來獲取
#include<stdio.h>
int main(int argc,char *argv[],char *env[]) //第一個參數列示引數的個數,第二個是具體的引數,第三個是環境變數
{
int i = 0;
for(; env[i];i ++i)
{
printf("%s\n",env[i]);
}
retrun 0;
}
2.通過第三方變數enviro獲取
#include<stdio.h>
int main()
{
3.用getenv函式來訪問特定的的環境變數
printf("%s\n",getenv());
地址空間
記憶體地址就是對一個記憶體的一個編號,一個地址指向的就是記憶體的某個位置
在實際操作中我們發現,用fork建立的子程式和父程式輸出的地址一模一樣,但內容變數是不一樣的,在實際中,兩個程式的實體地址是不可能一樣的,由此可以得出結論:我們用c/c++語言所看到的地址都是——虛擬地址,子程式和父程式輸出的變數不是同一個變數
建立一個程式的底層實現,如下圖
建立一個程式總結:
- 先為程式建立一個PCB;
- 每一個PCB都指向一個虛擬地址(mm_struct);
- 系統在分配一個頁表將虛擬地址對映到實體記憶體當中;(如上圖所指,所以父程式和子程式的地址相同,即虛擬地址相同,內容不同,其實是被對映到了不同的物理空間)
相關文章
- Linux 新增環境變數和刪除環境變數Linux變數
- 環境變數變數
- Mac 設定環境變數的位置、檢視和新增PATH環境變數Mac變數
- JS變數和執行環境JS變數
- PCIE配置和地址空間
- linux基礎——shell變數(本地變數和環境變數)Linux變數
- #環境變數 相關的環境變數請複製過來,可能會和變數
- 簡述SHELL全域性環境變數與局變環境變數變數
- Vue 設定環境變數和模式Vue變數模式
- JDK和Java環境變數的配置JDKJava變數
- Java 環境變數Java變數
- jdk環境變數JDK變數
- DOS環境變數變數
- env 環境變數變數
- 環境變數path變數
- Java環境變數Java變數
- ORACLE 環境變數Oracle變數
- postman環境變數Postman變數
- 配置環境變數變數
- 在Linux中,什麼是環境變數?如何設定和檢視環境變數?Linux變數
- ubuntu 快捷新增和刪除環境變數Ubuntu變數
- ubuntu JDK 環境變數UbuntuJDK變數
- 配置JDK環境變數JDK變數
- 環境變數詳解變數
- Flume 配置環境變數變數
- Shell配置環境變數變數
- Java環境變數新增Java變數
- 【Linux】環境變數!!!Linux變數
- Kaldi配置環境變數變數
- MySQL 環境變數配置MySql變數
- unix下環境變數 .變數
- Linux 環境變數Linux變數
- oracle 環境變數 redhatOracle變數Redhat
- 設定環境變數變數
- SQL*PLUS 環境變數SQL變數
- jdk環境變數配置JDK變數
- JDK配置環境變數JDK變數
- java環境變數配置Java變數