C語言Linux環境程式設計01

2021-10-09 18:03:33 字數 2875 閱讀 4435

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語言是所有程式語言中的經典,很多高...