Linux平臺C及C++軟件開發(fā)入門_第1頁
Linux平臺C及C++軟件開發(fā)入門_第2頁
Linux平臺C及C++軟件開發(fā)入門_第3頁
Linux平臺C及C++軟件開發(fā)入門_第4頁
Linux平臺C及C++軟件開發(fā)入門_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Linux平臺C及C+軟件開發(fā)入門邢延超2009年秋季學期主要內(nèi)容 Linux操作系統(tǒng)的安裝及使用 gcc、gdb及makefile文件 內(nèi)存分配與函數(shù)調(diào)用 文件和目錄操作 網(wǎng)絡(luò)編程基礎(chǔ) 多線程編程 進程間通信Linux操作系統(tǒng) 操作系統(tǒng)屬性 基本的系統(tǒng)軟件,是硬件的第一級擴充 基本特征 多任務(wù)并行:分時服務(wù) 資源共享 使用用戶可以充分地利用系統(tǒng)資源 用戶可忽略硬件設(shè)備控制細節(jié),只需提出要求 操作系統(tǒng)負責操縱設(shè)備以完成所希望的工作 資源分配策略(如根據(jù)優(yōu)先級) 通過控制、調(diào)度、分配、管理計算機系統(tǒng)資源,達到對計算機的自動控制操作系統(tǒng)主要功能 存貯管理 為每個程序分配足夠的存貯空間 CPU管理

2、為程序分配優(yōu)先級 采用一定調(diào)度方法,以時間片輪轉(zhuǎn)方式輪流占用CPU 設(shè)備管理 控制外部設(shè)備的操作 在多個作業(yè)間分配設(shè)備 獨占設(shè)備,如打印機 按一定策略輪流分配給用戶使用 共享設(shè)備:磁盤陣列 文件管理 文件的建立、刪除、讀取、或?qū)懭氲确矫娴姆?wù) 進程與線程管理、調(diào)度等Linux的發(fā)展 1991年8月,核心由25歲的芬蘭大學生Linus Torvalds發(fā)布 Linux=Linus+Minix(Linux編寫的類似Minix的系統(tǒng)) MinixMini UNIX,約300MB(還有Idris,Coherent,Uniflex等) 都是重新發(fā)展的,并沒有使用任何AT&T的程序碼 發(fā)布到Int

3、ernet上后不斷修改和完善,幾年后在全球普及 應用平臺 最初針對的是Intel構(gòu)架的個人計算機 在服務(wù)器領(lǐng)域:Sun公司的Sparc工作站、DEC公司的Alpha工作站等 嵌入式開發(fā)方面具有無可比擬的優(yōu)勢 特色 源代碼是自由分發(fā)的,完全公開,完全免費 涵蓋了Unix的所有特診,融合了其它OS的東西 真正的多任務(wù)、虛擬存儲、快速的TCP/IP實現(xiàn)、共享庫、多用戶、支持32位和64位多任務(wù) Linux應用逐漸普及 服務(wù)器 家庭機Linux操作系統(tǒng)的特點 內(nèi)核特點:短小精悍,具有更高的靈活性和適應性 最大特點:源代碼完全公開(核心、驅(qū)動,應用程序等) 主要特點 (1)多用戶、多任務(wù)的操作系統(tǒng) 多個

4、用戶可以同時在相同計算機上操作(通過終端或虛擬控制臺) 可同時執(zhí)行多個進程,提供了進程間通信方式,使各進程能協(xié)同工作 具有進程間內(nèi)存地址保護(當某個進程出錯時,不會波及整個系統(tǒng)) (2)支持多種文件系統(tǒng) Ext2FS、ISOFS、Minix、Xenix、FAT16、FAT32、NTFS等 自己還有一個先進的文件系統(tǒng)(4TB) KiloByte MegaByte GigaByte TeraByte (萬億) (3)符合POSIX 1003.1標準 能夠使用Unix等OS上豐富的應用程序 (4)較好的可移植性 只有小于10的源代碼采用匯編語言編寫,其余均采用C (5)支持多平臺和多處理器 (6)全

