嵌入式 Linux C 語言程式設計實務

洪榮泰、柯賢儒

已絕版

買這商品的人也買了...

商品描述

<內容簡介>

目前嵌入式技術和Linux程式開發技術成為電腦界比較流行的兩大技術。作為一種非常基礎和常用的程式語言,C語言在嵌入式系統開發中表現了其強大的軟硬體操控能力。本書重點關注嵌入式Linux中的C語言程式設計,目的在於幫助讀者在基本掌握C語言的基礎上,逐漸掌握嵌入式Linux中的C語言開發技術。本書包含程式環境建構、除錯技術、函數庫、高階程式設計、程式最佳化等方面的知識。本書的講解由淺入深,書中知識點突顯,其中的一些範例取自常見技術和專案中的精華,工程應用性強。

<章節目錄>

第一部分 基礎知識
第1章 Linux環境下C語言的開發
1.1 Linux下的C語言開發環境
1.2 在Linux中使用C語言開發
1.2.1 開發流程和開發工具 
1.2.2 Linux中程式的執行原理

第2章 嵌入式環境中的C語言開發
2.1 嵌入式C語言的開發環境
2.2 嵌入式開發中C語言程式設計要點

第二部分 Linux環境中C語言的開發環境和工具
第3章 Linux的文字編輯工具VI
3.1 VI編輯器概述
3.1.1 VI簡介
3.1.2 VI的工作模式和使用之前的準備
3.1.3 進入和退出VI
3.2 VI的增強版VIM
3.3 VI編輯器的基本使用方法
3.3.1 在螢幕上移動游標
3.3.2 插入文字
3.3.3 刪除文字
3.3.4 修改文字內容
3.3.5 替換文字內容
3.3.6 合併文字內容
3.3.7 移動文字內容
3.4 VI編輯器的指令和高階運算
3.4.1 VI常用指令的列表
3.4.2 VI的一些高階的操作和使用技巧

第4章 GCC程式開發工具
4.1 GNU工具綜述
4.2 GCC的編譯和連結
4.2.1 專案範例
4.2.2 編譯、組譯和連結
4.2.3 動態庫
4.3 GCC的二進位工具
4.3.1 ar(歸檔工具)
4.3.2 readelf(讀取ELF格式檔資訊)
4.3.3 strings(查看字串)
4.3.4 nm(顯示符號資訊)
4.3.5 strip(刪除符號)
4.3.6 objdump(顯示目的檔資訊)
4.3.7 objcopy(複製目的檔)

第5章 make專案管理工具
5.1 make和Makefile
5.1.1 make機制概述
5.1.2 make和Makefile的使用
5.2 Makefile使用範例
5.2.1 簡單的Makefile
5.2.2 Makefile中的依賴關係
5.2.3 Makefile中使用隱含規則來編譯程式
5.2.4 Makefile中指定依賴關係的編譯
5.3 自動產生Makefile
5.3.1 自動產生Makefile的意義和相關工具
5.3.2 自動產生Makefile的流程

第6章 GDB除錯工具
6.1 GDB簡介
6.2 使用GDB除錯程式
6.2.1 基本運算
6.2.2 查看指令
6.2.3 高階指令
6.2.4 attach指令的使用
6.3 遠端GDB除錯
6.3.1 本地GDB除錯和遠端GDB除錯的比較
6.3.2 遠端GDB除錯流程
6.3.3 遠端GDB除錯範例

