嵌入式GUI開發設計:基於MiniGUI

本書特點:

基於處於快速發展階段的MiniGUI系統,由權威培訓機構為讀者解讀MiniGUI3.0新技術的套用。

結合了GUI理論和MiniGUI系統的實現,讓讀者同時從廣度和深度上對嵌入式GUI乃至嵌入式系統有深入的了解。

提供了詳盡的配套光碟,包含大量的原始碼和套用,可使讀者具備快速搭建系統的能力,並能快速上手,搭建自己的系統。

書中包含眾多事例,可操作性、可擴展性強,能充分發揮讀者的想像力。

內 容 簡 介

《嵌入式GUI開發設計——基於MiniGUI》是一本嵌入式圖形用戶系統套用開發方面的教程,由作者韓超結合飛漫官方授權資料編著。本書通過介紹MiniGUI系統的開發,給讀者一個學習嵌入式GUI程式設計和實現的平台。MiniGUI系統是一個由中國人實現、目前廣泛在套用的優秀嵌入式GUI系統,通過這個系統的學習,可以了解嵌入式GUI開發的思想和方法,也可以加深對嵌入式系統開發的理解。本書結合嵌入式GUI系統的通用知識對MiniGUI系統進行了充分的介紹,篇幅控制詳略得當,配合光碟使用,可以達到事半功倍的效果。本書主體分成三個層次:MiniGUI的架構、MiniGUI的各種功能、基於MiniGUI構建應用程式,這是學習嵌入式GUI系統較為便捷和高效的方式。

前 言

時至今日,MiniGUI已經走過了十年的路程。目前的MiniGUI已經成為一套具有完整清晰定義的移植層、優秀的視窗管理機制、豐富而易用的控制項並可以進行外觀定製的嵌入式GUI系統;在上層的組件中,MiniGUI還包含了3D接口、輸入法、列印甚至瀏覽器等組件。從一款默默無聞的小型GUI程式,到現在成為全球嵌入式軟體領域的鼎鼎大名的軟體。對於中國人來說,MiniGUI所承載不僅僅是一款軟體的成功,更體現了中國人的東方式智慧完全有能力在世界的嵌入式軟體行業中占據一席之地。可以肯定地說,MiniGUI的誕生和發展鼓舞了中國人在軟體研發領域的熱情,也堅定了中國人進入世界嵌入式軟體開發前沿的信念。

MiniGUI的發展歷程同時也從一個側面體現了中國嵌入式技術的發展歷程。MiniGUI的創始人魏永明先生等一批中國嵌入式技術的先驅引領了嵌入式技術在中國發展的潮流。自從1998年魏永明先生髮布MiniGUI的第一個版本開始,這個項目就一直吸引並帶領著來自不同專業、不同領域的國人進入了嵌入式技術的世界。作為一個交叉學科,嵌入式系統的技術需要綜合性的人才,MiniGUI的發展吸引了更多人進入這個領域。作為一個嵌入式的GUI系統,MiniGUI的開發讓人們更多熟悉了嵌入式系統的開發流程。在這個過程中,嵌入式技術的門檻對於大眾降低了很多,以前某些只有研發企業和高校才有能力開發的項目,現在普通的愛好者也可以參與開發。更多人的參與同時也促進嵌入式技術在中國有了更好的發展。

從MiniGUI的開源版本中,我們深刻地感受到了這箇中國人自己創作的一套完整嵌入式GUI系統的魅力。隨著對MiniGUI的學習,很多人在數年之前進入了嵌入式系統領域,他們當中很多人成為了現今中國大陸地區嵌入式技術的中堅。在對MiniGUI的關注中,每一個從事嵌入式研發相關的人員都可以得到豐富的收穫,從API的制定、為移植構建的抽象層、代碼組織、軟體組織架構乃至整個嵌入式系統中間件的架構。

飛漫公司的成立也已經有6個年頭了,MiniGUI在飛漫公司的運作中得到了更大的發展。在這個過程中,我們欣喜地看到MiniGUI並沒有像很多純粹的技術產品一樣虎頭蛇尾,而是在開源版本和商業版本雙線上成功地發展。MiniGUI同時具有了開源軟體開放性的特點和商業軟體高品質的特點。

作為一款軟體產品,MiniGUI的商業版本使得MiniGUI得到了長足的進展,讓MiniGUI穩定地運行到了更多的設備上。目前,MiniGUI在小型嵌入式上面的移植具有無可比擬的優勢。對比同類的嵌入式GUI系統,MiniGUI不僅性能開銷較低,而且明顯具有更強的可移植性和可配置性。MiniGUI可以靈活提供各種功能定製:小到簡單的圖形繪製庫,大到整個系統的解決方案。由於MiniGUI系統生根發芽的土壤在中國,它相比其他的GUI系統更適合由中國人來開發。目前MiniGUI在中高端手機、PDA類產品、機頂盒、智慧型家居以及工控、儀表領域都有了廣泛的套用。