5、面支持TCP/IP網(wǎng)絡(luò)協(xié)議 TCP、IPv4、IPX、DDP、AX.25等Linux 與 Windows 的不同 Linux 的應用目標是網(wǎng)絡(luò)而不是打印 純文本易于跨網(wǎng)絡(luò)工作,Linux 配置文件和數(shù)據(jù)都以文本為基礎(chǔ) Linux開發(fā)更多關(guān)注的是其內(nèi)在功能而非表面的東西 圖形環(huán)境并沒有集成到 Linux 中 是運行于系統(tǒng)之上的單獨一層,可選擇 Linux不使用文件名擴展來識別文件的類型 Linux通過文件訪問權(quán)限來判斷文件是否為可執(zhí)行文件 一旦開始運行將保持運行狀態(tài),直到受到外來因素的影響 除了Linux內(nèi)核之外,其他軟件的安裝、啟動、停止和重新配置都不用重新引導系統(tǒng) 可以遠程地完成Linux中

6、的很多工作 如果系統(tǒng)中一個特定的服務(wù)出現(xiàn)了問題,可以在進行故障診斷的同時讓其他服務(wù)繼續(xù)運行 命令區(qū)分大小寫 用戶操作沒有Windows系列方便Linux系統(tǒng)的安裝 一般安裝 分配單獨的硬盤分區(qū);設(shè)置為Linux支持的硬盤格式 虛擬機安裝 定義:軟件模擬的具有完整硬件系統(tǒng)功能的、運行在一個完全隔離環(huán)境中的完整計算機系統(tǒng) 可以在一臺物理計算機上模擬出一臺或多臺虛擬的計算機 完全就像真正的計算機那樣進行工作 安裝操作系統(tǒng)、安裝應用程序、訪問網(wǎng)絡(luò)資源等 對用戶,虛擬機只是運行在物理計算機上的一個應用程序 對虛擬機中運行的應用程序,它就像是一個真正的計算機 虛擬機中發(fā)生的系統(tǒng)崩潰只是虛擬機上的操作系統(tǒng)

7、不是物理計算機上的操作系統(tǒng) 使用 “Undo” 功能,可以馬上恢復虛擬機到安裝軟件前的狀態(tài) 當前主流虛擬機 VMware(VMWare ACE) 在多操作系統(tǒng)支持和執(zhí)行效率上都明顯高出一籌 Virtual PCLinux的使用1 圖形化界面 Mozilla、文本編輯器、目錄管理器、CD播放器 控制臺控制臺 文本界面 高效 開發(fā) 系統(tǒng)管理 目錄結(jié)構(gòu) 惟一根目錄 權(quán)限設(shè)置 文件 PATH變量Linux的使用2 部分Linux命令的簡單介紹 man pwd ls cp mv chmod cd echo mkdir rm su netstatLinux的使用3 系統(tǒng)管理員 構(gòu)建各種服務(wù)器 用戶管理 系

8、統(tǒng)運行情況監(jiān)測 服務(wù)器被攻擊 開發(fā)人員 圖形化開發(fā)工具(如Qt) 非圖形化開發(fā)工具(gcc) 一般用戶 很多時候利用圖形化界面完成工作 娛樂 文檔編輯 上網(wǎng)gcc及其使用 GNU之父Stallman開發(fā)的Linux下的編譯器 GCCGNU Compiler Collection 目前可以編譯的語言 C, C+, Objective-C, Fortran, Java, and Ada 從源文件到可執(zhí)行文件 gcc -E 完成預處理,輸出域名(展開) #include; #define; etc gcc -s 不進行匯編,只生成匯編語言 某些代碼直接就是用匯編寫的 gcc -c 將原文件編程.o文

