freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

arm嵌入式linux系統(tǒng)開發(fā)詳解-資料下載頁(yè)

2025-04-29 01:28本頁(yè)面
  

【正文】 加載的時(shí)候,內(nèi)核會(huì)檢查程序使用到的動(dòng)態(tài)庫(kù)是否已經(jīng)加載到內(nèi)存,如果沒有加載到內(nèi)存,則從系統(tǒng)庫(kù)路徑搜索并且加載相關(guān)的動(dòng)態(tài)庫(kù);如果動(dòng)態(tài)庫(kù)已經(jīng)被加載到內(nèi)存,程序可以直接使用而扌爰釉亍從動(dòng)態(tài)庫(kù)的工作原理可以看出,任何一個(gè)動(dòng)態(tài)庫(kù)僅會(huì)被系統(tǒng)加載一次。使用程序動(dòng)態(tài)庫(kù)還有一個(gè)好處,就是可以減小應(yīng)用程序占用的空間和加載時(shí)間。 程序如何來(lái)的 編譯的全部過程在 ,通過命令行輸入 gcc 出一個(gè)可執(zhí)行文件 。在使用 gcc編譯 c語(yǔ)言源代碼文件的時(shí)候, gcc隱含進(jìn)行了兩個(gè)過程:編譯和連接。所以確切的說,應(yīng)該是編譯連接 c語(yǔ)言源代碼文件,本節(jié)就講一下這個(gè)過程。 編譯源代碼編譯的目的是把人書寫的高級(jí)語(yǔ)言代碼翻譯成目標(biāo)程序的語(yǔ)言處理程序,編譯用的程序(例如 gcc)也可以稱為編譯系統(tǒng)。一個(gè)編譯系統(tǒng)把一個(gè)源程序翻譯成目標(biāo)程序的工作過程分為五個(gè)階段:詞法分析、語(yǔ)法分析、中間代碼生成、代碼優(yōu)化和目標(biāo)代碼生成。其中主要階段是詞法分析和語(yǔ)法分析,也可以稱為源代碼分析,分析過程中發(fā)現(xiàn)有語(yǔ)法錯(cuò)誤,給出提示信息。 1.詞法分析2.語(yǔ)法分析3.中間代碼生成4.代碼優(yōu)化5.目標(biāo)代碼生成 鏈接目標(biāo)文件到指定的庫(kù)源代碼經(jīng)過編譯以后,需要鏈接才可以在 Linux系統(tǒng)運(yùn)行,鏈接的作用是把代碼中調(diào)用的系統(tǒng)函數(shù)和對(duì)應(yīng)的系統(tǒng)庫(kù)建立關(guān)系,設(shè)置程序啟動(dòng)時(shí)候的內(nèi)存,環(huán)境變量等,以及程序退出的狀態(tài),釋放占用的資源等操作,這些背后的工作對(duì)用戶都是隱含的。 gcc在連接用戶目標(biāo)文件的時(shí)候會(huì)根據(jù)用戶代碼使用不同的函數(shù)連接對(duì)應(yīng)的動(dòng)態(tài)或者靜態(tài)庫(kù)(根據(jù)連接選項(xiàng),默認(rèn)是動(dòng)態(tài)庫(kù)),同時(shí),還會(huì)對(duì)所有的目標(biāo)文件連接固定的預(yù)編譯好的系統(tǒng)目標(biāo)文件,這幾個(gè)預(yù)編譯好的目標(biāo)文件用來(lái)完成程序初始化,結(jié)束時(shí)的環(huán)境設(shè)置等。 更簡(jiǎn)單的辦法 —— 用 Makefile管理工程的程序:gcc 以及使用如下的方法編譯一個(gè)靜態(tài)程序:gcc –static 什么是 MakefileMakefile是一個(gè)文本文件,是 GNU make程序在執(zhí)行的時(shí)候默認(rèn)讀取的配置文件。 Makefile有強(qiáng)大的功能,它記錄了文件之間的依賴關(guān)系,通過比對(duì)目標(biāo)文件和依賴文件的時(shí)間戳,決定是否需要執(zhí)行相應(yīng)的命令;同時(shí), Makefile還可以定義變量,接收用戶傳遞的參數(shù)變量,通過這些元素的相互配合,省去了繁雜的編譯命令,不僅節(jié)省時(shí)間,也減小了出錯(cuò)的概率。 它是如何工作的Makfile的工作原理是通過比對(duì)目標(biāo)文件和依賴文件的時(shí)間戳,執(zhí)行對(duì)應(yīng)的命令。Makfile的語(yǔ)法結(jié)構(gòu)如下:(目標(biāo)文件):(依賴文件 1)(依賴文件 2)(依賴文件 … )(命令 1)(命令 2)(命令 … ) 如何使用 Makefile仍然以編譯 ,下面的步驟使用Makefile編譯和管理 。( 1)創(chuàng)建 Makefile文件。在 vi Makefile。( 2)輸入 Makefile的內(nèi)容。在 vi插入模式,輸入下面的內(nèi)容。hello_test : gcc –o hello_test clean :rm fr hello_test *.o *.core( 3)使用 make管理程序。 好的源代碼管理習(xí)慣在一個(gè)軟件項(xiàng)目中,往往會(huì)將不同功能的代碼放在不同的文件中,這時(shí)候,一個(gè)好的代碼管理方法就顯得很重要,凌亂的代碼分布不僅對(duì)調(diào)試帶來(lái)很多麻煩,對(duì)以后的升級(jí)和維護(hù)都是一個(gè)不小的挑戰(zhàn)。這里給出幾個(gè)代碼管理的建議:1.把不同功能的代碼放在不同的文件,并且把必要的函數(shù)放在對(duì)應(yīng)的頭文件2.對(duì)軟件模塊劃分層次 小結(jié)本章從一個(gè)簡(jiǎn)單的應(yīng)用程序入手,介紹了開發(fā)一個(gè)Linux應(yīng)用程序的流程。通過實(shí)例分析了編譯和連接的原理,并且剖析了程序執(zhí)行的過程。最后講述了 Makefile管理工程文件如何管理軟件代碼。請(qǐng)讀者多實(shí)踐,只有不斷的實(shí)踐才能對(duì)這部分的知識(shí)深入理解。第 7章講解 Linux應(yīng)用程序開發(fā)的基礎(chǔ)知識(shí)。第 7章 Linux應(yīng)用程序編程基礎(chǔ)Linux系統(tǒng)的應(yīng)用程序是為了完成某項(xiàng)或者某些特定任務(wù)的計(jì)算機(jī)程序,應(yīng)用程序和文檔組成了軟件。應(yīng)用程序都是在操作系統(tǒng)基礎(chǔ)上運(yùn)行的, Linux應(yīng)用程序運(yùn)行在用戶模式,可以通過 Shell或者圖形界面與用戶交互。應(yīng)用程序運(yùn)行在獨(dú)立的進(jìn)程,擁有自己獨(dú)立的地址空間,通俗的說,在一個(gè)應(yīng)用程序看來(lái),他自己擁有計(jì)算機(jī)的資源,并不知道其他應(yīng)用程序的存在。本章講解 Linux應(yīng)用程序開發(fā)的重要概念,主要內(nèi)容如下:C內(nèi)存管理ANSI C文件讀寫操作POSIX文件讀寫操作 內(nèi)存管理和使用內(nèi)存管理是計(jì)算機(jī)編程的一個(gè)重要部分,也是許多程序員頭疼的一個(gè)部分。在目前的嵌入式系統(tǒng)中,資源仍然是有限的。在程序設(shè)計(jì)的時(shí)候,內(nèi)存管理十分重要。 C程序的內(nèi)存管理靈活,接口簡(jiǎn)單,這也是初學(xué)者容易出錯(cuò)的根本,讀者在學(xué)習(xí)本節(jié)內(nèi)容的時(shí)候應(yīng)注重多實(shí)踐。本節(jié)首先講解Linux程序的基本結(jié)構(gòu),之后介紹 C程序的內(nèi)存管理函數(shù),最后給出了 C程序內(nèi)存管理的實(shí)例。 堆和棧的區(qū)別1.棧棧( stack)是一個(gè)由編譯器分配釋放的區(qū)域,用來(lái)存放函數(shù)的參數(shù),局部變量等。操作方式類似于數(shù)據(jù)結(jié)構(gòu)教材里的棧。當(dāng)調(diào)用函數(shù)時(shí),被調(diào)用函數(shù)的參數(shù)和返回值被存儲(chǔ)到當(dāng)前程序的棧區(qū),之后被調(diào)用函數(shù)在為自身的自動(dòng)變量和臨時(shí)變量在棧區(qū)上分配空間。當(dāng)函數(shù)調(diào)用返回時(shí),在棧區(qū)內(nèi)的參數(shù)返回值,自動(dòng)變量和臨時(shí)變量等會(huì)被釋放。這就是為什么 C語(yǔ)言函數(shù)參數(shù)如果不是指針的話,被修改的參數(shù)結(jié)果用戶無(wú)法得到的原因。函數(shù)的調(diào)用和棧的使用方式保證了不同函數(shù)內(nèi)部定義相同名字的變量不會(huì)混淆。棧的管理方式是 FILO( First In Last Out),稱作先進(jìn)后出,學(xué)過數(shù)據(jù)結(jié)構(gòu)的讀者知道,棧內(nèi)的數(shù)據(jù)是在一個(gè)方向管理的,先到達(dá)的數(shù)據(jù)最后被讀出來(lái),生活中就有這樣的例子,比如火車的棧,就是車頭先進(jìn)入,但是出來(lái)的時(shí)候卻是車尾先出來(lái),車頭最后出。 堆和棧的區(qū)別2.堆堆( heap)一般位于 bss段和棧之間,用來(lái)動(dòng)態(tài)分配內(nèi)存。這段區(qū)域由程序員管理,程序員利用操作系統(tǒng)提供的分配和釋放函數(shù)使用堆區(qū)的內(nèi)存。如果程序員在堆上分配了一段內(nèi)存,卻沒有釋放,在目前主流的操作系統(tǒng)上,退出時(shí)會(huì)被操作系統(tǒng)釋放。但是這并不是一個(gè)好的習(xí)慣,因?yàn)槎褏^(qū)的空間不是無(wú)限的,過多姆峙浠岬賈露涯詿嬉緋觶 ? 絳蛞斐I踔簾覽!堆的管理與棧不同,操作系統(tǒng)在堆空間維護(hù)一個(gè)鏈表(請(qǐng)參考數(shù)據(jù)結(jié)構(gòu)相關(guān)定義),每次程序員從堆分配內(nèi)存的時(shí)候操作系統(tǒng)會(huì)從堆區(qū)掃描未用空間,當(dāng)一個(gè)空間的大小符合申請(qǐng)空間的時(shí)候,就把此空間返回給程序員,同時(shí)會(huì)把申請(qǐng)的空間加入鏈表;當(dāng)程序員釋放一個(gè)空間的時(shí)候,操作系統(tǒng)會(huì)從堆的鏈表中刪除指定的節(jié)點(diǎn),并且把釋放的空間放回未用空間。 內(nèi)存管理函數(shù) malloc()和 free()C程序有兩個(gè)主要的內(nèi)存管理函數(shù): malloc()函數(shù)負(fù)責(zé)分配內(nèi)存; free()函數(shù)釋放 malloc()分配的內(nèi)存。這兩個(gè)函數(shù)都是 C標(biāo)準(zhǔn)庫(kù) , Linux系統(tǒng)函數(shù)原型:void *malloc(size_t size)。void free(void *ptr)。 實(shí)用的內(nèi)存分配函數(shù) calloc()和realloc()在 C程序開發(fā)項(xiàng)目中,還有兩個(gè)實(shí)用的內(nèi)存分配函數(shù):calloc()用來(lái)分配一塊新內(nèi)存; realloc()用來(lái)改變一塊已經(jīng)分配的內(nèi)存的大小。這兩個(gè)函數(shù)都是在 C標(biāo)準(zhǔn)庫(kù)的 件定義的。1. calloc()函數(shù)2. realloc()函數(shù) 內(nèi)存管理編程實(shí)例本節(jié)給出一個(gè)內(nèi)存管理編程實(shí)例。該實(shí)例代碼展示了malloc()函數(shù), calloc()函數(shù)分配內(nèi)存空間寫入字符串,之后使用 realloc()函數(shù)重新分配內(nèi)存空間,最后釋放動(dòng)態(tài)分配的內(nèi)存。程序在分配的內(nèi)存空間內(nèi)寫入字符串,通過打印字符串到屏幕展示內(nèi)存分配的結(jié)果。 ANSI C文件管理本節(jié)重點(diǎn)講解 ANSI C文件庫(kù)。包括文件指針的概念;文件和流之間的關(guān)系;文本和二進(jìn)制文件;和文件的基本操作。 ANSI的 C標(biāo)準(zhǔn)文件庫(kù)封裝了文件的系統(tǒng)調(diào)用,為了提高效率還加入了文件緩沖機(jī)制,提供記錄的方式讀寫文件,并且具有良好的可移植性和健壯性,是 Linux C語(yǔ)言最基本的文件編程。 文件指針和流文件是可以永久存儲(chǔ)的,有特定順序的一個(gè)有序,有名稱的字節(jié)組成的集合。在 Linux系統(tǒng)中,通常能見到的目錄、設(shè)備文件和管道等,都屬于文件,具有不同的特性。本節(jié)描述的 ANSI文件只能用于普通文件操作。ANSI文件操作提供了一個(gè)重要的結(jié)構(gòu) 文件指針 FIL。文件的打開、讀寫和關(guān)閉以及其他訪問都要通過文件指針完成。 FILE結(jié)構(gòu)通常作為 FILE*的方式使用,因此被稱作文件指針,這個(gè)結(jié)構(gòu)在 :typedef struct {int level。 unsigned flags。 char fd。 unsigned char hold。int bsize。 unsigned char _FAR *buffer。 unsigned char _FAR *curp。unsigned istemp。short token。 } FILE。 存儲(chǔ)方式ANSI C規(guī)定了兩種文件的存儲(chǔ)方式:文本方式和二進(jìn)制方式。文本文件也稱作 ASCII文件,每個(gè)自己存儲(chǔ)一個(gè)ASCII碼字符,文本文件存儲(chǔ)量大,便于對(duì)字符操作,但是操作速度慢;二進(jìn)制文件降數(shù)據(jù)按照內(nèi)存中的存儲(chǔ)形式存放,二進(jìn)制文件的存儲(chǔ)量小,存取速度快,適合存放中間結(jié)果。在 Linux系統(tǒng)上,文件的存放都是按照二進(jìn)制方式存儲(chǔ)的,用戶在打開的時(shí)候,根據(jù)用戶指定的打開方式進(jìn)行存取。 標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸入和標(biāo)準(zhǔn)錯(cuò)誤Linux系統(tǒng)為每個(gè)進(jìn)程定義了標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤三個(gè)文件流,也稱作 I/O數(shù)據(jù)流。系統(tǒng)預(yù)定義的三個(gè)文件流有固定的名稱,因此無(wú)需創(chuàng)建可以直接使用。 stdin是標(biāo)準(zhǔn)輸入,默認(rèn)是從鍵盤讀取數(shù)據(jù); stdout是標(biāo)準(zhǔn)輸出,默認(rèn)向屏幕輸出數(shù)據(jù); stderr是標(biāo)準(zhǔn)錯(cuò)誤,默認(rèn)是向屏幕輸出數(shù)據(jù)。三個(gè) I/O數(shù)據(jù)流定義在 ,程序在使用前需要引用相關(guān)頭文件。 C標(biāo)準(zhǔn)庫(kù)函數(shù) printf()默認(rèn)使用 stdout輸出數(shù)據(jù),用戶也可以通過重新設(shè)置標(biāo)準(zhǔn) I/O,把程序的輸入輸出結(jié)果定向到其他設(shè)備。 緩沖標(biāo)準(zhǔn)文件 I/O庫(kù)提供了緩沖機(jī)制,目的是為了減少外部設(shè)備的讀寫次數(shù)。同時(shí),使用緩沖也能提高應(yīng)用程序的讀寫性能。標(biāo)準(zhǔn)文件 I/O提供了三種類型的緩沖:全緩沖。行緩沖。不帶緩沖。 打開關(guān)閉文件ANSI C文件庫(kù)定義了打開文件函數(shù) fopen()和關(guān)閉文件函數(shù)fclose(),定義如下:FILE *fopen(const char *path, const char *mode)。int fclose(FILE * stream)。mode參數(shù) 說明r或 rb 為讀打開文件w或 wb 為寫打開文件,并把文件長(zhǎng)度置為 0(清空文件)a或 ab 在文件結(jié)尾添加打開r+或 r+b或 rb+ 為讀和寫打開w+或 w+b或 wb+ 為寫打開文件,并把文件長(zhǎng)度置 0(清空文件)a+或 a+b或 ab+ 在文件結(jié)尾讀寫打開 讀寫文件一但成功打開一個(gè)文件后,就可以進(jìn)行文件操作了,ANSI C文件庫(kù)提供了三種不同類型的文件讀寫函數(shù):每次一個(gè)字符的 I/O。每次一行的 I/O。成塊數(shù)據(jù)的 I/O。1.每次一個(gè)字符的文件讀寫函數(shù)2.每次一行的文件讀寫函數(shù)3.成塊數(shù)據(jù)的文件讀寫函數(shù) 文件流定位在讀寫文件的時(shí)候每個(gè)文件流都會(huì)維護(hù)一個(gè)文件流指針,表示當(dāng)前文件流的讀寫位置,在打開文件的時(shí)候文件流指針位于文件的最開頭(使用 ‘a(chǎn)’方式打開的文件,文件流指針位于文件最后),當(dāng)讀寫文件流的時(shí)候,讀寫文件流的函數(shù)會(huì)不斷改變文件流當(dāng)前位置。當(dāng)用戶在寫入一些數(shù)據(jù)后,如果需要讀取之前寫入的數(shù)據(jù),或者需要修改指定文件位置的數(shù)據(jù),就需要用到文件流定位功能。為此, ANSI文件 I/O庫(kù)提供了文件流定位函數(shù),定義如下:int fseek(FILE *stream, long offset, int whence)。long ftell(FILE *stream)。void rewind(FILE *stream)。 ANSI C文件編程實(shí)例在本節(jié)最后,給出一個(gè)文件編程實(shí)例,打開一個(gè)文件,向文件寫入三個(gè)字符串,然后重新定位文件流讀寫指針到文件起始位置,從文件讀取剛寫入的三個(gè)字符串到另一個(gè)緩沖,并且打印讀出來(lái)的字符串。 POSIX文件 I/O編程POSIX是可移植操作系統(tǒng)接口的簡(jiǎn)寫,英文全程是Portable Operating System Interface。最初由 IEEE(Institute of Electrical and Electronics Engineers, IEEE)開發(fā),目的是為了提高 UNIX環(huán)境下的應(yīng)用程序可移植性。實(shí)際上 POSIX并不局限于 UNIX,只要符合此標(biāo)準(zhǔn)的操作系統(tǒng)的系統(tǒng)調(diào)用是一致的,例如 Linux和 Microsoft Windows NT。 POSIX是一組操作系統(tǒng)調(diào)用的規(guī)范,本節(jié)介紹其中的文件I/O編程規(guī)范。 底層的文件 I/O操作和 ANSI文件操作函數(shù)不同的是, POSIX文件操作的函數(shù)基本上和計(jì)算機(jī)設(shè)備驅(qū)動(dòng)的底層操作(例如 read, write等)是一一對(duì)應(yīng)的。讀者可以把 POSIX文件操作理解為對(duì)設(shè)備驅(qū)動(dòng)操作的封裝。由此也可以看出, POSIX文件操作是
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1