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

正文內(nèi)容

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

2025-04-29 01:28本頁面
  

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