9、件(即二進制文件) 仍然不可執(zhí)行,為什么? gcc -o 指定輸出文件的名字,重新命名 不加-o,輸出a.outmakefile - 1 “自動化編譯”,提高效率 寫好后,只需調(diào)用make,整個工程完全自動編譯 大多數(shù)的IDE都有這個命令 Delphi的make Visual C+的nmake Linux下GNU的make Make工具最主要也是最基本的功能 通過makefile文件來描述源程序之間的相互關(guān)系 自動維護編譯工作 makefile 文件需要按照某種語法進行編寫 說明如何編譯各個源文件并連接生成可執(zhí)行文件 定義源文件之間的依賴關(guān)系 -f選項 缺省文件名為Makefile或makef

10、ile make f MyMakefilemakefile - 2 #It is a example for describing makefile prog : filea.o fileb.o filec.o cc filea.o fileb.o filec.o -LS -o prog filea.o : filea.c a.h defs cc -c filea.c fileb.o : fileb.c b.h defs cc -c fileb.c filec.o : filec.c c.h cc -c filec.c 注1:一定要用Tab鍵 注2:目標vs依賴關(guān)系(最小重建)makefile

11、 - 3 Makefile中的宏定義 OBJECTS= filea.o fileb.o filec.o LIBES= -LS prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog GNU make 的主要預定義變量 $*:不包含擴展名的目標文件名稱 $+:所有依賴文件(可重復),空格分開,以出現(xiàn)先后為序 $:第一個依賴文件的名稱 $?:所有依賴文件,空格分開,修改日期比目標創(chuàng)建日期晚 $:目標的完整名稱 $:所有依賴文件,以空格分開,不包含重復的依賴文件 $%:若目標是歸檔成員,則該變量表示目標的歸檔成員名稱makefile - 4 Makefile中

12、定義模式規(guī)則 使用模式規(guī)則來定義一個隱含規(guī)則 把所有的.c文件都編譯成.o文件 %.o : %.c $(CC) -c $(CFLAGS) $(CPPFLAGS) $ -o $ 取消內(nèi)建的隱含規(guī)則,只要不在后面寫命令就行 %.o : %.s -l(小L)參數(shù) 添加庫文件 -I(大i)參數(shù) 添加include文件路徑gdb的使用1 GDB主要完成下面四個方面的功能 啟動程序,按照自定義的要求隨心所欲地運行程序 設(shè)置斷點(斷點可以是條件表達式) 程序停住時,可以檢查此時程序中所發(fā)生的事 動態(tài)改變程序的執(zhí)行環(huán)境(變量值等) 使用條件 編譯時要設(shè)置-g參數(shù) 編譯結(jié)果包含調(diào)試信息 使用方式 利用gdb啟動

13、程序 指定進程ID,gdb自動attach上去并調(diào)試 同時調(diào)試一個運行程序和core文件gdb的使用2 1、使用gdb啟動程序 gdb myprogram 2、設(shè)置斷點(breakpointb) (gdb) b filename:line-number (gdb) b filename:function-name (gdb) b 46 if testsize=100 (當前文件的46行) 3、開始執(zhí)行(runr) 4、變量的檢查和賦值 whatis:識別數(shù)組或變量的類型 ptype:比whatis的功能更強,可以提供一個結(jié)構(gòu)的定義 set variable:將值賦予變量 print :顯示一個

