2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第3章 Linux編程環(huán)境,www.farsight.com.cn,2,,本章內(nèi)容包括常用的Linux開(kāi)發(fā)工具使用技巧和Linux編程技術(shù)。本章內(nèi)容比Linux編程方面的書籍簡(jiǎn)略得多,重點(diǎn)介紹常用的Linux編程工具和技巧。通過(guò)本章學(xué)習(xí)可以使讀者快速掌握基本的Linux開(kāi)發(fā)工具,為后續(xù)的嵌入式Linux開(kāi)發(fā)打下基礎(chǔ)。,本章目標(biāo),常用Linux編程工具 GNU工具鏈的使用技巧 Linux編程庫(kù)的API介紹,3.1 Linux常用

2、工具,3.1.1 Shell簡(jiǎn)介在Linux系統(tǒng)開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者或者用戶與Linux系統(tǒng)(內(nèi)核)進(jìn)行交互的時(shí)候需要一個(gè)平臺(tái),這就是Shell,有了它,用戶就能通過(guò)鍵盤輸入與系統(tǒng)進(jìn)行交互了。單從字面意思上理解,Shell的本意是“殼”的意思,通俗地講就是內(nèi)部核心與外部使用者發(fā)生聯(lián)系的介質(zhì)。,,Shell工作示意圖,,,Shell提供了用戶與操作系統(tǒng)之間通訊的方式。這種通信可以以交互方式(從鍵盤輸入,并且可以立即得到響應(yīng)),或者以S

3、hell script(非交互)方式執(zhí)行。Shell本身又是一個(gè)解釋型的程序,也是一種編程語(yǔ)言,Shell程序設(shè)計(jì)語(yǔ)言支持絕大多數(shù)在高級(jí)語(yǔ)言中能見(jiàn)到的程序元素,如函數(shù)、變量、數(shù)組和程序控制結(jié)構(gòu)。,3.1.2 常用Shell命令,1.Shell命令的一般格式命令名 【選項(xiàng)】 【參數(shù)1】 【參數(shù)2】…命令行輸入實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在命令行中就可以輸入Shell命令了。在按“回車鍵”以確認(rèn)當(dāng)前操作之前,可以對(duì)輸入的內(nèi)容進(jìn)

4、行編輯。,2.命令行輸入,命令行輸入實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在命令行中就可以輸入Shell命令了。在按“回車鍵”以確認(rèn)當(dāng)前操作之前,可以對(duì)輸入的內(nèi)容進(jìn)行編輯。,3.常用Shell命令介紹,3.常用Shell命令介紹(1)輸入命令行自動(dòng)補(bǔ)齊(automatic command line completion)功能(2)對(duì)目錄和文件的操作(3)用戶管理(4)文件的打包和壓縮(5)rpm軟件包的安裝(6)源碼維護(hù)基本命令

5、 diff命令(7)配置、編譯、安裝源碼包軟件(8)中斷Shell命令執(zhí)行的方法(9)模塊管理指令,3.1.3 編寫Shell腳本,Shell不僅僅是命令的執(zhí)行,而且是一種編程語(yǔ)言,它提供了定義變量和參數(shù)的手段以及豐富的程序控制結(jié)構(gòu),,1.建立腳本編輯Shell腳本文件使用Linux下的普通編輯器如vi、Emacs等即可。Linux下的Shell默認(rèn)采用Bash,所以本書也主要以Bash腳本為例介紹2.Shell變量Sh

6、ell腳本中主要有以下幾種變量:系統(tǒng)變量,環(huán)境變量,用戶變量,,3.流程控制同傳統(tǒng)的編程語(yǔ)言一樣,Shell提供了很多特性,如數(shù)據(jù)變量、參數(shù)傳遞、判斷、流程控制、數(shù)據(jù)輸入和輸出、子程序及以中斷處理等。4.Shell腳本的執(zhí)行如果已經(jīng)寫好Shell腳本,運(yùn)行該腳本可以有以下的幾種方法。(1)設(shè)置好腳本的執(zhí)行權(quán)限之后再執(zhí)行腳本(2)使用Bash內(nèi)部指令"source"(3)直接使用sh命令來(lái)執(zhí)行,3.1.4

7、 正則表達(dá)式,正則表達(dá)式是一種可以用于模式匹配和替換的有效工具。正則表達(dá)式描述了一種字符串匹配的模式,可以用來(lái)檢查一個(gè)串是否含有某種子串、將匹配的子串做替換或者從某個(gè)串中取出符合某個(gè)條件的子串等。正則表達(dá)式由普通字符(例如字符a到z)以及特殊字符(稱為特殊字符)組成特定文字模式。當(dāng)從一個(gè)文件或命令中抽取或者過(guò)濾文本時(shí),使用正則表達(dá)式可以簡(jiǎn)化命令中的匹配表達(dá)。,3.1.5 程序編輯器,編輯器是系統(tǒng)的重要工具之一,在各種操作系統(tǒng)中,編輯