尤其值得指出的是,雖然飛漫是一家研發軟體產品的公司,但是魏永明先生帶領飛漫團隊對中國技術界本著非常負責任的態度,依然在進行著一定程度的技術傳播和交流,這也很大程度上促進了嵌入式軟體技術的提高。飛漫的成功也給了中國軟體業發展一個很好的啟迪。

MiniGUI在穩定發展了若干年後,目前最新的版本為MiniGUI3.0。此時的MiniGUI在接口上已經基本穩定,但也具有了很強的擴展性。MiniGUI正向著可以提供整套的解決方案、友好的開發環境、並且可以接受第三方的套用的方向發展。飛漫的定製模式也讓基於MiniGUI的軟體開發的分工更加明確,這樣可以使基於MiniGUI的產品具有更快更好的開發效率。MiniGUI的發展歷程不僅是技術上的發展,也帶來了對行業產業鏈和發展模式的思考。

本書通過介紹MiniGUI系統的開發,給讀者展示一個學習GUI系統程式的平台。本書的內容可以體現兩個層次的內容:其一是對MiniGUI的應用程式開發的學習,讀者可以通過對照光碟中的程式學習本書的內容,在學習之後可以單獨進行MiniGUI應用程式的開發;其二是對GUI系統程式設計思想的學習,雖然MiniGUI系統和其他GUI系統存在差異,但是GUI系統整體設計的思想是通用的,讀者根據本書的內容學習並進行思考後,在開發其他的GUI系統的時候也可以快速地上手。

對於一個GUI系統的學習,可以分成三個層次:第一個層次是了解GUI系統層次結構和程式框架;第二個層次是熟悉這個GUI系統所提供的功能;第三個層次是如何使用GUI系統構建完整的應用程式。

本書的第3章、第4章主要介紹了MiniGUI系統在第一個層次的內容。通過這兩章的學習,讀者可以熟悉MiniGUI系統的軟體各個層次的關係,也可以學會如何使用MiniGUI構建一個簡單的應用程式。

本書的第5章到第12章主要介紹了MiniGUI系統在第二個層次的內容。主要內容為MiniGUI主視窗、對話框、控制項的使用、GDI編程以及其他一些方面的內容。其中,主視窗、對話框和控制項的使用三者構成了完成MiniGUI應用程式的主體;GDI名為圖形設備接口,這是一組較低層次的API,GDI編程可以讓讀者深入控制系統,進行更靈活的程式設計;其他方面的內容包括選單、鍵盤和滑鼠處理、圖示、游標、定時器等內容。第12章單獨介紹了MiniGUI擴展庫的內容,包括擴展的對話框、控制項和皮膚等功能。

本書的第13章到第16章主要介紹了MiniGUI系統在第三個層次的內容。這些章節通過展示MiniGUI演示庫的例子,讓讀者學習使用MiniGUI提供的接口構建完成的應用程式。這些簡單的應用程式可以體現GUI系統設計的一些思路。

本書既適合需要進入MiniGUI應用程式開發領域的人員,也適合需要學習通用的GUI技術的人員。MiniGUI系統是一個目前廣泛套用的嵌入式GUI系統,可以通過學習這個系統進入GUI程式開發的領域。本書要求讀者具有C語言編程的一定基礎。本書的開發環境可以使用Ubuntu、Fedora或OpenSuse等Linux發行版,需要安裝了GCC、make等基本的工具,然後可以根據本書提供的光碟建立開發環境。本書光碟中也提供了部分Windows中的開發環境,可以在Windows的Visual C++6.0環境中使用。

在本書的學習過程中,為了取得事半功倍的效果,讀者可以使用邊學邊練的方式,對於書中的示例程式,應對照光碟中的程式或自己練習編寫程式進行驗證和擴展。由於各個控制項的使用相似性較多,本書只選取了具有代表性的進行介紹,並在附錄中列出了控制項的特性。讀者可以通過參考MiniGUI的API手冊和頭檔案中的描述,自己編寫程式進行更多的練習。對於完整GUI程式的組織,讀者應根據自身需要完成軟體的需求,結合一般軟體工程的思想和MiniGUI接口的特點進行設計和實現。此外,MiniGUI的API大都是通過深思熟慮發布的,具有簡潔、含義明確和便於擴展的特點,讀者在這方面進行思考,可以提高自身軟體工程的思想。

