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

下載本文檔

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

文檔簡介

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

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

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

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

5、 diff命令(7)配置、編譯、安裝源碼包軟件(8)中斷Shell命令執(zhí)行的方法(9)模塊管理指令,3.1.3 編寫Shell腳本,Shell不僅僅是命令的執(zhí)行,而且是一種編程語言,它提供了定義變量和參數(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)的編程語言一樣,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命令來執(zhí)行,3.1.4

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

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

9、譯,它是一個自動生成和維護(hù)目標(biāo)程序的工具。make是一個解釋Makefile文件中指令的命令工具,其最基本的功能就是通過Makefile文件來描述源程序之間的相互關(guān)系并自動維護(hù)編譯工作,它會告知系統(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ī)則語法,Makefile有其自身特定的編寫格式并且遵循一定的語法規(guī)則。#注釋目標(biāo)文件:依賴文件列表...............命令列表...............,3.2.3 Makefile文件中變量的使用,一般來說,Makefile文件中變量的應(yīng)用主要有以下幾個方面。1.代表一個文件列表Makefile文件中的變量常常存儲一些目標(biāo)文件甚至是目標(biāo)

11、文件的依賴文件,引用這些文件的時候引用存儲這些文件的變量即可,這給Makefile編寫和維護(hù)者帶來了很大的方便。2.代表編譯命令選項所有編譯命令都帶有相同編譯選項時(比如-Wall -O2等),可以將該編譯選項賦給一個變量,這樣方便了引用。同時,如果改變編譯選項的時候,只需改變該變量值即可,而不必在每處用到編譯選項的地方都做改動。,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)換成文件名或行號對,以便調(diào)試程序? ar 從文件中創(chuàng)建、修改、擴(kuò)展文件? gasp 匯編宏處理器,,? nm 從目標(biāo)代碼

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

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

15、工具,通常包含在binutils 軟件包中。2.鏈接器GNU鏈接器使用一個命令語言腳本來控制鏈接過程。,3.4 編譯器GCC的使用,3.4.1 GCC編譯器介紹GCC是GNU項目的編譯器組件之一,也是GNU軟件產(chǎn)品家族具有代表性的作品。GCC的發(fā)展大體經(jīng)歷了下面的幾個階段。① 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④ 庫文件 libgcc.a, libgcc_eh.a, libgcc_s.so, libiberty.a

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

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

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

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

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

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(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

提交評論