8、器都是必不可少的部件。Linux系統(tǒng)提供了一個(gè)完整的編輯器家族系列,如Ed、Ex、Vi和Emacs等,按功能它們可以分為兩大類。? 行編輯器(如Ed、Ex)? 全屏幕編輯器(如Vi、Emacs),,Vi有3種基本工作模式:指令行模式、文本輸入模式、末行模式,它們的相互關(guān)系如下。,,3.2 Makefile,3.2.1 GNU makeGNU make最初是Unix系統(tǒng)下的一個(gè)工具,設(shè)計(jì)之初是為了維護(hù)C程序文件不必要的重新編

9、譯,它是一個(gè)自動(dòng)生成和維護(hù)目標(biāo)程序的工具。make是一個(gè)解釋Makefile文件中指令的命令工具,其最基本的功能就是通過(guò)Makefile文件來(lái)描述源程序之間的相互關(guān)系并自動(dòng)維護(hù)編譯工作,它會(huì)告知系統(tǒng)以何種方式編譯和鏈接程序。,,通常狀況之下GNU make的工作流程如下。① 查找當(dāng)前目錄下的Makefile文件② 初始化文件中的變量③ 分析Makefile中的所有規(guī)則④ 為所有的目標(biāo)文件創(chuàng)建依賴關(guān)系⑤ 根據(jù)依賴關(guān)系,決定哪些

10、目標(biāo)文件要重新生成⑥ 執(zhí)行生成命令,3.2.2 Makefile規(guī)則語(yǔ)法,Makefile有其自身特定的編寫格式并且遵循一定的語(yǔ)法規(guī)則。#注釋目標(biāo)文件:依賴文件列表...............命令列表...............,3.2.3 Makefile文件中變量的使用,一般來(lái)說(shuō),Makefile文件中變量的應(yīng)用主要有以下幾個(gè)方面。1.代表一個(gè)文件列表Makefile文件中的變量常常存儲(chǔ)一些目標(biāo)文件甚至是目標(biāo)

11、文件的依賴文件,引用這些文件的時(shí)候引用存儲(chǔ)這些文件的變量即可,這給Makefile編寫和維護(hù)者帶來(lái)了很大的方便。2.代表編譯命令選項(xiàng)所有編譯命令都帶有相同編譯選項(xiàng)時(shí)(比如-Wall -O2等),可以將該編譯選項(xiàng)賦給一個(gè)變量,這樣方便了引用。同時(shí),如果改變編譯選項(xiàng)的時(shí)候,只需改變?cè)撟兞恐导纯?,而不必在每處用到編譯選項(xiàng)的地方都做改動(dòng)。,3.3 二進(jìn)制代碼工具的使用,3.3.1 GNU Binutils工具介紹在Linux下建立嵌入

12、式交叉編譯環(huán)境要用到一系列的工具鏈(tool-chain),主要有比如GNU Binutils、Gcc、Glibc、Gdb等,它們都屬于GNU的工具集。GNU Binutils工具集里主要有以下一系列的部件。? as GNU的匯編器? ld GNU的鏈接器? add2line 將地址轉(zhuǎn)換成文件名或行號(hào)對(duì),以便調(diào)試程序? ar 從文件中創(chuàng)建、修改、擴(kuò)展文件? gasp 匯編宏處理器,,? nm 從目標(biāo)代碼

13、文件中列舉所有變量(包括變量值和變量類型),如果沒(méi)有指定目標(biāo)文件,則默認(rèn)是a.out文件? objcopy objcopy工具使用GNU BSD庫(kù),它可以把目標(biāo)文件的內(nèi)容從一種文件格式復(fù)制到另一種格式的目標(biāo)文件中? add2line 把程序地址轉(zhuǎn)換為文件名和行號(hào)? objdump 顯示目標(biāo)文件信息? readelf 顯示elf文件信息? ranlib 生成索引以加快對(duì)歸檔文件的訪問(wèn),并將其保存到這個(gè)歸檔文件

14、中? size 列出目標(biāo)模塊或文件的代碼尺寸? strings 打印可打印的目標(biāo)代碼字符(至少4個(gè)字符),打印字符多少可以控制? strip 放棄所有符號(hào)連接? c++filt 鏈接器ld使用該命令可以過(guò)濾C++符號(hào)和Java符號(hào),防止重載函數(shù)沖突? gprof 顯示程序調(diào)用段的各種數(shù)據(jù),3.3.2 Binutils工具軟件使用,1.匯編器 Linux平臺(tái)的標(biāo)準(zhǔn)匯編器是GAS,它是GCC所依賴的后臺(tái)匯編