本書由韓超規劃和編著,北京飛漫軟體技術有限公司為本書提供了豐富的資料。本書的配套光碟由韓超組織完成,其中部分內容依據北京飛漫軟體技術有限公司授權加入。在本書及其配套光碟的編著過程中,亞嵌嵌入式教育研究中心為本書提供了支持,郎鐵山、王旭光參與了審校工作。本書的出版也是飛漫多年技術積累的成果。本書作者和參與編著人員長期立志於推廣嵌入式技術,努力促進公眾的技術共同進步。由於時間倉促,本書可能依然存在一些錯誤和問題,請讀者見諒。MiniGUI的發展需要廣大的技術人員共同參與,歡迎讀者討論和指點。

作 者

2008,北京

目 錄

第1章 嵌入式GUI系統概述 1

1.1 嵌入式GUI系統 1

1.1.1 嵌入式GUI系統的作用 1

1.1.2 嵌入式GUI系統的層級結構 2

1.2 嵌入式GUI系統的設計原則 4

1.3 嵌入式GUI系統發展狀況 6

1.3.1 QT/Embedded 6

1.3.2 Microwindows 7

1.3.3 MiniGUI 8

第2章 MiniGUI的特點和發展 9

2.1 MiniGUI與嵌入式GUI系統 9

2.1.1 MiniGUI的設計理念 9

2.1.2 MiniGUI與其他嵌入式GUI

2.1.2 系統的比較 12

2.2 MiniGUI的發布版本 14

2.2.1 MiniGUI 1.6 15

2.2.2 MiniGUI 2.0 16

2.3 MiniGUI 3.0 19

2.3.1 MiniGUI 3.0核心庫的新功能 19

2.3.2 MiniGUI 3.0的新組件 19

2.4 MiniGUI的展望 20

2.4.1 MiniGUI的集成開發環境mStudio 20

2.4.2 MiniGUI 4.0 21

2.5 MiniGUI的發展和套用 21

2.5.1 MiniGUI的發展 21

2.5.2 MiniGUI的套用領域 23

第3章 MiniGUI的體系結構 26

3.1 MiniGUI的結構概述 26

3.2 MiniGUI的系統需求 29

3.2.1 MiniGUI所支持的作業系統 29

3.2.2 MiniGUI所支持的硬體平台 29

3.2.3 MiniGUI對系統資源的占用情況 29

3.3 MiniGUI的層次結構 29

3.3.1 MiniGUI的移植層 29

3.3.2 MiniGUI的核心實現 31

3.3.3 MiniGUI的API 32

3.4 MiniGUI的運行模式 34

3.4.1 MiniGUI-Threads模式 35

3.4.2 MiniGUI-Processes模式 36

3.4.3 MiniGUI-Standalone模式 38

第4章 MiniGUI的程式框架 39

4.1 GUI程式設計的基本方式 39

4.1.1 程式中的訊息機制 39

4.1.2 回調函式的使用 40

4.2 程式示例與分析 42

4.2.1 MiniGUI的HelloWorld程式示例 42

4.2.2 程式分析 45

第5章 MiniGUI的視窗與訊息機制 50

5.1 MiniGUI的視窗系統 50

5.1.1 視窗系統的概念 50

5.1.2 MiniGUI視窗系統 51

5.2 MiniGUI的訊息處理機制 52

5.2.1 訊息機制的概念 52

5.2.2 MiniGUI的訊息機制 52

5.2.3 MiniGUI的訊息機制類型 54

5.3 主視窗及其訊息處理編程 55

5.3.1 主視窗的信息隱藏和對象編程 55

5.3.2 在主視窗中使用的附加信息 56

5.3.3 訊息處理的方式與自定義訊息 57

5.3.4 較完整的訊息處理 59

5.3.5 主視窗及其訊息處理的設計思想和編程內容總結 65

第6章 MiniGUI的對話框編程 67

6.1 MiniGUI中的對話框 67

6.1.1 對話框的概念 67

6.1.2 MiniGUI的對話框的使用方式 67

6.2 MiniGUI對話框編程 72

6.2.1 使用對話框模版編程 72

6.2.2 非模式對話框的使用 75

6.2.3 主視窗和對話框的結合使用 79

6.2.4 對話框的設計思想和編程內容總結 83

第7章 MiniGUI的控制項編程 84

7.1 MiniGUI中的控制項 84

7.1.1 控制項的概念 84

7.1.2 MiniGUI的控制項的使用方式 85

7.2 MiniGUI中的控制項基本編程 90

