Unix/Linux 系統編程 Systems Programming in Unix/Linux

K.C. Wang

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

商品描述

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/Linu程管理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 tc文件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.17 sh腳本的應用246
10.18編程項目:用sh腳本遞歸複製文件248
參考文獻249

第11章EXT2文件系統250
11.1 EXT2文件系統250
11.2 EXT2文件系統數據結構250
11.2.1通過mkfs創建虛擬磁盤250
11.2.2虛擬磁盤佈局251
11.2.3超級塊251
11.2.4塊組描述符252
11.2.5塊和索引節點位圖252
11.2.6索引節點252
11.2.7數據塊253
11.2.8目錄條目254
11.3郵差算法254
11.3.1 C語言中的Test-Set-Clear位254
11.3.2將索引節點號轉換為磁盤上的索引節點255
11.4編程示例255
11.4.1顯示超級塊255
11.4.2顯示位圖257
11.4.3顯示根索引節點259
11.4.4顯示目錄條目260
11.5遍歷EXT2文件系統樹261
11.5.1遍曆算法262
11.5.2將路徑名轉換為索引節點263
11.5.3顯示索引節點磁盤塊263
11.6 EXT2文件系統的實現263
11.6.1文件系統的結構263
11.6. 2文件系統的級別264
11.7基本文件系統265
11.7.1 type.h文件265
11.7.2 global.c文件267
11.7.3實用程序函數268
11.7.4 mount-root272
11.7.5基本文件系統的實現275
11.8 1級文件系統函數276
11.8.1 mkdir算法276
11.8.2 creat算法279
11.8.3 mkdir-creat的實現280
11.8.4 rmdir算法281
11.8.5 rmdir的實現283
11.8.6 link算法283
11.8.7 unlink算法285
11.8.8 symlink算法285
11.8.9 readlink算法286
11.8.10其他1級函數286
11.8.11編程項目1:1級文件系統的實現286
11.9 2級文件系統函數286
11.9.1 open算法287
11.9.2 lseek287
11.9.3 close算法288
11.9.4讀取普通文件288
11.9.5寫普通文件290
11.9.6 opendir-readdir291
11.9.7編程項目2:2級文件系統的實現292
11.10 3級文件系統292
11.10.1掛載算法292
11.10.2卸載算法293
11.10.3交叉掛載點293
11.10.4文件保護294
11.10.5實際uid和有效uid294
11.10.6文件鎖定294
11.10. 7編程項目3:整個文件系統的實現295
11.11文件系統項目的擴展295
11.12習題295
參考文獻296

第12章塊設備I/O和緩衝區管理297
12.1塊設備I/O緩衝區297
12.2 Unix I/ O緩衝區管理算法299
12.3新的I/O緩衝區管理算法301
12.4 PV算法302
12.5編程項目:I/O緩衝區管理算法比較303
12.5.1系統組織303
12.5.2多任務處理系統304
12.5. 3緩衝區管理器305
12.5.4磁盤驅動程序305
12.5.5磁盤控制器306
12.5.6磁盤中斷306
12.5.7虛擬磁盤306
12.5.8項目要求306
12.5.9基本代碼示例307
12.5.10示例解決方案311
12.6模擬系統的改進312
12.7 PV算法的改進312
參考文獻313

第13章TCP/IP和網絡編程314
13.1網絡編程簡介314
13.2 TCP/IP協議314
13.3 IP主機和IP地址315
13.4 IP協議315
13.5 IP數據包格式316
13.6路由器316
13.7 UDP316
13.8 TCP316
13.9端口編號316
13.10網絡和主機字節序317
13.11 TCP/IP網絡中的數據流317
13.12網絡編程318
13.12.1網絡編程平台318
13.12.2服務器-客戶機計算模型318
13.13套接字編程319
13.13.1套接字地址319
13.13.2套接字API319
13.14 UDP回顯服務器-客戶機程序321
13.15 TCP回顯服務器-客戶機程序323
13.16主機名和IP地址326
13.17 TCP編程項目:互聯網上的文件服務器328
13.17.1項目規範328
13.17.2幫助和提示329
13.17.3多線程TCP服務器330
13.18 Web和CGI編程330
13.18.1 HTTP編程模型331
13.18.2 Web頁面331
13.18.3託管Web頁面333
13.18.4為Web頁面配置HTTPD333
13.18.5動態Web頁面334
13.18.6 PHP334
13.18.7 CGI編程339
13.18 .8配置CGI的HTTPD339
13.19 CGI編程項目:通過CGI實現動態Web頁面339
13.20習題343
參考文獻343

第14章MySQL數據庫系統344
14.1 MySQL簡介344
14.2安裝MySQL344
14.2.1 Ubuntu Linux344
14.2.2 Slackware Linux344
14.3使用MySQL345
14.3.1連接到MySQL服務器345
14.3.2顯示數據庫346
14.3.3新建數據庫346
14.3.4刪除數據庫346
14.3.5選擇數據庫347
14.3.6創建表347
14.3.7刪除表348
14.3.8 MySQL中的數據類型348
14.3.9插入行349
14.3.10刪除行350
14.3.11更新表350
14.3.12修改表351
14.3.13關聯表352
14.3.14連接操作355
14.3.15 MySQL數據庫關係圖357
14.3.16 MySQL腳本357
14.4 C語言MySQL編程360
14.4.1使用C語言構建MySQL客戶機程序361
14.4.2使用C語言連接到MySQL服務器361
14.4.3使用C語言構建MySQL數據庫362
14.4.4使用C語言檢索MySQL查詢結果364
14.5 PHP MySQL編程367
14.5.1使用PHP連接到MySQL服務器367
14.5.2使用PHP創建數據庫表368
14.5.3使用PHP將記錄插入表中369
14.5.4在PHP中檢索MySQL查詢結果371
14.5.5使用PHP進行更新操作372
14.5.6使用PHP刪除行373
14.6習題373
參考文獻373