14、變量的值外;還可以用來賦值gdb的使用3 5、繼續(xù)執(zhí)行(continuec) 6、單步執(zhí)行 next(n):不進入的單步執(zhí)行 step (s):進入的單步執(zhí)行 finish:想退出該函數(shù)返回到它的調(diào)用函數(shù)中 7、函數(shù)的調(diào)用 (gdb) call gen_and_sork( 1234,1,0 ) 8、顯示數(shù)據(jù) (gdb) print p (p為變量名) (gdb) print find_entry(1,0) 9、程序參數(shù) (gdb)set args b x (gdb) show args 10、斷點管理 (gdb) info break (gdb) delete breakpoint 1 (gd

15、b) disable/enable breakpoint 1變量的作用域與內(nèi)存分配 全局變量 臨時變量 類成員(C+) namespace 內(nèi)存分配原則 全局變量存放在數(shù)據(jù)區(qū) 局部變量存放在棧區(qū) 動態(tài)變量存放在堆區(qū) 棧 是系統(tǒng)提供并管理,快速高效,無須釋放(自動釋放) 對進程/線程是惟一的 普通的棧數(shù)據(jù)結(jié)構(gòu),LIFO 局部變量安排在那里,可以在一個函數(shù)結(jié)束后平衡堆棧 缺點是有限制,數(shù)據(jù)不靈活變量的作用域與內(nèi)存分配 堆(動態(tài)區(qū)) 函數(shù)庫提供,靈活方便,數(shù)據(jù)適應面廣泛程序員管理 對進程/線程不一定唯一 程序編譯時產(chǎn)生的一塊用于產(chǎn)生動態(tài)內(nèi)存分配使用的塊 操作比棧麻煩,分配和回收時的效率比棧低 分配時

16、要判斷最優(yōu)地址:防止產(chǎn)生無用的內(nèi)存碎片內(nèi)存碎片 需要精確的申請內(nèi)存/ 釋放內(nèi)存匹配 分靜態(tài)分配 編譯器完成的,比如自動變量(auto)的分配 動態(tài)分配 由alloc函數(shù)完成 棧的動態(tài)分配無需釋放(是自動的) 靜態(tài)變量(static) 作用域可以是局部的 靜態(tài)區(qū)的一次存?。ň哂杏洃浶裕┒褩^(qū)別的小結(jié) 使用棧就象我們?nèi)ワ堭^里吃飯,只管點菜(發(fā)出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小 使用堆就象是自己動手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大 雖然堆棧、堆棧的說法是連起來叫,但是他們還是有很大區(qū)

17、別的,連著叫只是由于歷史的原因函數(shù)調(diào)用的過程 壓入?yún)?shù)壓入?yún)?shù) 將調(diào)用者給出的參數(shù)一一壓入堆棧將調(diào)用者給出的參數(shù)一一壓入堆棧 壓入斷點壓入斷點 程序執(zhí)行到程序執(zhí)行到Call指令時,當前語句地址作為斷點地址壓入堆棧指令時,當前語句地址作為斷點地址壓入堆棧 跳轉(zhuǎn)跳轉(zhuǎn) 當前指令下一條指令的地址被重設(shè)為被調(diào)函數(shù)的起始地址當前指令下一條指令的地址被重設(shè)為被調(diào)函數(shù)的起始地址 堆棧中已分配給局部變量的內(nèi)存空間的初始化堆棧中已分配給局部變量的內(nèi)存空間的初始化 順序執(zhí)行函數(shù)內(nèi)語句順序執(zhí)行函數(shù)內(nèi)語句 此時此時函數(shù)的堆棧位于所有局部變量的內(nèi)存空間之后函數(shù)的堆棧位于所有局部變量的內(nèi)存空間之后 返回返回 為保障調(diào)用的正常返回,函數(shù)內(nèi)應當保證規(guī)范使用堆棧為保障調(diào)用的正常返回,函數(shù)內(nèi)應當保證規(guī)范使用堆棧 使即將返回的時候使即將返回的時候“下一條指令地址下一條指令地址” 值恢復為執(zhí)行第一條語句前值恢復為執(zhí)行第一條語句前的狀態(tài)的狀態(tài) 每一條每一條push都要有相應的都要有相應的pop 為什么值參的修改不起作用?為什么值參的修改不起作用?編程輔助工具 版本管理 CVS:Concurrent Version System VSS:Visual Source

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論