7.2.1 使用控制項的簡單示例Hello World 90

7.2.2 多控制項的使用 91

7.2.3 控制項通知函式使用 94

7.2.4 控制項的設計思想和編程內容總結 98

7.3 MiniGUI中的控制項高級編程 98

7.3.1 自定義控制項的編程 98

7.3.2 控制項子類化 101

7.3.3 MiniGUI中的控制項高級編程內容總結 104

第8章 MiniGUI的選單 106

8.1 MiniGUI中的選單 106

8.1.1 選單的概念 106

8.1.2 MiniGUI中選單的概念 106

8.2 MiniGUI中的編程 111

8.2.1 選單的編程示例 111

8.2.2 選單的設計思想和要點 117

第9章 MiniGUI的鍵盤和滑鼠 119

9.1 MiniGUI中的輸入設備的概念 119

9.1.1 輸入的基本概念 119

9.1.2 MiniGUI的輸入 119

9.2 MiniGUI中的鍵盤編程 120

9.2.1 鍵盤輸入的過程 120

9.2.2 鍵盤的訊息 120

9.2.3 鍵盤的狀態和輸入焦點的信息 122

9.2.4 鍵盤示例程式 123

9.2.5 鍵盤編程要點總結 126

9.3 MiniGUI中的滑鼠 126

9.3.1 滑鼠輸入的過程 126

9.3.2 滑鼠訊息 127

9.3.3 滑鼠捕獲問題 129

9.3.4 滑鼠編程示例 129

9.2.5 滑鼠編程要點總結 133

第10章 MiniGUI的GDI編程 134

10.1 GUI系統中的圖形設備 134

10.1.1 圖形設備在GUI中的作用 134

10.1.2 MiniGUI中的GDI概念 134

10.2 MiniGUI中視窗繪製和刷新 135

10.2.1 何時進行繪製 135

10.2.2 MSG_PAINT訊息 136

10.2.3 有效區域和無效區域 137

10.3 圖形設備上下文 137

10.3.1 圖形設備的抽象 137

10.3.2 設備上下文句柄的獲取和釋放 139

10.3.3 設備上下文句柄的保存和恢復 141

10.3.4 系統記憶體中的設備上下文 141

10.3.5 螢幕設備上下文 141

10.3 映射模式和坐標空間 141

10.3.1 映射模式 141

10.3.2 視口和視窗 142

10.3.3 設備坐標的轉換 143

10.3.4 坐標系的偏移和縮放 144

10.4 顏色與調色板 144

10.4.1 顏色與調色板的概念 144

10.4.2 有關顏色的接口 146

10.4.3 顏色處理的示例程式 148

10.5 在圖形設備的繪製基本圖形 150

10.5.1 矩形操作 150

10.5.2 基本繪圖屬性 150

10.5.3 基本繪圖函式 151

10.5.3 基本繪圖程式示例 152

10.6 點陣圖的使用 155

10.6.1 點陣圖的概念 155

10.6.2 點陣圖的裝載 157

10.6.3 點陣圖的繪製 158

10.6.4 點陣圖程式示例 159

10.7 文本的處理和顯示 160

10.7.1 字元集和編碼 161

10.7.2 設備字型 162

10.7.3 邏輯字型 162

10.7.4 文本輸出 163

10.7.5 文本程式示例 164

第11章 MiniGUI其他方面的編程 167

11.1 圖示編程 167

11.1.1 圖示的檔案接口 167

11.1.2 圖示的創建 169

11.1.3 系統圖示的使用 169

11.1.4 圖示的示例程式 170

11.1.5 圖示編程要點總結 171

11.2 游標編程 172

11.2.1 游標的檔案接口 172

11.2.2 游標限定 174

11.2.3 游標的創建 174

11.2.4 系統游標的使用 175

11.2.5 游標的示例程式 175

11.2.6 游標編程要點總結 177

11.3 定時器的使用 178

11.3.1 定時器的作用 178

11.3.2 MiniGUI中的定時器編程 178

11.3.3 定時器的程式示例 179

11.3.4 定時器編程的要點總結 180

第12章 MiniGUI擴展庫的相關

第12章 內容 181

12.1 MiniGUI擴展庫概述 181

12.2 擴展庫的初始化和卸載函式 182

12.3 擴展庫提供的控制項 182

12.3.1 擴展控制項的概念 182

12.3.2 擴展控制項的示例程式 184

12.4 擴展庫提供的對話框 189

12.4.1 mywins庫提供的功能 189

12.4.2 檔案對話框、新檔案對

12.4.2 話框和顏色選擇對話框 197

