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

下載本文檔

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

文檔簡介

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

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

3、tc gcc -s 不進(jìn)行匯編,只生成匯編語言 某些代碼直接就是用匯編寫的 gcc -c 將原文件編程.o文件(即二進(jìn)制文件) 仍然不可執(zhí)行,為什么? gcc -o 指定輸出文件的名字,重新命名 不加-o,輸出a.out,makefile - 1,“自動化編譯”,提高效率 寫好后,只需調(diào)用make,整個工程完全自動編譯 大多數(shù)的IDE都有這個命令 Delphi的make Visual C+的nmake Linux下GNU的make Make工具最主要也是最基本的功能 通過makefile文件來描述源程序之間的相互關(guān)系 自動維護(hù)編譯工作 makefile 文件需要按照某種語法進(jìn)行編寫 說明如何編

4、譯各個源文件并連接生成可執(zhí)行文件 定義源文件之間的依賴關(guān)系 -f選項(xiàng) 缺省文件名為Makefile或makefile make f MyMakefile,makefile - 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

5、 c.h cc -c filec.c 注1:一定要用Tab鍵 注2:目標(biāo)vs依賴關(guān)系(最小重建),makefile - 3,Makefile中的宏定義 OBJECTS= filea.o fileb.o filec.o LIBES= -LS prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog GNU make 的主要預(yù)定義變量 $*:不包含擴(kuò)展名的目標(biāo)文件名稱 $+:所有依賴文件(可重復(fù)),空格分開,以出現(xiàn)先后為序 $:第一個依賴文件的名稱 $?:所有依賴文件,空格分開,修改日期比目標(biāo)創(chuàng)建日期晚 $:目標(biāo)的完整名稱 $:所有依賴文件,以空格分開,不包含

6、重復(fù)的依賴文件 $%:若目標(biāo)是歸檔成員,則該變量表示目標(biāo)的歸檔成員名稱,makefile - 4,Makefile中定義模式規(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主要完成下面四個方面的功能 啟動程序,按照自定義的要求隨心所欲地運(yùn)行程序 設(shè)置斷點(diǎn)(斷點(diǎn)可以是條件表達(dá)式) 程序停住時,可以檢查此時程序中所發(fā)生的事 動態(tài)改變程序的執(zhí)

7、行環(huán)境(變量值等) 使用條件 編譯時要設(shè)置-g參數(shù) 編譯結(jié)果包含調(diào)試信息 使用方式 利用gdb啟動程序 指定進(jìn)程ID,gdb自動attach上去并調(diào)試 同時調(diào)試一個運(yùn)行程序和core文件,gdb的使用2,1、使用gdb啟動程序 gdb myprogram 2、設(shè)置斷點(diǎn)(breakpointb) (gdb) b filename:line-number (gdb) b filename:function-name (gdb) b 46 if testsize=100 (當(dāng)前文件的46行) 3、開始執(zhí)行(runr) 4、變量的檢查和賦值 whatis:識別數(shù)組或變量的類型 ptype:比whati

8、s的功能更強(qiáng),可以提供一個結(jié)構(gòu)的定義 set variable:將值賦予變量 print :顯示一個變量的值外;還可以用來賦值,gdb的使用3,5、繼續(xù)執(zhí)行(continuec) 6、單步執(zhí)行 next(n):不進(jìn)入的單步執(zhí)行 step (s):進(jìn)入的單步執(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、

9、斷點(diǎn)管理 (gdb) info break (gdb) delete breakpoint 1 (gdb) disable/enable breakpoint 1,變量的作用域與內(nèi)存分配,全局變量 臨時變量 類成員(C+) namespace 內(nèi)存分配原則 全局變量存放在數(shù)據(jù)區(qū) 局部變量存放在棧區(qū) 動態(tài)變量存放在堆區(qū) 棧 是系統(tǒng)提供并管理,快速高效,無須釋放(自動釋放) 對進(jìn)程/線程是惟一的 普通的棧數(shù)據(jù)結(jié)構(gòu),LIFO 局部變量安排在那里,可以在一個函數(shù)結(jié)束后平衡堆棧 缺點(diǎn)是有限制,數(shù)據(jù)不靈活,變量的作用域與內(nèi)存分配,堆(動態(tài)區(qū)) 函數(shù)庫提供,靈活方便,數(shù)據(jù)適應(yīng)面廣泛程序員管理 對進(jìn)程/線程不

10、一定唯一 程序編譯時產(chǎn)生的一塊用于產(chǎn)生動態(tài)內(nèi)存分配使用的塊 操作比棧麻煩,分配和回收時的效率比棧低 分配時要判斷最優(yōu)地址:防止產(chǎn)生無用的內(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)ワ堭^里吃飯,只管點(diǎn)菜(發(fā)出申請)、付錢、和吃(使用),吃飽了就走,不必理會切菜、洗菜等準(zhǔn)備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小 使用堆就象是自己動手做喜歡吃的菜肴,

11、比較麻煩,但是比較符合自己的口味,而且自由度大 雖然堆棧、堆棧的說法是連起來叫,但是他們還是有很大區(qū)別的,連著叫只是由于歷史的原因,函數(shù)調(diào)用的過程,壓入?yún)?shù) 將調(diào)用者給出的參數(shù)一一壓入堆棧 壓入斷點(diǎn) 程序執(zhí)行到Call指令時,當(dāng)前語句地址作為斷點(diǎn)地址壓入堆棧 跳轉(zhuǎn) 當(dāng)前指令下一條指令的地址被重設(shè)為被調(diào)函數(shù)的起始地址 堆棧中已分配給局部變量的內(nèi)存空間的初始化 順序執(zhí)行函數(shù)內(nèi)語句 此時函數(shù)的堆棧位于所有局部變量的內(nèi)存空間之后 返回 為保障調(diào)用的正常返回,函數(shù)內(nèi)應(yīng)當(dāng)保證規(guī)范使用堆棧 使即將返回的時候“下一條指令地址” 值恢復(fù)為執(zhí)行第一條語句前的狀態(tài) 每一條push都要有相應(yīng)的pop 為什么值參的修改不起作用?,編程輔助工具,版本管理 CVS:Concurrent Version System VSS:Visual Source Safe Beyond Compare 文件夾和文件對比工具 Source Insight 面向項(xiàng)目開發(fā)的程序編輯器和代碼瀏覽器 能分析源代碼并動態(tài)維護(hù)符號數(shù)據(jù)庫,自動顯示上下文信息 還能顯

溫馨提示

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

最新文檔

評論

0/150

提交評論