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環境C語言程式設計(更新完畢)
課程描述 隨著國內資訊行業的快速發展,linux的使用早已進入各個領域,並且其應用在不斷的增加。無論是伺服器,還是嵌入式,手機等領域,都有linux應用的場景。c語言作為linux的母語,在linux程式設計中有著其不可替代的位置。本教程就逐步介紹linux環境下的c語言程式設計,以滿足實際linu...
C 程式語言基礎01
引入命名空間 using system using system.collections.generic using system.linq using system.text using system.threading.tasks 多行注釋 這是的第乙個程式 這是乙個單行注釋 namespace...
01 C語言程式設計開篇
計算機的發明者是誰 0和1更準確的是應該是高電平和低電平,但是這個不用了解,只需要知道計算機只能識別0和1以及儲存的資料都是由0和1組成的即可。可以看出在日常生活 工作中,人們使用的語言種類很多組合語言高階語言對比 利用3種型別語言編寫1 1 組合語言 高階語言 c語言是所有程式語言中的經典,很多高...