12.5 皮膚界面功能 200

12.5.1 MiniGUI提供的皮膚界

12.5.1 面功能概述 200

12.5.2 皮膚的組成 201

12.5.3 皮膚視窗、回調函式和

12.5.3 設定 204

12.5.4 各種皮膚元素相關功能

12.5.4 函式 206

12.5.5 皮膚使用示例 209

第13章 MiniGUI的GDI演示 216

13.1 GDI演示概述 216

13.1.1 GDI演示的目的 216

13.1.2 實現結果 216

13.2 GDI演示程式設計 219

13.2.1 GDI演示程式功能劃分 219

13.2.2 程式的結構 219

13.3 GDI演示程式的重點細節

13.3 分析 219

13.3.1 程式的入口和框架 219

13.3.2 各種GDI演示部分 221

第14章 MiniGUI的對話框演示 228

14.1 對話框演示的功能描述 228

14.1.1 對話框演示的目的 228

14.1.2 實現結果 228

14.2 對話框演示的設計 230

14.2.1 對話框演示程式功能劃分 230

14.2.2 程式的結構 230

14.3 對話框演示的重點細節分析 231

14.3.1 程式的入口和框架 231

14.3.2 各個對話框的實現 232

第15章 MiniGUI實現的圖像查看器 235

15.1 圖像查看器的功能和需求 235

15.1.1 功能和需求 235

15.1.2 實現結果 236

15.2 圖像查看器的設計 237

15.2.1 功能模組的劃分 237

15.2.2 程式框架的組織及依賴

15.2.2 部分 237

15.3 圖像查看器的重點細節分析 238

15.3.1 主要函式和數據結構 238

15.3.2 程式的其他功能 244

15.4 設計思想總結 244

第16章 MiniGUI實現記事本 246

16.1 記事本的功能描述 246

16.1.1 功能和需求 246

16.1.2 實現結果 246

16.2 記事本的設計 249

16.2.1 功能模組的劃分 249

16.2.2 程式框架的組織及依賴

16.2.2 部分 249

16.3 記事本的重點細節分析 250

16.3.1 主要函式和數據結構 250

16.3.2 程式中的其他內容 255

16.4 設計思想總結 256

第17章 MiniGUI3.0的新特性 258

17.1 MiniGUI 3.0的新功能 258

17.1.1 外觀渲染器 258

17.1.2 雙向文本的顯示與輸入 260

17.1.3 不規則視窗 260

17.1.4 字型增強 260

17.1.5 其他增強功能 261

17.2 MiniGUI 3.0的基本示例 261

17.2.1 類似Windows的桌面 261

17.2.2 使用外觀渲染器 263

17.2.3 視窗元素的屬性 265

17.2.4 不規則視窗區域 269

17.2.5 雙緩衝特性 271

17.3 MiniGUI 3.0新功能總結 272

附錄B MiniGUI的擴展控制項 284

第一部分 基礎知識

第1章 Linux環境下C語言的開發 2

1.1 Linux下的C語言開發環境 2

1.2 在Linux中使用C語言開發 3

1.2.1 開發流程和開發工具 3

1.2.2 Linux中程式的運行原理 4

第2章 嵌入式環境中的C語言開發 7

2.1 嵌入式C語言的開發環境 7

2.2 嵌入式開發中C語言編程要點 9

第二部分 Linux環境中

C語言的開發環境和工具

第3章 Linux的文本編輯工具VI 12

3.1 VI編輯器概述 12

3.1.1 VI簡介 12

3.1.2 VI的工作模式和使用

3.1.2 之前的準備 12

3.1.3 進入和退出VI 13

3.2 VI的增強版VIM 16

3.3 VI編輯器的基本使用方法 17

3.3.1 在螢幕上移動游標 17

3.3.2 插入文本 20

3.3.3 刪除文本 22

3.3.4 修改文本內容 25

3.3.5 替換文本內容 27

3.3.6 合併文本內容 30

3.3.7 移動文本內容 30

3.4 VI編輯器的命令和高級操作 32

3.4.1 VI常用命令的列表 32

3.4.2 VI的一些高級的操作和

3.1.2 使用技巧 35

第4章 GCC程式開發工具 39

4.1 GNU工具綜述 39

4.2 GCC的編譯和連線 43

4.2.1 工程示例 43

4.2.2 編譯、彙編和連線 46

4.2.3 動態庫 48

4.3 GCC的二進制工具 49

4.3.1 ar(歸檔工具) 49

4.3.2 readelf(讀取ELF格式

3.1.2 檔案信息) 51

4.3.3 strings(查看字元串) 54

