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

下載本文檔

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

文檔簡介

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

2、工具,3.1.1 Shell簡介在Linux系統(tǒng)開發(fā)過程中,開發(fā)者或者用戶與Linux系統(tǒng)(內(nèi)核)進行交互的時候需要一個平臺,這就是Shell,有了它,用戶就能通過鍵盤輸入與系統(tǒng)進行交互了。單從字面意思上理解,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命令了。在按“回車鍵”以確認當前操作之前,可以對輸入的內(nèi)容進

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

5、 diff命令(7)配置、編譯、安裝源碼包軟件(8)中斷Shell命令執(zhí)行的方法(9)模塊管理指令,3.1.3 編寫Shell腳本,Shell不僅僅是命令的執(zhí)行,而且是一種編程語言,它提供了定義變量和參數(shù)的手段以及豐富的程序控制結(jié)構(gòu),,1.建立腳本編輯Shell腳本文件使用Linux下的普通編輯器如vi、Emacs等即可。Linux下的Shell默認采用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腳本,運行該腳本可以有以下的幾種方法。(1)設(shè)置好腳本的執(zhí)行權(quán)限之后再執(zhí)行腳本(2)使用Bash內(nèi)部指令"source"(3)直接使用sh命令來執(zhí)行,3.1.4

7、 正則表達式,正則表達式是一種可以用于模式匹配和替換的有效工具。正則表達式描述了一種字符串匹配的模式,可以用來檢查一個串是否含有某種子串、將匹配的子串做替換或者從某個串中取出符合某個條件的子串等。正則表達式由普通字符(例如字符a到z)以及特殊字符(稱為特殊字符)組成特定文字模式。當從一個文件或命令中抽取或者過濾文本時,使用正則表達式可以簡化命令中的匹配表達。,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è)計之初是為了維護C程序文件不必要的重新編

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

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

11、文件的依賴文件,引用這些文件的時候引用存儲這些文件的變量即可,這給Makefile編寫和維護者帶來了很大的方便。2.代表編譯命令選項所有編譯命令都帶有相同編譯選項時(比如-Wall -O2等),可以將該編譯選項賦給一個變量,這樣方便了引用。同時,如果改變編譯選項的時候,只需改變該變量值即可,而不必在每處用到編譯選項的地方都做改動。,3.3 二進制代碼工具的使用,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)建、修改、擴展文件? gasp 匯編宏處理器,,? nm 從目標代碼

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

14、中? size 列出目標模塊或文件的代碼尺寸? strings 打印可打印的目標代碼字符(至少4個字符),打印字符多少可以控制? strip 放棄所有符號連接? c++filt 鏈接器ld使用該命令可以過濾C++符號和Java符號,防止重載函數(shù)沖突? gprof 顯示程序調(diào)用段的各種數(shù)據(jù),3.3.2 Binutils工具軟件使用,1.匯編器 Linux平臺的標準匯編器是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è)置運行環(huán)境和參數(shù)來運行指定程序。? 讓程序在指定斷點處停止執(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í)行時所需的代碼是在運行時動態(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、無法正常運行。,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)用按照功能分類大致可分為以下幾個方面。? 進程控制? 文件系統(tǒng)控制? 系統(tǒng)控制? 內(nèi)存管理? 網(wǎng)絡(luò)管理? socket控制? 用戶管理? 進程間通信,3.6.3 Linux線程庫,簡單地講,進程是資源管理的最小單位,線程是程序執(zhí)行的

21、最小單位。一個進程至少需要一個線程作為它的指令執(zhí)行體,進程管理著資源(比如cpu、內(nèi)存、文件等),而將線程分配到某個cpu上執(zhí)行。一個進程當然可以擁有多個線程。? 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論