15、工具,通常包含在binutils 軟件包中。2.鏈接器GNU鏈接器使用一個(gè)命令語(yǔ)言腳本來(lái)控制鏈接過(guò)程。,3.4 編譯器GCC的使用,3.4.1 GCC編譯器介紹GCC是GNU項(xiàng)目的編譯器組件之一,也是GNU軟件產(chǎn)品家族具有代表性的作品。GCC的發(fā)展大體經(jīng)歷了下面的幾個(gè)階段。① 1987年,第一版的GCC發(fā)布。② 2001.6.18,GCC3.0正式發(fā)布。③ 2004.4.20,GCC 3.4.0版本發(fā)布。④ 2005.

16、4.22,最新版本的GCC 4.0發(fā)布,官方網(wǎng)站:http://gcc.gnu.org。GCC是一組編譯工具的總稱,其軟件包里包含眾多的工具,按其類型,主要有以下的分類。① C編譯器 cc, cc1, cc1plus, gcc② C++編譯器 c++, cc1plus, g++③ 源碼預(yù)處理程序 cpp, cpp0④ 庫(kù)文件 libgcc.a, libgcc_eh.a, libgcc_s.so, libiberty.a

17、, libstdc++.[a,so], libsupc++.a,3.4.2 GCC編譯選項(xiàng)解析,GCC是Linux下基于命令行的c語(yǔ)言編譯器,其基本的使用語(yǔ)法如下。gcc [option | filename ]…對(duì)于編譯C++的源程序,其基本的語(yǔ)法如下。g++ [ option | filename ]…GCC擁有眾多的命令選項(xiàng),有超過(guò)100個(gè)的編譯選項(xiàng)可用,按其應(yīng)用有如下的分類。,,1.常用編譯選項(xiàng)2.出錯(cuò)檢查和警告提示

18、選項(xiàng)3.代碼優(yōu)化選項(xiàng)4.調(diào)試分析選項(xiàng),3.5 調(diào)試器GDB的使用技巧,3.5.1 GDB調(diào)試器介紹以下是GDB所提供的一些功能。? 啟動(dòng)程序,并且可以設(shè)置運(yùn)行環(huán)境和參數(shù)來(lái)運(yùn)行指定程序。? 讓程序在指定斷點(diǎn)處停止執(zhí)行。? 對(duì)程序做出相應(yīng)的調(diào)整,這樣就能糾正一個(gè)錯(cuò)誤后繼續(xù)調(diào)試。使用gdb命令的語(yǔ)法如下。# gdb [參數(shù)] Filename,3.5.2 GDB調(diào)試命令,常用到的GDB調(diào)試命令。,3.6 Li

19、nux編程庫(kù),3.6.1 Linux編程庫(kù)介紹Linux下的庫(kù)文件分為共享庫(kù)和靜態(tài)庫(kù)2大類,它們兩者的差別僅在程序執(zhí)行時(shí)所需的代碼是在運(yùn)行時(shí)動(dòng)態(tài)加載的,還是在編譯時(shí)靜態(tài)加載的。此外,通常共享庫(kù)以.so(Shared Object)結(jié)尾,靜態(tài)鏈接庫(kù)通常以.a結(jié)尾(Archive)。在終端下查看庫(kù)的內(nèi)容,通常共享庫(kù)為綠色,而靜態(tài)庫(kù)為黑色。Linux的庫(kù)一般在/lib或/usr/lib目錄下。它主要存放系統(tǒng)的鏈接庫(kù)文件,沒(méi)有該目錄則系統(tǒng)

20、無(wú)法正常運(yùn)行。,3.6.2 Linux系統(tǒng)調(diào)用,從字面意思上理解,系統(tǒng)調(diào)用說(shuō)的是操作系統(tǒng)提供給用戶程序調(diào)用的一組“特殊”接口。Linux系統(tǒng)有200多個(gè)系統(tǒng)調(diào)用,這些系統(tǒng)調(diào)用按照功能分類大致可分為以下幾個(gè)方面。? 進(jìn)程控制? 文件系統(tǒng)控制? 系統(tǒng)控制? 內(nèi)存管理? 網(wǎng)絡(luò)管理? socket控制? 用戶管理? 進(jìn)程間通信,3.6.3 Linux線程庫(kù),簡(jiǎn)單地講,進(jìn)程是資源管理的最小單位,線程是程序執(zhí)行的

21、最小單位。一個(gè)進(jìn)程至少需要一個(gè)線程作為它的指令執(zhí)行體,進(jìn)程管理著資源(比如cpu、內(nèi)存、文件等),而將線程分配到某個(gè)cpu上執(zhí)行。一個(gè)進(jìn)程當(dāng)然可以擁有多個(gè)線程。? pthread_create() 創(chuàng)建新的線程? pthread_join() 等待線程結(jié)束? pthread_self() 獲取線程ID? pthread_detach() 用于讓線程脫離? pthread_exit() 終止線程,www.fa

溫馨提示

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

評(píng)論

0/150

提交評(píng)論