本書針對學習者如何快速掌握Linux應用、開發、內核編程與高級編程,以新的Linux內核版本3.0.x~3.19.x為依據,設計典型實例,并對開發場景進行詳細講解。在內容設計上,本書采取了循序漸進的原則,對Linux系統知識進行精心策劃,使Linux初學者能夠以“Linux應用基礎→編程開發→內核源碼與場景分析→高級編程”為主線,以階梯式前進的方式進行學習。本書立足于基礎,實例經典,深入實踐。讀者可以在較低起點下進行高效的理論與實踐學習,為Linux系統應用與開發打下堅實的基礎。本書可作為高等院校計算機、信息類大學生、研究生進行操作系統學習和開發的教材或參考書,也可作為Linux開發人員參考用書和廣大的Linux愛好者自學教程。
以新的Linux內核版本3.0.x~3.19.x為依據,設計典型實例,并對開發場景進行詳細講解;
在內容設計上,本書采取了循序漸進的原則,對Linux系統知識進行精心策劃;
以“Linux應用基礎→編程開發→內核源碼與場景分析→圖形界面高級編程”階梯前進的方式對Linux知識進行系統化組織;
讀者能夠低起點、高效率的學習理論、深入實踐,為Linux系統應用與開發打下堅實的基礎;
立足于基礎,實例經典,深入實踐。
第1部分 Linux系統應用篇
第1章 Linux的安裝與配置 2
1.1 旅程開始 2
1.2 本書使用Linux環境介紹 2
1.3 Linux的安裝 4
1.3.1 獲取Ubuntu 14.04 4
1.3.2 選擇安裝平臺 4
1.3.3 進入Ubuntu 14.04的安裝程序 9
1.3.4 安裝Ubuntu 14.04 10
1.4 Linux的配置 19
1.4.1 認識Gnome桌面環境 19
1.4.2 Ubuntu的配置 22
1.4.3 軟件安裝與升級 24
第2章 Linux常用命令訓練 26
2.1 關于Shell 26
2.2 文件操作命令 27
2.2.1 調用終端控制臺 27
2.2.2 文件瀏覽 27
2.2.3 文件復制 29
2.2.4 文件移動 29
2.2.5 文件鏈接 30
2.2.6 文件刪除 30
2.2.7 文件壓縮和備份 31
2.2.8 修改文件屬性 32
2.2.9 文件搜索 34
2.3 目錄操作 36
2.3.1 創建目錄 37
2.3.2 刪除目錄 37
2.3.3 修改當前目錄 37
2.3.4 查看當前目錄 37
2.4 用戶與系統操作 38
2.4.1 用戶切換 38
2.4.2 用戶信息修改 39
2.4.3 關閉系統 39
2.5 獲得幫助 40
2.5.1 獲取簡要幫助 40
2.5.2 獲得詳細幫助 40
2.6 變量、流、管道操作 41
2.6.1 變量賦值 41
2.6.2 變量的使用 41
2.6.3 流輸出 42
2.6.4 流的重定向 44
2.6.5 管道 45
2.7 進程操作 45
2.7.1 進程查看 46
2.7.2 發送信號 46
2.7.3 進程切換 47
2.8 網絡操作 48
2.8.1 網絡配置 48
2.8.2 ping 48
2.8.3 ARP 49
2.8.4 FTP 50
2.9 其他命令 50
2.9.1 日歷 50
2.9.2 命令歷史記錄 51
2.9.3 后臺操作 51
2.10 思考與練習 52
第3章 vi/vim編輯器的使用 53
3.1 vi的介紹 53
3.2 vi操作模式 53
3.3 vi的命令 54
3.3.1 狀態切換命令 54
3.3.2 文件保存與退出 54
3.3.3 光標移動 54
3.3.4 編輯操作 55
3.3.5 字符串搜索替換 55
3.3.6 撤銷與重做 55
3.4 啟動vi編輯器 56
3.5 使用vi進行文字錄入 56
3.6 使用vi修改文本 57
3.7 思考與練習 58
第4章 Shell程序設計 59
4.1 Shell編程簡介 59
4.2 系統變量 59
4.3 條件測試 60
4.3.1 文件狀態測試 60
4.3.2 邏輯操作 60
4.3.3 字符串測試 61
4.3.4 數值測試 61
4.4 Shell流程控制語句 61
4.4.1 if語句 61
4.4.2 case語句 62
4.4.3 while語句 62
4.4.4 for語句 63
4.5 Shell編程中的常用命令與符號 63
4.5.1 read命令 63
4.5.2 select命令 63
4.5.3 大括號 64
4.5.4 引號 64
4.5.5 注釋 65
4.6 函數 65
4.7 應用實例訓練 65
4.8 思考與練習 67
第5章 GCC的安裝 68
5.1 GCC簡介 68
5.2 解壓縮工具tar 68
5.3 在Linux下使用源代碼安裝軟件的基本步驟 69
5.4 獲得GCC軟件包 70
5.5 解壓縮軟件包 72
5.6 對源文件進行配置 72
5.7 編譯GCC 74
5.8 安裝GCC 75
5.9 測試GCC安裝結果 76
5.10 思考與練習 77
第6章 GNU開發工具鏈的使用 78
6.1 gcc命令的使用 78
6.2 調試工具gdb 79
6.2.1 gdb簡介 79
6.2.2 gdb的使用方法 79
6.3 代碼管理make 81
6.3.1 make簡介 81
6.3.2 Makefile文件的格式 82
6.3.3 Makefile文件的一些特性 83
6.3.4 make命令的使用 85
6.4 實例訓練 85
6.4.1 編寫程序 87
6.4.2 調試程序 95
6.4.3 編寫Makefile 98
6.5 思考與練習 99
第2部分 編程開發篇
第7章 Linux常用C函數 102
7.1 使用函數庫 102
7.2 字符操作 103
7.3 字符串操作 107
7.3.1 數據類型轉換 108
7.3.2 字符串數據處理 111
7.4 數學計算操作 116
7.5 數據結構與算法操作 118
7.6 日期時間操作 123
7.7 實例訓練 125
7.7.1 任務分析 125
7.7.2 編寫程序 127
7.7.3 編譯、運行 134
7.8 思考與練習 135
第8章 進程操作 136
8.1 Linux進程工作原理 136
8.2 進程操作函數 137
8.3 信號量 144
8.4 信號量操作的函數 145
8.5 應用實例訓練 146
8.5.1 問題分析 147
8.5.2 代碼編寫 147
8.5.3 編譯與運行 152
8.6 思考與練習 153
第9章 信號與定時器 154
9.1 進程間通信與信號 154
9.2 Linux系統中的信號 154
9.3 信號操作相關數據結構 155
9.4 信號操作相關函數 156
9.5 定時器操作相關函數 160
9.6 應用實例訓練 161
9.6.1 程序分析 162
9.6.2 程序編寫 163
9.6.3 編譯與運行 166
9.7 思考與練習 167
第10章 內存管理與用戶操作 168
10.1 Linux內存管理 168
10.2 內存操作相關函數 169
10.3 Linux系統中的用戶操作 175
10.4 用戶管理相關數據結構 176
10.5 用戶管理相關函數 177
10.6 用戶組管理相關函數 182
10.7 應用實例訓練 184
10.7.1 編寫代碼 185
10.7.2 編譯與運行 193
10.8 思考與練習 194
第11章 文件操作 195
11.1 Linux的文件系統 195
11.2 文件操作相關函數 197
11.2.1 文件控制 197
11.2.2 目錄操作 200
11.2.3 文件流讀寫控制 204
11.2.4 文件讀寫操作 211
11.3 應用實例訓練 217
11.3.1 程序分析 217
11.3.2 程序編寫 218
11.3.3 編譯與運行 225
11.4 思考與練習 225
第3部分 Linux內核篇
第12章 Linux內核裁剪與編譯 228
12.1 內核編譯選項 228
12.1.1 常規設置 228
12.1.2 可加載模塊支持 229
12.1.3 處理器類型及特性 229
12.1.4 可執行文件格式 229
12.1.5 網絡支持 229
12.1.6 設備驅動程序選項 230
12.1.7 文件系統 231
12.1.8 對于其他配置選項的說明 231
12.2 內核編譯與定制 231
12.2.1 獲得Linux內核與補丁 231
12.2.2 準備編譯需要的工具 233
12.2.3 解壓內核 234
12.2.4 給內核打補丁 234
12.2.5 設定編譯選項 235
12.2.6 編譯與安裝內核 237
12.3 安裝引導配置 238
12.3.1 創建initramfs 238
12.3.2 設置grub 239
12.3.3 啟動選項 239
12.4 思考與練習 240
第13章 模塊機制與操作 241
13.1 關于內核編程 241
13.2 Linux的模塊機制 241
13.2.1 Linux內核結構 241
13.2.2 模塊的實現 242
13.2.3 Linux模塊導出符號表 244
13.2.4 模塊參數 244
13.2.5 模塊使用計數 245
13.3 內核調試函數printk( ) 245
13.4 應用實例訓練 247
13.4.1 編寫模塊源程序 247
13.4.2 Linux kernel 2.6.26之前版本模塊編譯、安裝及退出 251
13.4.3 Linux kernel2.6.26以后版本模塊編譯、安裝及退出 253
13.5 思考與練習 256
第14章 Linux中斷管理 257
14.1 Linux中斷原理 257
14.1.1 中斷控制器 257
14.1.2 中斷處理 258
14.1.3 中斷處理的下半部機制 261
14.2 Tasklet實例解析 262
14.2.1 編寫測試函數 262
14.2.2 編寫Makefile 263
14.2.3 實驗結果分析 263
14.3 在嵌入式Linux下開中斷實例解析 264
14.3.1 硬件電路組成 264
14.3.2 編寫中斷服務模塊 265
14.3.3 結果分析 267
14.4 思考與練習 268
第15章 系統調用 269
15.1 系統調用原理 269
15.2 系統調用函數分析 270
15.2.1 系統調用入口函數 270
15.2.2 系統調用表 273
15.3 添加系統調用實例訓練 275
15.4 思考與練習 277
第16章 內存管理 278
16.1 關于Linux的內存管理 278
16.1.1 動態存儲管理 279
16.1.2 頁面管理 279
16.1.3 slab分配模式 280
16.2 Linux的內存管理函數 281
16.3 實例訓練與分析 282
16.3.1 在用戶空間用valloc/malloc分配內存 282
16.3.2 在內核空間用kmalloc/vmalloc分配內存 282
16.4 思考與練習 290
第17章 時鐘定時管理 291
17.1 內核定時器分類 291
17.1.1 實時時鐘RTC 291
17.1.2 時間戳計數器TSC 291
17.1.3 可編程間隔定時器PIT 291
17.1.4 SMP系統上的本地APIC定時器 292
17.1.5 高精度計時器 293
17.2 內核時鐘管理分析 293
17.2.1 時鐘源及其初始化 293
17.2.2 軟定時器 295
17.3 應用實例訓練 296
17.3.1 編寫測試實例 296
17.3.2 編寫Makefile 298
17.3.3 編譯及運行結果 298
17.4 思考與練習 299
第18章 設備驅動程序的編寫 300
18.1 Linux驅動程序 300
18.1.1 驅動程序分類 300
18.1.2 驅動程序開發的注意事項 301
18.1.3 設備目錄 301
18.2 Linux驅動數據結構分析 302
18.2.1 Linux驅動核心結構體 302
18.2.2 設備的內核操作函數 304
18.3 驅動程序實例訓練 306
18.3.1 以模塊的方式加載驅動程序 306
18.3.2 測試驅動程序 311
18.4 編譯時向內核添加新設備 312
18.5 思考與練習 315
第4部分 高級編程篇
第19章 Qt圖形界面設計 318
19.1 X-Windows概述 318
19.2 Qt編程 318
19.2.1 概述 318
19.2.2 Qt Creator 319
19.2.3 Qt信號與Slot機制 319
19.3 Qt安裝方法 321
19.4 應用實例訓練 324
19.4.1 創建工程目錄打開Qt Creator 324
19.4.2 新建工程 324
19.4.3 繪制窗體 325
19.4.4 編寫代碼 327
19.4.5 編譯運行 330
19.5 思考與練習 330
第20章 MySQL數據庫設計與編程 331
20.1 MySQL的特性 331
20.2 數據庫編程概述 333
20.3 Qt中的數據庫編程 333
20.3.1 QSqlDriver 333
20.3.2 QSqlDatabase 334
20.3.3 QSqlQuery 336
20.4 應用實例訓練 338
20.4.1 數據庫的建立 338
20.4.2 應用程序的建立 344
20.4.3 運行結果 351
20.5 思考與練習 353
第21章 網絡通信高級編程 354
21.1 網絡編程概述 354
21.2 Socket編程模型 355
21.3 Qt網絡編程中用到的類和方法 355
21.3.1 QtcpSocket 355
21.3.2 QTcpServer 357
21.3.3 QThread 359
21.4 應用實例訓練 359
21.4.1 建立工程 360
21.4.2 數據結構設計 362
21.4.3 界面設計 367
21.4.4 動作設計 368
21.4.5 編譯與運行 372
21.5 思考與練習 374
后記 375
Linux操作系統應用與開發教程