第三部分 函數庫
第7章 C語言標準函數庫
7.1 ISO的C語言標準函數庫分類
7.2 標準格式化輸入/輸出類函數
7.2.1 scanf函數:格式化輸入字串
7.2.2 printf函數:格式化輸出字串
7.2.3 putchar函數:輸出字元到標準輸出
7.2.4 getchar函數:從標準輸入擷取字元
7.2.5 putc函數:向檔輸出字元
7.2.6 etc函數:從檔輸入字元
7.2.7 gets函數:獲得字串 
7.2.8 puts函數:輸出指定字串
7.2.9 ungetc函數:把字元寫回流中
7.3 字元處理類函數
7.4 字串處理及轉換函數
7.4.1 sprintf函數:格式化輸出字串到一個緩衝區
7.4.2 strcat和strncat函數:字元串連結
7.4.3 strcpy和strncpy函數:字串複製
7.4.4 strcmp和strncmp函數:字串比較
7.4.5 strlen函數:擷取字串長度
7.4.6 strchr和strrchr函數:字元/字串定位
7.4.7 strstr函數:字串尋找
7.4.8 strrev函數:字串逆序
7.4.9 strupr和strlwr函數:字母形式轉換
7.4.10 strdup和strndup函數:字串複製
7.4.11 memset函數:記憶體設置
7.4.12 memmove函數:記憶體移動
7.4.13 memcmp函數:記憶體比較
7.4.14 memcpy函數:記憶體複製
7.5 數學計算類函數
7.6 資料結構和演算法類函數
7.6.1 bsearch函數:二元搜尋
7.6.2 lfind函數:線性搜尋
7.6.3 lsearch函數:線性搜尋
7.6.4 qsort函數:利用快速排序法排列陣列
7.6.5 rand函數:產生亂數 
7.6.6 srand函數:設置亂數種子
7.7 檔案I/O運算類相關函數
7.7.1 fopen函數:打開檔案
7.7.2 fclose函數:關閉檔案
7.7.3 fgetc函數:從檔案中讀取一個字元
7.7.4 fputc函數:將一指定字元寫入檔流中
7.7.5 gets函數:從檔案中讀取一字串
7.7.6 fputs函數:將一指定的字串寫入檔內
7.7.7 rewind函數:重設檔流的讀寫位置為檔開頭
7.7.8 ftell函數:取得檔流的讀取位置
7.7.9 fseek函數:移動檔流的讀寫位置
7.7.10 fwrite函數:將資料寫至檔流
7.7.11 fread函數:從檔流讀取資料
7.7.12 remove函數:刪除檔
7.7.13 rename函數:更改檔案名稱或位置
7.7.14 freopen函數:重新打開檔案
7.7.15 fflush函數:同步緩衝區
7.7.16 fgetpos函數:獲得檔案位置
7.7.17 fsetpos函數:設置檔位置
7.7.18 mktemp函數:建立暫存檔案
7.7.19 tmpfile函數:暫存檔案
7.7.20 tmpnam:得到暫存檔案名
7.8 日期時間類函數
7.8.1 clock函數:獲得CPU時間
7.8.2 time函數:獲得當前日曆時間
7.8.3 difftime函數:獲得時間差值
7.8.4 gmtime函數:將日曆時間轉換成UTC時間
7.8.5 mktime函數:將UTC時間轉換成日曆時間
7.8.6 asctime函數:將UTC時間轉換成字串
7.8.7 ctime函數:將日曆時間轉換成當地時間的字串
7.8.8 localtime函數:將日曆時間轉換成本地時間
7.8.9 strftime函數:轉換日期和時間格式
7.9 國際化和本地化函數 
7.9.1 setlocale函數:本地化控制函數
7.9.2 localeconv函數:本地化轉換
7.10 錯誤處理類函數
7.10.1 clearerr函數:清除流中的結束指示符和錯誤指示符
7.10.2 feof函數:指示檔結束
7.10.3 error函數:指示檔出錯
7.10.4 perror函數:輸出出錯資訊
7.10.5 errno函數:錯誤編號記錄
7.11 其他一些工具函數
7.11.1 assert函數:程式診斷
7.11.2 長跳躍函數
7.11.3 可變長的參數控制函數21
7.11.4 擷取結構體成員函數(巨集)
7.12 一些標準庫中有用的巨集

第8章 Linux中C語言的擴充函數庫26
8.1 檔案I/O運算函數
8.1.1 open函數:打開檔案 
8.1.2 close函數:關閉檔案
8.1.3 read函數:讀檔案
8.1.4 write函數:寫檔案
8.1.5 lseek函數:檔案定位
8.1.6 ioctl函數:檔案控制
8.1.7 flock函數:鎖定檔案
8.1.8 mmap函數和munmap函數:記憶體映射
8.1.9 create函數:建立新檔案
8.1.10 dup函數和dup2函數:複製檔描述元
8.1.11 fcntl函數:改變已打開的檔的屬性
8.2 檔許可權相關的操作函數
8.2.1 access函數:判斷是否具有存取檔的許可權
8.2.2 chown函數和fchown函數:改變檔的所有者
8.2.3 chmod函數和fchmod函數:改變許可權
8.2.4 unlink函數:刪除檔
8.2.5 utime函數和utimes函數:改變檔時間
8.2.6 umask函數:設置建立新檔案時的許可權遮罩
8.2.7 link函數:建立檔案連結
8.2.8 stat函數、fstat函數和lstat函數:擷取檔資訊
8.3 使用者群組運算函數
8.3.1 getgid函數和setgid函數:獲得/設置群組識別碼
8.3.2 getegid函數和setegid函數:獲得/設置有效的組識別碼
8.3.3 getuid函數和setuid函數:獲得/設置真實的使用者識別
8.3.4 geteuid函數和seteuid函數:獲得/設置有效的使用者識別碼
8.3.5 getgroups函數和setgroups函數:獲得/設置群組程式碼
8.4 信號類函數
8.4.1 kill函數:傳送信號給指定的行程
8.4.2 raise函數:信號發送函數
8.4.3 alarm函數:設置超時函數
8.4.4 signal函數:信號安裝函數
8.5 行程處理函數
8.5.1 getpid函數和getppid函數:獲得行程ID和父行程ID
8.5.2 fork函數:建立子行程
8.5.3 sleep函數和usleep函數:讓行程暫停執行一段時間
8.5.4 exec函數族:找到可執行檔
8.5.5 _ exit函數和_Exit函數:結束行程執行

