精通Linux C編程[2015版]

精通Linux C編程[2015版]
更多義項 ▼ 收起列表 ▲

Linux誕生於1991年,由UNIX發展而來。幾乎每天Linux都會以某種方式出現在我們的生活中,我們已經數不清在Linux上有多少應用程式,以及有多少機構在使用Linux。

目錄

第Ⅰ部分 基礎篇

第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

相關詞條

相關搜尋

熱門詞條

聯絡我們