4.3.4 nm(顯示符號信息) 55

4.3.5 strip(刪除符號) 57

4.3.6 objdump(顯示目標

3.1.2 檔案信息) 58

4.3.7 objcopy(複製目標檔案) 63

第5章 make工程管理工具 67 5.1 make和Makefile 67

5.1.1 make機制概述 67

5.1.2 make和Makefile的使用 68

5.2 Makefile使用示例 69

5.2.1 簡單的Makefile 69

5.2.2 Makefile中的依賴關係 71

5.2.3 Makefile中使用隱含規則

5.2.4 Makefile中指定依賴關係的

3.1.2 編譯 76

5.3 自動生成Makefile 78

5.3.1 自動生成Makefile的意義和

3.1.2 相關工具 78

5.3.2 自動生成Makefile的流程 79

第6章 GDB調試工具 85

6.1 GDB簡介 85

6.2 使用GDB調試程式 86

6.2.1 基本操作 88

6.2.2 查看命令 90

6.2.3 高級命令 92

6.2.4 attach命令的使用 94

6.3 遠程GDB調試 95

6.3.1 本地GDB調試和遠程GDB

3.1.2 調試的比較 95

6.3.2 遠程GDB調試流程 97

6.3.3 遠程GDB調試示例 98

第三部分 庫函式

第7章 C語言標準庫函式 106

7.1 ISO的C語言標準庫函式

7.1 分類 106

7.2 標準格式化輸入/輸出類函式 107

7.2.1 scanf函式:格式化輸入字元串 107

7.2.2 printf函式:格式化輸出字元串 109

7.2.3 putchar函式:輸出字元到標準輸出 111

7.2.4 getchar函式:從標準輸入獲取字元 111

7.2.5 putc函式:向檔案輸出字元 112

7.2.6 getc函式:從檔案輸入字元 112

7.2.7 gets函式:獲得字元串 112

7.2.8 puts函式:輸出指定字元串 113

7.2.9 ungetc函式:把字元

3.1.2 寫回流中 113

7.3 字元處理類函式 114

7.4 字元串處理及轉換函式 116

7.4.1 sprintf函式:格式化輸出

3.1.2 字元串到一個緩衝區 116

7.4.2 strcat和strncat函式: 字元串連線 119

7.4.3 strcpy和strncpy函式:字元串複製 120

7.4.4 strcmp和strncmp函式:字元串比較 121

7.4.5 strlen函式:獲取字元串長度 122

7.4.6 strchr和strrchr函式:字元/字元串定位 122

7.4.7 strstr函式:字元串查找 123

7.4.8 strrev函式:字元串逆序 124

7.4.9 strupr和strlwr函式:字母形式轉換 125

7.4.10 strdup和strndup函式:字元串複製 125

7.4.11 memset函式:記憶體設定 126

7.4.12 memmove函式:記憶體移動 126

7.4.13 memcmp函式:記憶體比較 127

7.4.14 memcpy函式:記憶體複製 128

7.5 數學計算類函式 128

7.6 數據結構和算法類函式 133

7.6.1 bsearch函式:二元搜尋 133

7.6.2 lfind函式:線性搜尋 134

7.6.3 lsearch函式:線性搜尋 135

7.6.4 qsort函式:利用快速排序法排列數組 136

7.6.5 rand函式:產生隨機數 136

7.6.6 srand函式:設定隨機數種子 137

7.7 檔案I/O操作類相關函式 137

7.7.1 fopen函式:打開檔案 138

7.7.2 fclose函式:關閉檔案 139

7.7.3 fgetc函式:從檔案中讀取一個字元 139

7.7.4 fputc函式:將一指定字元寫入檔案流中 139

7.7.5 fgets函式:從檔案中讀取 一字元串 140

7.7.6 fputs函式:將一指定的字元串寫入檔案內 140

7.7.7 rewind函式:重設檔案流的讀寫位置為檔案開頭 141

7.7.8 ftell函式:取得檔案流的讀取位置 141

7.7.9 fseek函式:移動檔案流的讀寫位置 141

7.7.10 fwrite函式:將數據寫至檔案流 142

7.7.11 fread函式:從檔案流讀取數據 142

7.7.12 remove函式:刪除檔案 143

7.7.13 rename函式:更改檔案名稱稱或位置 143

7.7.14 freopen函式:重新打開檔案 144

7.7.15 fflush函式:同步緩衝區 144

7.7.16 fgetpos函式:獲得檔案位置 145

7.7.17 fsetpos函式:設定檔案位置 145

7.7.18 mktemp函式:建立臨時檔案 146