第四部分 C語言高階程式設計
第9章 動態記憶體的堆積與堆疊
9.1 程式記憶體區域的使用
9.1.1 靜態記憶體與動態記憶體
9.1.2 C語言中的動態記憶體
9.2 C程式中堆疊空間的使用
9.2.1 參數使用堆疊空間
9.2.2 自動變數使用堆疊空間
9.2.3 程式中較大的堆疊
9.2.4 堆疊空間的特性
9.3 C程式中的堆積空間使用
9.3.1 分配和釋放堆積記憶體的函數庫
9.3.2 函數庫使用
9.3.3 堆積記憶體的特性
9.4 堆積記憶體和堆疊記憶體使用的比較06
9.4.1 利用返回值傳遞資訊 
9.4.2 利用參數傳遞資訊
9.4.3 堆積與堆疊記憶體管理的區別
 
第10章 函數指標的使用
10.1 函數指標的概念
10.1.1 C語言函數的本質
10.1.2 函數指標在C語言中的意義
10.2 函數指標的使用
10.2.1 函數指標使用初步
10.2.2 函數指標的類型定義 
10.2.3 函數指標作為結構體成員
10.2.4 函數指標作為函數的參數
10.2.5 函數指標作為函數的返回值
10.2.6 函數指標陣列
10.3 函數指標使用範例

第11章 回呼函數的使用
11.1 回呼函數的概念與作用
11.1.1 程式呼叫的方式
11.1.2 回呼函數的作用
11.2 回呼函數的語法
11.2.1 簡單的回呼函數
11.2.2 完全形式的回呼函數
11.3 回呼函數的使用
11.3.1 qsort中的回呼函數
11.3.2 atexit和on_exit函數的註冊退出函數

第12章 C語言實現物件程式設計
12.1 C語言實現基於物件程式設計的概念與作用
12.2 C語言基於物件程式設計實現封裝
12.2.1 簡單的程式範例
12.2.2 C語言基於物件程式設計的詳解
12.2.3 C語言基於物件程式設計與C++物件導向程式設計的比較
12.3 C語言基於物件程式設計實現部分繼承功能
12.3.1 利用資料結構的包含實現繼承功能
12.3.2 利用私有指標實現繼承功能
12.3.3 C語言實現繼承的總結
12.4 C語言基於物件程式設計實現部分多態功能
12.4.1 利用運算指標群組的包含實現多態功能
12.4.2 C語言實現多態功能的總結
12.5 對C語言實現基於物件程式設計的思考
12.5.1 C語言基於物件程式設計的特性
12.5.2 C語言基於物件程式設計中介面、實現和呼叫者的關係

第五部分 在嵌入式環境下的C語言程式設計
第13章 C語言程式的記憶體佈局
13.1 C語言程式的儲存區域
13.2 C語言程式的段
13.2.1 段的分類
13.2.2 程式中段的使用
13.3 可執行程式的連結
13.3.1 可執行程式的組成
13.3.2 各個目的檔的關係
13.3.3 連結錯誤範例
13.4 C語言程式的執行
13.4.1 RAM除錯執行
13.4.2 固化程式的XIP執行
13.4.3 固化程式的載入執行
13.4.4 C語言程式的執行總結

第14章 嵌入式C語言常用語法
14.1 記憶體指標運算
14.1.1 記憶體運算的意義
14.1.2 使用指標運算記憶體
14.1.3 volatile的使用
14.1.4 嵌入式系統指標的實際應用
14.2 位元運算
14.2.1 位元運算的意義
14.2.2 位元運算的語法
14.3 大或小位元組在前排列法與對齊問題
14.3.1 大或小位元組在前排列法問題
14.3.2 記憶體對齊問題
14.3.3 結構體成員的對齊問題
14.4 程式的跳躍
14.4.1 嵌入式系統程式跳躍的類型
14.4.2 C語言中實現程式的跳躍

第15章 嵌入式C語言程式設計的技巧
15.1 程式的最佳化技巧
15.1.1 迴圈緩衝區
15.1.2 查表法
15.1.3 針對迴圈執行效率的最佳化
15.2 關於小數點運算
15.3 函數參數和返回值的傳遞
15.4 變數的初始化技巧
15.4.1 陣列的初始化
15.4.2 結構體的初始化
15.4.3 變數的初始化總結
15.5 程式的除錯和巨集使用的技巧
15.5.1 列印檔、函數和程式列
15.5.2 #:字串化運算子
15.5.3 ##:連結運算子
15.5.4 除錯巨集的第一種定義方式
15.5.5 除錯巨集的第二種定義方式
15.5.6 對除錯程式碼進行分級審查
15.5.7 條件編譯除錯程式碼
15.5.8 使用do…while的巨集定義
15.6 程式碼剖析