目錄
第Ⅰ部分 基礎篇
第1章 Linux系統概述 3
1.1 什麼是Linux 4
1.2 Linux系統特點及主要功能 5
1.2.1 Linux系統特點 5
1.2.2 Linux系統的主要功能 6
1.3 Linux的核心版本和發行版本 7
1.4 系統的安裝 8
1.4.1 系統安裝前的準備工作 8
1.4.2 安裝Linux 9
1.4.3 使用虛擬機 13
1.5 Shell的使用 16
1.5.1 Shell簡介 16
1.5.2 常見Shell的種類 17
1.5.3 Shell的簡單使用 18
1.5.4 通配符 19
1.5.5 引號 20
1.5.6 注釋符 21
1.6 Linux常用命令 22
1.6.1 與目錄相關的命令 22
1.6.2 與檔案相關的命令 22
1.6.3 與網路服務相關的命令 23
1.7 本章小結 24
實戰演練 24
第2章 C語言編程基礎 25
2.1 C語言的歷史背景 26
2.2 C語言的特點 26
2.3 C語言的基本數據類型 27
2.3.1 整型 27
2.3.2 實型 28
2.3.3 字元型 29
2.4 運算符與表達式 31
2.4.1 算術運算符與算術表達式 31
2.4.2 賦值運算符與賦值表達式 32
2.4.3 逗號運算符與逗號表達式 33
2.5 C程式的3種基本結構 33
2.5.1 順序結構 34
2.5.2 選擇結構 35
2.5.3 循環結構 38
2.6 C語言中的數據輸入與輸出 40
2.6.1 字元輸出函式putchar 41
2.6.2 字元輸入函式getchar 41
2.6.3 格式輸出函式printf 41
2.6.4 格式輸入函式scanf 43
2.7 函式 44
2.7.1 函式的定義 44
2.7.2 函式的調用 44
2.7.3 變數的存儲類別 46
2.8 數組 49
2.8.1 一維數組的定義和使用 50
2.8.2 二維數組的定義和使用 51
2.8.3 字元數組和字元串 52
2.8.4 常用字元串處理函式 53
2.9 指針 56
2.9.1 地址和指針 57
2.9.2 指針的定義和使用 57
2.9.3 數組與指針 58
2.9.4 字元串與指針 59
2.9.5 指向函式的指針 60
2.10 結構體和共用體 60
2.10.1 定義和引用結構體 60
2.10.2 結構體數組 61
2.10.3 指向結構體的指針 62
2.10.4 共用體 63
2.10.5 使用typedef定義類型 64
2.11 鍊表 65
2.11.1 鍊表概述 65
2.11.2 建立動態單向鍊表 66
2.11.3 單向鍊表的輸出 67
2.11.4 對單向鍊表的刪除操作 68
2.11.5 對單向鍊表的插入操作 69
2.11.6 循環鍊表 69
2.11.7 雙向鍊表 70
2.12 位運算符和位運算 71
2.12.1 “按位與”運算符(&) 71
2.12.2 “按位或”運算符(|) 71
2.12.3 “取反”運算符(~) 72
2.12.4 “異或”運算符(^) 72
2.12.5 移位運算符(<<和>>) 72
2.12.6 位域 72
2.13 C語言預處理命令 73
2.13.1 宏定義 73
2.13.2 檔案包含 75
2.13.3 條件編譯 75
2.13.4 #error等其他常用預處理命令 76
2.14 本章小結 77
實戰演練 77
第3章 vim與Emacs編輯器 79
3.1 vim的使用 80
3.2 vim使用實例 85
3.3 Emacs的使用 87
3.3.1 啟動與退出Emacs 87
3.3.2 Emacs下的基本操作 88
3.4 Emacs使用實例 93
3.5 本章小結 94
實戰演練 94
第4章 gcc編譯器與gdb調試器 97
4.1 gcc編譯器簡介 98
4.2 如何使用gcc 99
4.2.1 安裝和配置gcc 99
4.2.2 gcc編譯初步 100
4.2.3 警告提示功能 102
4.2.4 最佳化gcc 104
4.2.5 程式庫 107
4.2.6 同時編譯多個源程式 108
4.2.7 管道 108
4.2.8 調試選項 109
4.3 gdb調試器 110
4.3.1 gdb簡介 110
4.3.2 gdb常用命令 111
4.3.3 gdb調試初步 112
4.4 gdb的使用詳解 114
4.4.1 調用gdb 115
4.4.2 使用斷點 115
4.4.3 查看運行時數據 117
4.4.4 查看源程式 122
4.4.5 改變程式的執行 124
4.5 xxgdb調試器簡介 127
4.6 本章小結 128
實戰演練 128
第5章 make的使用和Makefile的編寫 131
5.1 什麼是make 132
5.1.1 make機制概述 132
5.1.2 make與Makefile的關係 134
5.2 Makefile的書寫規則 137
5.2.1 Makefile的基本語法規則 138
5.2.2 在規則中使用通配符 139
5.2.3 偽目標 140
5.2.4 多目標 141
5.2.5 自動生成依賴性 141
5.3 Makefile的命令 143
5.4 變數 144
5.4.1 變數的基礎 144
5.4.2 賦值變數 145
5.4.3 define關鍵字 146
5.4.4 override指示符 147
5.4.5 目標變數和模式變數 147
5.5 常用函式調用 149
5.5.1 字元串處理函式 149
5.5.2 檔案名稱操作函式 153
5.5.3 循環函式 155
5.5.4 條件判斷函式 156
5.5.5 其他常用函式 157
5.6 隱式規則 159
5.6.1 隱式規則舉例 159
5.6.2 隱式規則中的變數 160
5.6.3 使用模式規則 162
5.7 本章小結 164
實戰演練 164
第Ⅱ部分 提高篇
第6章 檔案I/O操作 169
6.1 軟體編程體系簡介 170
6.1.1 Linux的檔案系統結構 170
6.1.2 檔案類型 171
6.1.3 檔案訪問許可權 174
6.2 基於檔案描述符的I/O操作 174
6.2.1 檔案描述符 175
6.2.2 標準輸入、標準輸出和
標準出錯 175
6.2.3 檔案重定向 175
6.2.4 檔案的創建、打開與關閉 177
6.2.5 檔案的定位 181
6.2.6 檔案的讀寫 183
6.3 檔案的屬性操作 187
6.3.1 改變檔案訪問許可權 187
6.3.2 改變檔案所有者 189
6.3.3 重命名 189
6.3.4 修改檔案長度 190
6.4 檔案的其他操作 190
6.4.1 stat、fstat和lstat函式 190
6.4.2 dup和dup2函式 192
6.4.3 fcntl函式 192
6.4.4 sync和fsync函式 193
6.5 特殊檔案的操作 194
6.5.1 目錄檔案的操作 194
6.5.2 連結檔案的操作 197
6.5.3 管道檔案的操作 200
6.5.4 設備檔案 200
6.6 本章小結 200
實戰演練 201
第7章 基於流的I/O操作 203
7.1 流與快取 204
7.1.1 流和FILE對象 204
7.1.2 標準輸入、標準輸出和
標準出錯 204
7.1.3 快取 204
7.1.4 對快取的操作 207
7.2 流的打開與關閉 209
7.2.1 流的打開 210
7.2.2 流的關閉 211
7.2.3 流關閉前的工作 213
7.3 流的讀寫 214
7.3.1 基於字元的I/O 214
7.3.2 基於行的I/O 217
7.3.3 直接I/O 219
7.3.4 格式化I/O 222
7.4 本章小結 224
實戰演練 224
第8章 進程控制 227
8.1 進程的基本概念 228
8.1.1 Linux進程簡介 228
8.1.2 進程與作業 229
8.1.3 進程標識 229
8.2 進程控制的相關函式 231
8.2.1 fork和vfork函式 231
8.2.2 exec函式 236
8.2.3 exit和_exit函式 242
8.2.4 wait和waitpid函式 245
8.2.5 進程的一生 251
8.2.6 用戶ID和組ID 251
8.2.7 system函式 253
8.3 多個進程間的關係 255
8.3.1 進程組 255
8.3.2 會話期 256
8.3.3 控制終端 258
8.4 本章小結 259
實戰演練 259
第9章 信號 261
9.1 Linux信號簡介 262
9.1.1 信號的基本概念 262
9.1.2 信號處理機制 265
9.2 信號操作的相關函式 268
9.2.1 信號的處理 268
9.2.2 信號的傳送 276
9.2.3 信號的阻塞 284
9.2.4 計時器與信號 287
9.3 本章小結 288
實戰演練 289
第10章 進程間通信 291
10.1 進程間通信簡介 292
10.2 管道 293
10.2.1 管道的概念 293
10.2.2 管道的創建與關閉 294
10.2.3 管道的讀寫 295
10.3 命名管道 300
10.3.1 命名管道的概念 300
10.3.2 命名管道的創建 301
10.3.3 命名管道的讀寫 302
10.4 訊息佇列 306
10.4.1 訊息佇列的概念 306
10.4.2 訊息佇列的創建與打開 309
10.4.3 訊息佇列的讀寫 309
10.4.4 獲得或設定訊息佇列屬性 311
10.5 共享記憶體 316
10.5.1 共享記憶體的概念 316
10.5.2 共享記憶體的相關操作 317
10.6 信號量 322
10.6.1 信號量的概念 322
10.6.2 信號量集的相關操作 323
10.7 本章小結 329
實戰演練 330
第11章 執行緒控制 331
11.1 執行緒的基本概念 332
11.1.1 Linux執行緒簡介 332
11.1.2 執行緒的標識符 333
11.1.3 用戶態和核心態執行緒 333
11.1.4 執行緒的屬性 334
11.2 執行緒控制的相關函式 334
11.2.1 pthread_create函式 334
11.2.2 pthread_exit函式 336
11.2.3 pthread_join函式 336
11.2.4 pthread_cancel函式 338
11.2.5 pthread_cleanup_push和pthread_cleanup_pop函式 338
11.2.6 pthread_detach函式 340
11.2.7 執行緒和進程操作函式對比 342
11.3 執行緒之間的通信和同步 342
11.3.1 互斥鎖 343
11.3.2 條件變數 346
11.4 本章小結 351
實戰演練 351
第12章 網路編程 353
12.1 網路編程的基礎知識 354
12.1.1 計算機網路體系結構 354
12.1.2 傳輸控制協定TCP 358
12.1.3 用戶數據報協定UDP 361
12.1.4 客戶機/伺服器模式 361
12.2 套接口編程基礎 362
12.2.1 什麼是套接口 362
12.2.2 連線埠號的概念 363
12.2.3 套接口的數據結構 364
12.2.4 基本函式 365
12.3 TCP套接口編程 368
12.3.1 TCP套接口通信工作流程 369
12.3.2 TCP套接口Client/Server程式實例 382
12.4 UDP套接口編程 387
12.4.1 UDP套接口通信工作流程 387
12.4.2 UDP套接口Client/Server程式實例 388
12.5 原始套接口編程 391
12.5.1 原始套接口的創建 392
12.5.2 原始套接口程式實例 392
12.6 本章小結 403
實戰演練 403
第13章 Linux圖形界面編程 405
13.1 Linux下的圖形界面編程簡介 406
13.1.1 Qt簡介 406
13.1.2 GTK+簡介 406
13.2 界面基本元件 408
13.2.1 一個簡單的例子 409
13.2.2 視窗 410
13.2.3 標籤 413
13.2.4 按鈕 414
13.2.5 文本框 415
13.3 界面布局元件 418
13.3.1 表格 418
13.3.2 框 421
13.3.3 窗格 424
13.4 其他常用元件 426
13.4.1 進度條、微調按鈕、組合框 426
13.4.2 單選按鈕、複選按鈕 430
13.4.3 下拉選單 432
13.5 信號與回調函式 435
13.6 本章小結 437
實戰演練 438
第Ⅲ部分 實戰篇
第14章 設計Linux下的計算器 443
14.1 軟體功能分析 444
14.2 程式模組的劃分 445
14.3 軟體的具體實現 447
14.3.1 頭檔案 447
14.3.2 十六進制界面顯示函式 448
14.3.3 十進制界面顯示函式 449
14.3.4 八進制界面顯示函式 450
14.3.5 二進制界面顯示函式 452
14.3.6 進制間轉換函式 453
14.3.7 信號處理模組 456
14.3.8 主函式 465
14.4 軟體使用效果演示 472
14.5 本章小結 473
第15章 Linux平台下聊天軟體的設計 475
15.1 軟體功能概述 476
15.1.1 伺服器端功能需求 476
15.1.2 客戶端功能需求 477
15.1.3 錯誤處理需求 478
15.2 Glade集成開發工具簡介 478
15.3 軟體功能模組劃分 479
15.3.1 伺服器功能模組劃分 479
15.3.2 客戶端功能模組劃分 480
15.3.3 訊息標識的定義 480
15.3.4 訊息結構體的設計 481
15.4 伺服器程式的具體實現 482
15.4.1 伺服器訊息處理流程 482
15.4.2 伺服器主要函式和變數 483
15.4.3 伺服器訊息處理模組的設計與實現 484
15.4.4 伺服器數據存儲的方法 485
15.4.5 用戶註冊流程 485
15.5 客戶端程式的具體實現 485
15.5.1 客戶端操作流程 486
15.5.2 客戶端傳送和接收訊息流程 486
15.5.3 客戶端主要函式和變數 487
15.5.4 客戶端功能模組的設計與實現 488
15.6 聊天軟體使用效果演示 489
15.7 本章小結 493
第16章 Linux遠程管理工具的設計 495
16.1 軟體功能概述 496
16.1.1 Webmin簡介 496
16.1.2 軟體總體設計 496
16.2 伺服器端程式設計 497
16.2.1 伺服器端工作流程 498
16.2.2 系統用戶管理操作 498
16.2.3 系統用戶組的操作 500
16.2.4 系統服務啟動管理 503
16.2.5 DNS管理操作 504
16.2.6 Apache服務管理操作 505
16.2.7 FTP服務管理操作 508
16.3 客戶端程式 509
16.3.1 連線界面 509
16.3.2 主界面 511
16.4 本章小結 513
第17章 Linux下簡易防火牆軟體的設計 515
17.1 Netfilter基礎 516
17.1.1 什麼是Netfilter 516
17.1.2 Netfilter的HOOK機制 517
17.1.3 HOOK的調用 520
17.1.4 HOOK的實現 521
17.1.5 IPTables簡介 523
17.1.6 Netfilter可以實現的控制功能 524
17.2 軟體設計概述 525
17.2.1 軟體整體框架 525
17.2.2 管理端的設計 527
17.2.3 控制端的設計 528
17.3 用Netfilter設計控制端功能模組 530
17.3.1 ICMP管理控制模組 530
17.3.2 FTP管理控制模組 532
17.3.3 HTTP管理控制模組 533
17.3.4 模組的編譯、載入與卸載 534
17.4 軟體功能測試 536
17.5 本章小結 538
第18章 基於Linux的嵌入式家庭網關遠程互動操作平台的設計 539
18.1 嵌入式技術簡介 540
18.1.1 嵌入式系統的概念 540
18.1.2 嵌入式作業系統 541
18.1.3 嵌入式處理器 542
18.2 家庭網關的概念及其網路體系結構 543
18.2.1 智慧型家庭網路的概念 544
18.2.2 家庭網關的遠程互動操作技術簡介 544
18.2.3 嵌入式家庭網關的網路體系結構 545
18.3 嵌入式家庭網關的開發平台 546
18.3.1 S3C2410微處理器簡介 546
18.3.2 交叉編譯環境的建立 548
18.4 遠程互動平台的設計 549
18.4.1 套用軟體的開發模式 549
18.4.2 嵌入式Web伺服器 550
18.4.3 通用網關接口CGI 553
18.5 Linux下軟體模組的具體實現 554
18.5.1 登錄驗證模組 555
18.5.2 串口通信模組 555
18.5.3 中央空調控制模組 556
18.5.4 智慧型水錶數據採集模組 561
18.5.5 試驗結果 562
18.6 本章小結 562