7.7.19 tmpfile函式:臨時檔案 146

7.7.20 tmpnam:得到臨時檔案名稱 147

7.8 日期時間類函式 147

7.8.1 clock函式:獲得CPU時間 148

7.8.2 time函式:獲得當前日曆時間 148

7.8.3 difftime函式:獲得時間差值 148

7.8.4 gmtime函式:將日曆時間轉換成UTC時間 149

7.8.5 mktime函式:將UTC時間轉換成日曆時間 149

7.8.6 asctime函式:將UTC時間轉換成字元串 149

7.8.7 ctime函式:將日曆時間轉換成當地時間的字元串 150

7.8.8 localtime函式:將日曆時間轉換成本地時間 150

7.8.9 strftime函式:轉換日期和時間格式 151

7.9 國際化和本地化函式 152

7.9.1 setlocale函式:本地化控制函式 153

7.9.2 localeconv函式:本地化轉換 154

7.10 錯誤處理類函式 155

7.10.1 clearerr函式:清除流中的

7.10.1 結束指示符和錯誤指示符 155

7.10.2 feof函式:指示檔案結束 155

7.10.3 ferror函式:指示檔案出錯 156

7.10.4 perror函式:輸出出錯信息 156

7.10.5 errno函式:錯誤編號記錄 156

7.11 其他一些工具函式 157

7.11.1 assert函式:程式診斷 157

7.11.2 長跳轉函式 157

7.11.3 可變長的參數控制函式 160

7.11.4 獲取結構體成員函式(宏) 161

7.12 一些標準庫中有用的宏 161

第8章 Linux中C語言的擴展庫函式 163

8.1 檔案I/O操作函式 163

8.1.1 open函式:打開檔案 163

8.1.2 close函式:關閉檔案 164

8.1.3 read函式:讀檔案 165

8.1.4 write函式:寫檔案 165

8.1.5 lseek函式:檔案定位 167

8.1.6 ioctl函式:檔案控制 167

8.1.7 flock函式:鎖定檔案 167

8.1.8 mmap函式和munmap函式:記憶體映射 168

8.1.9 create函式:創建新檔案 170

8.1.10 dup函式和dup2函式:複製檔案描述符 171

8.1.11 fcntl函式:改變已打開的檔案的屬性 171

8.2 檔案許可權相關的操作函式檔案許可權相關的操作函式 172

8.2.1 access函式:判斷是否具有存取檔案的許可權 172

8.2.2 chown函式和fchown函式:改變檔案的所有者 173

8.2.3 chmod函式和fchmod函式:改變許可權 173

8.2.4 unlink函式:刪除檔案 173

8.2.5 utime函式和utimes函式:改變檔案時間 174

8.2.6 umask函式:設定建立新檔案時的許可權掩碼 175

8.2.7 link函式:建立檔案連線 175

8.2.8 stat函式、fstat函式和lstat函式:獲取檔案信息 175

8.3 用戶組操作函式 176

8.3.1 getgid函式和setgid函式:獲得/設定組識別碼 176

8.3.2 getegid函式和setegid函式:獲得/設定有效的組識別碼 177

8.3.3 getuid函式和setuid函式:獲得/設定真實的用戶識別碼 177

8.3.4 geteuid函式和seteuid函式:獲得/設定有效的用戶識別碼 178

8.3.5 getgroups函式和setgroups函式:獲得/設定組代碼 178

8.4 信號類函式 179

8.4.1 kill函式:傳送信號給指定的進程 181

8.4.2 raise函式:信號傳送函式 181

8.4.3 alarm函式:設定逾時函式 182

8.4.4 signal函式:信號安裝函式 182

8.5 進程處理函式 183

8.5.1 getpid函式和getppid函式:獲得進程ID和父進程ID 183

8.5.2 fork函式:建立子進程 183

8.5.3 sleep函式和usleep函式:

8.2.1 讓進程暫停執行一段時間 185

8.5.4 exec函式族:找到執行檔 185

8.5.5 _ exit函式和_Exit函式:結束進程執行 188

第四部分 C語言高級編程

第9章 動態記憶體的堆與棧 190

9.1 程式記憶體區域的使用 190

9.1.1 靜態記憶體與動態記憶體 190

9.1.2 C語言中的動態記憶體 191

9.2 C程式中棧空間的使用 196

9.2.1 參數使用棧空間 196

9.2.2 自動變數使用棧空間 199

9.2.3 程式中較大的棧 201

9.2.4 棧空間的特性 202

9.3 C程式中的堆空間使用 203

9.3.1 分配和釋放堆記憶體的庫函式 203

