基本介紹
- 中文名:unix/linux系統編程
- 作者:[美] K.C·王(K.C. Wang)
- 出版社:機械工業出版社
- ISBN:9787111656715
內容簡介,圖書目錄,
內容簡介
Unix/Linux系統編程提供了廣泛的計算機系統軟體知識和高級編程技能,使讀者能夠與作業系統核心互動,有效利用系統資源,開發套用軟體。它還為讀者提供了從事計算機科學/工程高級研究(如作業系統、嵌入式系統、資料庫系統、數據挖掘、人工智慧、計算機網路、網路安全、分散式和並行計算)所需的背景知識。
圖書目錄
出版者的話
譯者序
前言
第1章 引言1
1.1 關於本書1
1.2 系統編程的作用1
1.3 本書的目標1
1.3.1 強化學生的編程背景知識1
1.3.2 動態數據結構的套用2
1.3.3 進程概念和進程管理2
1.3.4 並發編程2
1.3.5 定時器和定時功能3
1.3.6 信號、信號處理和進程間通信3
1.3.7 檔案系統3
1.3.8 TCP/IP和網路編程3
1.4 目標讀者3
1.5 本書的獨特之處4
1.6 將本書用作系統編程課程的教材5
1.7 其他參考書6
1.8 關於Unix6
1.8.1 AT&T Unix6
1.8.2 Berkeley Unix6
1.8.3 HP Unix7
1.8.4 IBM Unix7
1.8.5 Sun Unix7
1.9 關於Linux7
1.10 Linux版本7
1.10.1 Debian Linux8
1.10.2 Ubuntu Linux8
1.10.3 Linux Mint8
1.10.4 基於RPM的Linux8
1.10.5 Slackware Linux8
1.11 Linux硬體平台8
1.12 虛擬機上的Linux 8
1.12.1 VirtualBox9
1.12.2 VMware10
1.12.3 雙啟動Slackware和Ubuntu Linux11
1.13 使用Linux12
1.13.1 Linux核心映像12
1.13.2 Linux啟動程式13
1.13.3 Linux啟動13
1.13.4 Linux運行級別13
1.13.5 登錄進程13
1.13.6 命令執行13
1.14 使用Ubuntu Linux14
1.14.1 Ubuntu版本14
1.14.2 Ubuntu Linux的特性14
1.15 Unix/Linux檔案系統組織15
1.15.1 檔案類型15
1.15.2 檔案路徑名15
1.15.3 Unix/Linux命令16
1.15.4 Linux手冊頁16
1.16 Ubuntu Linux系統管理17
1.16.1 用戶賬戶17
1.16.2 添加新用戶17
1.16.3 sudo命令17
參考文獻18
第2章 編程背景19
2.1 Linux中的文本編輯器19
2.1.1 vim19
2.1.2 gedit20
2.1.3 emacs20
2.2 使用文本編輯器20
2.2.1 使用emacs21
2.2.2 emacs選單21
2.2.3 emacs的集成開發環境22
2.3 程式開發22
2.3.1 程式開發步驟22
2.3.2 靜態與動態連結24
2.3.3 執行檔格式25
2.3.4 a.out檔案的內容25
2.3.5 程式執行過程26
2.3.6 程式終止27
2.4 C語言中的函式調用27
2.4.1 32位GCC中的運行時堆疊使用情況27
2.4.2 long jump30
2.4.3 64位GCC中的運行時堆疊使用情況32
2.5 C語言程式與彙編代碼的連結34
2.5.1 用彙編代碼編程34
2.5.2 用彙編語言實現函式36
2.5.3 從彙編中調用C函式38
2.6 程式庫38
2.6.1 靜態程式庫38
2.6.2 動態程式庫39
2.7 makefile39
2.7.1 makefile格式39
2.7.2 make程式40
2.7.3 makefile示例40
2.8 GDB調試工具45
2.8.1 在emacs IDE中使用GDB45
2.8.2 有關使用調試工具的建議49
2.8.3 C語言程式中的常見錯誤49
2.9 C語言結構體53
2.9.1 結構體和指針54
2.9.2 C語言類型轉換55
2.10 鍊表處理56
2.10.1 鍊表56
2.10.2 鍊表操作57
2.10.3 構建鍊表57
2.10.4 鍊表遍歷60
2.10.5 搜尋鍊表61
2.10.6 插入操作62
2.10.7 優先權佇列63
2.10.8 刪除操作63
2.10.9 循環鍊表64
2.10.10 可擴充C語言結構體64
2.10.11 雙向鍊表65
2.10.12 雙向鍊表示例程式65
2.11 樹73
2.12 二叉樹73
2.12.1 二叉搜尋樹73
2.12.2 構建二叉搜尋樹74
2.12.3 二叉樹遍歷算法75
2.12.4 深度優先遍歷算法75
2.12.5 廣度優先遍歷算法75
2.13 編程項目:Unix/Linux檔案系統樹模擬器77
2.13.1 Unix/Linux檔案系統樹77
2.13.2 用二叉樹實現普通樹77
2.13.3 項目規範及要求78
2.13.4 命令規範78
2.13.5 程式結構體78
2.13.6 命令算法81
2.13.7 示例解決方案83
2.14 習題84
參考文獻86
第3章 Unix/Linux進程管理87
3.1 多任務處理87
3.2 進程的概念87
3.3 多任務處理系統88
3.3.1 type.h 檔案88
3.3.2 ts.s檔案89
3.3.3 queue.c 檔案89
3.3.4 t.c檔案90
3.3.5 多任務處理系統代碼介紹93
3.4 進程同步95
3.4.1 睡眠模式95
3.4.2 喚醒操作96
3.5 進程終止96
3.5.1 kexit()的算法97
3.5.2 進程家族樹97
3.5.3 等待子進程終止98
3.6 MT系統中的進程管理99
3.7 Unix/Linux中的進程100
3.7.1 進程來源100
3.7.2 INIT和守護進程100
3.7.3 登錄進程100
3.7.4 sh進程101
3.7.5 進程的執行模式101
3.8 進程管理的系統調用102
3.8.1 fork()102
3.8.2 進程執行順序103
3.8.3 進程終止104
3.8.4 等待子進程終止105
3.8.5 Linux中的subreaper進程106
3.8.6 exec():更改進程執行映像108
3.8.7 環境變數108
3.9 I/O重定向111
3.9.1 檔案流和檔案描述符111
3.9.2 檔案流I/O和系統調用111
3.9.3 重定向標準輸入111
3.9.4 重定向標準輸出112
3.10 管道112
3.10.1 Unix/Linux中的管道編程113
3.10.2 管道命令處理115
3.10.3 將管道寫進程與管道讀進程連線起來115
3.10.4 命名管道116
3.11 編程項目:sh模擬器117
3.11.1 帶有I/O重定向的單命令117
3.11.2 帶有管道的命令118
3.11.3 ELF執行檔與sh腳本檔案118
3.11.4 示例解決方案119
3.12 習題119
參考文獻120
第4章 並發編程121
4.1 並行計算導論121
4.1.1 順序算法與並行算法121
4.1.2 並行性與並發性122
4.2 執行緒122
4.2.1 執行緒的原理122
4.2.2 執行緒的優點122
4.2.3 執行緒的缺點123
4.3 執行緒操作123
4.4 執行緒管理函式123
4.4.1 創建執行緒124
4.4.2 執行緒ID125
4.4.3 執行緒終止125
4.4.4 執行緒連線125
4.5 執行緒示例程式125
4.5.1 用執行緒計算矩陣的和125
4.5.2 用執行緒快速排序127
4.6 執行緒同步129
4.6.1 互斥量129
4.6.2 死鎖預防131
4.6.3 條件變數132
4.6.4 生產者-消費者問題133
4.6.5 信號量136
4.6.6 屏障137
4.6.7 用並發執行緒解線性方程組138
4.6.8 Linux中的執行緒140
4.7 編程項目:用戶級執行緒141
4.7.1 項目基本代碼:一個多任務處理系統142
4.7.2 用戶級執行緒145
4.7.3 執行緒連線操作的實現147
4.7.4 互斥量操作的實現151
4.7.5 用並發程式測試有互斥量的項目152
4.7.6 信號量的實現156
4.7.7 使用信號量實現生產者-消費者問題156
4.8 習題158
參考文獻159
第5章 定時器及時鐘服務160
5.1 硬體定時器160
5.2 個人計算機定時器160
5.3 CPU操作161
5.4 中斷處理161
5.5 時鐘服務函式161
5.5.1 gettimeofday-settimeofday162
5.5.2 time系統調用163
5.5.3 times系統調用164
5.5.4 time和date命令164
5.6 間隔定時器164
5.7 REAL模式間隔定時器166
5.8 編程項目166
5.8.1 系統基本代碼167
5.8.2 定時器中斷170
5.8.3 定時器佇列171
5.8.4 臨界區173
5.8.5 高級主題173
5.9 習題174
參考文獻174
第6章 信號和信號處理175
6.1 信號和中斷175
6.2 Unix/Linux信號示例177
6.3 Unix/Linux中的信號處理177
6.3.1 信號類型177
6.3.2 信號的來源178
6.3.3 進程PROC結構體中的信號178
6.3.4 信號處理函式179
6.3.5 安裝信號捕捉函式179
6.4 信號處理步驟181
6.5 信號與異常182
6.6 信號用作IPC182
6.7 Linux中的IPC183
6.7.1 管道和FIFO183
6.7.2 信號184
6.7.3 System V IPC184
6.7.4 POSIX訊息佇列184
6.7.5 執行緒同步機制184
6.7.6 套接字184
6.8 編程項目:實現一個訊息IPC184
6.9 習題186
參考文獻186
第7章 檔案操作187
7.1 檔案操作級別187
7.2 檔案I/O操作189
7.3 低級別檔案操作191
7.3.1 分區191
7.3.2 格式化分區193
7.3.3 掛載分區194
7.4 EXT2檔案系統簡介195
7.4.1 EXT2檔案系統數據結構195
7.4.2 超級塊196
7.4.3 塊組描述符196
7.4.4 點陣圖197
7.4.5 索引節點197
7.4.6 目錄條目198
7.5 編程示例198
7.5.1 顯示超級塊198
7.5.2 顯示點陣圖200
7.5.3 顯示根索引節點202
7.5.4 顯示目錄條目203
7.6 編程項目:將檔案路徑名轉換為索引節點205
7.7 習題206
參考文獻206
第8章 使用系統調用進行檔案操作207
8.1 系統調用207
8.2 系統調用手冊頁207
8.3 使用系統調用進行檔案操作207
8.4 常用的系統調用209
8.5 連結檔案210
8.5.1 硬連結檔案210
8.5.2 符號連結檔案211
8.6 stat系統調用211
8.6.1 stat檔案狀態211
8.6.2 stat結構體212
8.6.3 stat與檔案索引節點213
8.6.4 檔案類型和許可權214
8.6.5 opendir-readdir函式215
8.6.6 readlink函式215
8.6.7 ls程式216
8.7 open-close-lseek系統調用217
8.7.1 打開檔案和檔案描述符218
8.7.2 關閉檔案描述符218
8.7.3 lseek檔案描述符218
8.8 read()系統調用218
8.9 write()系統調用219
8.10 檔案操作示例程式219
8.10.1 顯示檔案內容219
8.10.2 複製檔案220
8.10.3 選擇性檔案複製221
8.11 編程項目:使用系統調用遞歸複製檔案222
8.11.1 提示和幫助222
8.11.2 示例解決方案223
參考文獻223
第9章 I/O庫函式224
9.1 I/O庫函式224
9.2 I/O庫函式與系統調用224
9.3 I/O庫函式的算法227
9.3.1 fread算法227
9.3.2 fwrite算法227
9.3.3 fclose算法228
9.4 使用I/O庫函式或系統調用228
9.5 I/O庫模式228
9.5.1 字元模式I/O228
9.5.2 行模式I/O229
9.5.3 格式化I/O230
9.5.4 記憶體中的轉換函式230
9.5.5 其他I/O庫函式230
9.5.6 限制混合fread-fwrite230
9.6 檔案流緩衝231
9.7 變參函式232
9.8 編程項目:類printf函式233
9.8.1 項目規範233
9.8.2 項目基本代碼233
9.8.3 myprintf()的算法234
9.8.4 項目改進234
9.8.5 項目演示和示例解決方案234
9.9 習題234
參考文獻235
第10章 sh編程236
10.1 sh腳本236
10.2 sh腳本與C程式236
10.3 命令行參數237
10.4 sh變數237
10.5 sh中的引號238
10.6 sh語句238
10.7 sh命令238
10.7.1 內置命令238
10.7.2 Linux命令239
10.8 命令替換240
10.9 sh控制語句240
10.9.1 if-else-fi語句240
10.9.2 for語句242
10.9.3 while語句242
10.9.4 until-do語句243
10.9.5 case語句243
10.9.6 continue和break語句243
10.10 I/O重定向243
10.11 嵌入文檔243
10.12 sh函式244
10.13 sh中的通配符245
10.14 命令分組245
10.15 eval語句245
10.16 調試sh腳本246
10.