unix系統介紹:
最早版於2023年問世於貝爾實驗室,作者是丹尼斯.里奇和肯.湯普遜。
是最早的多使用者、多工、支援多種cpu架構,高安全性、高穩定性、高可靠性。
既能構架大型關鍵性業務系統的商用伺服器,也能支援嵌入式裝置。
minix基於微核心載入的類unix系統,名為minix(即小型的unix),並開放全部源**給大學教學和研究工作,linux之父林納克斯,正是在受了minix的啟發,才開發了linux系統。
linux系統介紹:
linux,全稱gnu/linux,其核心由林納斯・托瓦茲於2023年第一次公開在校內網的ftp伺服器上。
它主要受到minix和unix思想的啟發,是乙個基於posix(可移植作業系統介面)和unix的多使用者、多工、支援多執行緒和多cpu的作業系統。
linux繼承了unix以網路為核心的設計思想,是乙個效能穩定的多使用者網路作業系統。
linux的標誌:小企鵝,因為企鵝是南極的標誌性動物,而南極目前沒有被任何任何國家占有,是屬於全世界人民的。
gnu組織:通用的非商業類unix系統,目前也是全世界最大的開源組織,負責linux核心源的公升級維護。
gpl通用許可證:在帶gpl證書的**的基礎上開發出的軟體,也必須支援gpl證書。
posix:統一的作業系統介面,unix和linux都遵循了該標準,所有它們的命令、api介面基本上是通用的。
發行版:linux只是核心,核心+shell+基礎軟體才是可用的作業系統。
其它公司可以根據linux核心製作出不同版的linux系統。
ubuntu、redhat、centos、debian、uos
#error 提示錯誤,並阻止生成可執行檔案,要與條件判斷配合使用。
#warning 提示警告,
#line 設定行號
#pragma pack(1/2/4/8) 對齊與補齊的最大位元組數
#pragma once 相當於標頭檔案衛士
#pragma gcc dependency "file.h" 監控檔案
#pragma gcc poison "key" 設定關鍵字為病毒,禁止在**中使用。
庫:
庫檔案就是目標檔案的集合,可以被其它**呼叫,把**封裝成庫檔案後方便使用、方便管理、安全性高、保密性強。
靜態庫:就是目標檔案的集合,呼叫靜態庫就是把靜態庫中的二進位制指令拷貝到可執行檔案中。
優點:執行速度比共享庫快。
缺點:可執行檔案相對較大,當靜態庫修改後,可執行檔案要重新編譯。
共享庫:就是沒入口的可以執行檔案,呼叫共享庫就是記錄共享中二進位制指標的位置即可。當執行可執行檔案時共享庫會被一起載入到記憶體,可執行檔案中可以跳轉到共享庫中執行。
優點:可執行檔案相對較小,當共享庫修改後,可執行檔案不要重新編譯。
缺點:執行速度比靜態庫慢,可執行檔案執行時也需要依賴共享庫。
注意:當共享與靜態庫同時存在時,編譯器會優先使用共享庫,-static編譯引數 優先使用靜態庫。
動態載入共享庫:
#include
void *dlopen(const char *filename, int flag);
功能:開啟共享庫
filename:共享庫的名字
flag:
rtld_lazy 延遲載入
rtld_now 立即載入
返回值:共享庫的控制代碼
char *dlerror(void);
功能:獲取錯誤資訊
void *dlsym(void *handle, const char *symbol);
功能:從共享庫中獲取函式指標
handle:共享庫的控制代碼,也就是dlopen的返回值
symbol:函式名
int dlclose(void *handle);
功能:關閉共享庫
返回值:成功返回0,失敗返回-1。
注意:使用要新增dl庫,這種方式的好處就是可以在編譯時不依賴共享庫。
靜態庫和共享庫輔助工具:
ldd 檢視可執行程式依賴那些共享庫
nm 檢視目標檔案、可執行檔案、靜態庫、共享庫中的符號列表
strip **,刪除目標檔案、可執行檔案、靜態庫、共享庫中的符號。
objdump 顯示目標檔案、可執行檔案、靜態庫、共享庫反彙編資訊。
環境變數表:
每個程式執行時作業系統都會給乙個環境變數表,該表中記錄了作業系統所有的環境變數,這些環境變數反映了作業系統的配置,以及該程式所處理的系統環境。
宣告extern char** environ; 就可以使用。
操作環境變數表的函式:
char *getenv(const char *name);
功能:獲取環境變數的值
int setenv(const char *name, const char *value, int overwrite);
功能:向環境變數表中新增環境變數
name:環境變數名
value:環境變數的值
overwrite:當環境存在時
為真修改環境變數的值
為假不修改環境變數的值
int putenv(char *string);
功能:name=value 新增或修改環境變數,如果已經存在則修改,不存在則新增。
返回值:成功返回0,失敗返回-1。
int unsetenv(const char *name);
功能:刪除環境變數
返回值:成功返回0,失敗返回-1。
int clearenv(void);
功能:清空環境變數表
Linux UNIX命令dd簡介
dd 是 linux unix 下的乙個非常有用的命令,作用是用指定大小的塊拷貝乙個檔案,並在拷貝的同時進行指定的轉換。dd 的主要選項 指定數字的地方若以下列字元結尾乘以相應的數字 b 512,c 1,k 1024,w 2,xm number m if file 輸入檔名,預設為標準輸入。of f...
Linux UNIX命令dd簡介
dd 是linux unix 下的乙個非常有用的命令,作用是用指定大小的塊拷貝乙個檔案,並在拷貝的同時進行指定的轉換。dd 的主要選項 指定數字的地方若以下列字元結尾乘以相應的數字 b 512,c 1,k 1024,w 2,xm number m if file 輸入檔名,預設為標準輸入。of fi...
Linux UNIX命令dd簡介
dd 是 linux unix 下的乙個非常有用的命令.作用是用指定大小的塊拷貝乙個檔案,並在拷貝的同時進行指定的轉換。dd 的主要選項 指定數字的地方若以下列字元結尾乘以相應的數字 b 512,c 1,k 1024,w 2,xm number m if file 輸入檔名 預設為標準輸入。of f...