9.3.2 庫函式使用 204

9.3.3 堆記憶體的特性 218

9.4 堆記憶體和棧記憶體使用的比較 222

9.4.1 利用返回值傳遞信息 222

9.4.2 利用參數傳遞信息 226

9.4.3 堆與棧記憶體管理的區別 231

第10章 函式指針的使用 232

10.1 函式指針的概念 232

10.1.1 C語言函式的本質 232

10.1.2 函式指針在C語言中的

10.1.2 意義 234

10.2 函式指針的使用 237

10.2.1 函式指針使用初步 237

10.2.2 函式指針的類型定義 240

10.2.3 函式指針作為結構體成員 242

10.2.4 函式指針作為函式的參數 243

10.2.5 函式指針作為函式的

10.2.5 返回值 244

10.2.6 函式指針數組 246

10.3 函式指針使用示例 248

第11章 回調函式的使用 252

11.1 回調函式的概念與作用 252

11.1.1 程式調用的方式 252

11.1.2 回調函式的作用 254

11.2 回調函式的語法 254

11.2.1 簡單的回調函式 254

11.2.2 完全形式的回調函式 256

11.3 回調函式的使用 259

11.3.1 qsort中的回調函式 259

11.3.2 atexit和on_exit函式的註冊退出函式 263

第12章 C語言實現對象編程 268

12.1 C語言實現基於對象編程的概念與作用 268

12.2 C語言基於對象編程實現封裝 269

12.2.1 簡單的程式示例 269

12.2.2 C語言基於對象編程的詳解 272

12.2.3 C語言基於對象編程與C++面向對象編程的對比 275

12.3 C語言基於對象編程實現部分繼承功能 278

12.3.1 利用數據結構的包含實現繼承功能 279

12.3.2 利用私有指針實現繼承功能 282

12.3.3 C語言實現繼承的總結 287

12.4 C語言基於對象編程實現

12.4 部分多態功能 288

12.4.1 利用操作指針組的包含實現多態功能 288

12.4.2 C語言實現多態功能的總結 292

12.5 對C語言實現基於對象

12.5 編程的思考 292

12.5.1 C語言基於對象編程的特性 292

12.5.2 C語言基於對象編程中接口、實現和調用者的關係 293

第五部分 在嵌入式

環境下的C語言編程

第13章 C語言程式的記憶體布局 295

13.1 C語言程式的存儲區域 295

13.2 C語言程式的段 297

13.2.1 段的分類 297

13.2.2 程式中段的使用 298

13.3 可執行程式的連線 301

13.3.1 可執行程式的組成 301

13.3.2 各個目標檔案的關係 303

13.3.3 連線錯誤示例 304

13.4 C語言程式的運行 309

13.4.1 RAM調試運行 311

13.4.2 固化程式的XIP運行 312

13.4.3 固化程式的載入運行 313

13.4.4 C語言程式的運行總結 315

第14章 嵌入式C語言常用語法 317

14.1 記憶體指針操作 317

14.1.1 記憶體操作的意義 317

14.1.2 使用指針操作記憶體 319

14.1.3 volatile的使用 324

14.1.4 嵌入式系統指針的實際套用 325

14.2 位操作 327

14.2.1 位操作的意義 327

14.2.2 位操作的語法 328

14.3 大小端與對齊問題 330

14.3.1 大小端問題 331

14.3.2 記憶體對齊問題 335

14.3.3 結構體成員的對齊問題 338

14.4 程式的跳轉 344

14.4.1 嵌入式系統程式跳轉的類型 344

14.4.2 C語言中實現程式的跳轉 345

第15章 嵌入式C語言編程的技巧 348

15.1 程式的最佳化技巧 348

15.1.1 循環緩衝區 348

15.1.2 查表法 350

15.1.3 針對循環執行效率的最佳化 353

15.2 關於小數運算 355

15.3 函式參數和返回值的傳遞 357

15.4 變數的初始化技巧 360

15.4.1 數組的初始化 360

15.4.2 結構體的初始化 362

15.4.3 變數的初始化總結 362

15.5 程式的調試和宏使用的技巧 363

15.5.1 列印檔案、函式和程式行 363

15.5.2 #:字元串化操作符 364

15.5.3 ##:連線操作符 366

15.5.4 調試宏的第一種定義方式 367

15.5.5 調試宏的第二種定義方式 368

15.5.6 對調試語句進行分級審查 369

15.5.7 條件編譯調試語句 370

15.5.8 使用do…while的宏定義 372

15.6 代碼剖析 373

參考文獻 378

相關詞條

相關搜尋

熱門詞條

聯絡我們