關(guān)于我們
書單推薦
新書推薦
|
Unix/Linux系統(tǒng)編程
Unix/Linux系統(tǒng)編程提供了廣泛的計(jì)算機(jī)系統(tǒng)軟件知識(shí)和高級(jí)編程技能,使讀者能夠與操作系統(tǒng)內(nèi)核交互,有效利用系統(tǒng)資源,開發(fā)應(yīng)用軟件。它還為讀者提供了從事計(jì)算機(jī)科學(xué)/工程高級(jí)研究(如操作系統(tǒng)、嵌入式系統(tǒng)、數(shù)據(jù)庫系統(tǒng)、數(shù)據(jù)挖掘、人工智能、計(jì)算機(jī)網(wǎng)絡(luò)、網(wǎng)絡(luò)安全、分布式和并行計(jì)算)所需的背景知識(shí)。
出版者的話
譯者序 前言 第1章 引言1 1.1 關(guān)于本書1 1.2 系統(tǒng)編程的作用1 1.3 本書的目標(biāo)1 1.3.1 強(qiáng)化學(xué)生的編程背景知識(shí)1 1.3.2 動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的應(yīng)用2 1.3.3 進(jìn)程概念和進(jìn)程管理2 1.3.4 并發(fā)編程2 1.3.5 定時(shí)器和定時(shí)功能3 1.3.6 信號(hào)、信號(hào)處理和進(jìn)程間通信3 1.3.7 文件系統(tǒng)3 1.3.8 TCP/IP和網(wǎng)絡(luò)編程3 1.4 目標(biāo)讀者3 1.5 本書的獨(dú)特之處4 1.6 將本書用作系統(tǒng)編程課程的教材5 1.7 其他參考書6 1.8 關(guān)于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 關(guān)于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硬件平臺(tái)8 1.12 虛擬機(jī)上的Linux 8 1.12.1 VirtualBox9 1.12.2 VMware10 1.12.3 雙啟動(dòng)Slackware和Ubuntu Linux11 1.13 使用Linux12 1.13.1 Linux內(nèi)核映像12 1.13.2 Linux啟動(dòng)程序13 1.13.3 Linux啟動(dòng)13 1.13.4 Linux運(yùn)行級(jí)別13 1.13.5 登錄進(jìn)程13 1.13.6 命令執(zhí)行13 1.14 使用Ubuntu Linux14 1.14.1 Ubuntu版本14 1.14.2 Ubuntu Linux的特性14 1.15 Unix/Linux文件系統(tǒng)組織15 1.15.1 文件類型15 1.15.2 文件路徑名15 1.15.3 Unix/Linux命令16 1.15.4 Linux手冊(cè)頁16 1.16 Ubuntu Linux系統(tǒng)管理17 1.16.1 用戶賬戶17 1.16.2 添加新用戶17 1.16.3 sudo命令17 參考文獻(xiàn)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的集成開發(fā)環(huán)境22 2.3 程序開發(fā)22 2.3.1 程序開發(fā)步驟22 2.3.2 靜態(tài)與動(dòng)態(tài)鏈接24 2.3.3 可執(zhí)行文件格式25 2.3.4 a.out文件的內(nèi)容25 2.3.5 程序執(zhí)行過程26 2.3.6 程序終止27 2.4 C語言中的函數(shù)調(diào)用27 2.4.1 32位GCC中的運(yùn)行時(shí)堆棧使用情況27 2.4.2 long jump30 2.4.3 64位GCC中的運(yùn)行時(shí)堆棧使用情況32 2.5 C語言程序與匯編代碼的鏈接34 2.5.1 用匯編代碼編程34 2.5.2 用匯編語言實(shí)現(xiàn)函數(shù)36 2.5.3 從匯編中調(diào)用C函數(shù)38 2.6 鏈接庫38 2.6.1 靜態(tài)鏈接庫38 2.6.2 動(dòng)態(tài)鏈接庫39 2.7 makefile39 2.7.1 makefile格式39 2.7.2 make程序40 2.7.3 makefile示例40 2.8 GDB調(diào)試工具45 2.8.1 在emacs IDE中使用GDB45 2.8.2 有關(guān)使用調(diào)試工具的建議49 2.8.3 C語言程序中的常見錯(cuò)誤49 2.9 C語言結(jié)構(gòu)體53 2.9.1 結(jié)構(gòu)體和指針54 2.9.2 C語言類型轉(zhuǎn)換55 2.10 鏈表處理56 2.10.1 鏈表56 2.10.2 鏈表操作57 2.10.3 構(gòu)建鏈表57 2.10.4 鏈表遍歷60 2.10.5 搜索鏈表61 2.10.6 插入操作62 2.10.7 優(yōu)先級(jí)隊(duì)列63 2.10.8 刪除操作63 2.10.9 循環(huán)鏈表64 2.10.10 可擴(kuò)充C語言結(jié)構(gòu)體64 2.10.11 雙向鏈表65 2.10.12 雙向鏈表示例程序65 2.11 樹73 2.12 二叉樹73 2.12.1 二叉搜索樹73 2.12.2 構(gòu)建二叉搜索樹74 2.12.3 二叉樹遍歷算法75 2.12.4 深度優(yōu)先遍歷算法75 2.12.5 廣度優(yōu)先遍歷算法75 2.13 編程項(xiàng)目:Unix/Linux文件系統(tǒng)樹模擬器77 2.13.1 Unix/Linux文件系統(tǒng)樹77 2.13.2 用二叉樹實(shí)現(xiàn)普通樹77 2.13.3 項(xiàng)目規(guī)范及要求78 2.13.4 命令規(guī)范78 2.13.5 程序結(jié)構(gòu)體78 2.13.6 命令算法81 2.13.7 示例解決方案83 2.14 習(xí)題84 參考文獻(xiàn)86 第3章 Unix/Linux進(jìn)程管理87 3.1 多任務(wù)處理87 3.2 進(jìn)程的概念87 3.3 多任務(wù)處理系統(tǒng)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 多任務(wù)處理系統(tǒng)代碼介紹93 3.4 進(jìn)程同步95 3.4.1 睡眠模式95 3.4.2 喚醒操作96 3.5 進(jìn)程終止96 3.5.1 kexit()的算法97 3.5.2 進(jìn)程家族樹97 3.5.3 等待子進(jìn)程終止98 3.6 MT系統(tǒng)中的進(jìn)程管理99 3.7 Unix/Linux中的進(jìn)程100 3.7.1 進(jìn)程來源100 3.7.2 INIT和守護(hù)進(jìn)程100 3.7.3 登錄進(jìn)程100 3.7.4 sh進(jìn)程101 3.7.5 進(jìn)程的執(zhí)行模式101 3.8 進(jìn)程管理的系統(tǒng)調(diào)用102 3.8.1 fork()102 3.8.2 進(jìn)程執(zhí)行順序103 3.8.3 進(jìn)程終止104 3.8.4 等待子進(jìn)程終止105 3.8.5 Linux中的subreaper進(jìn)程106 3.8.6 exec():更改進(jìn)程執(zhí)行映像108 3.8.7 環(huán)境變量108 3.9 I/O重定向111 3.9.1 文件流和文件描述符111 3.9.2 文件流I/O和系統(tǒng)調(diào)用111 3.9.3 重定向標(biāo)準(zhǔn)輸入111 3.9.4 重定向標(biāo)準(zhǔn)輸出112 3.10 管道112 3.10.1 Unix/Linux中的管道編程113 3.10.2 管道命令處理115 3.10.3 將管道寫進(jìn)程與管道讀進(jìn)程連接起來115 3.10.4 命名管道116 3.11 編程項(xiàng)目:sh模擬器117 3.11.1 帶有I/O重定向的單命令117 3.11.2 帶有管道的命令118 3.11.3 ELF可執(zhí)行文件與sh腳本文件118 3.11.4 示例解決方案119 3.12 習(xí)題119 參考文獻(xiàn)120 第4章 并發(fā)編程121 4.1 并行計(jì)算導(dǎo)論121 4.1.1 順序算法與并行算法121 4.1.2 并行性與并發(fā)性122 4.2 線程122 4.2.1 線程的原理122 4.2.2 線程的優(yōu)點(diǎn)122 4.2.3 線程的缺點(diǎn)123 4.3 線程操作123 4.4 線程管理函數(shù)123 4.4.1 創(chuàng)建線程124 4.4.2 線程ID125 4.4.3 線程終止125 4.4.4 線程連接125 4.5 線程示例程序125 4.5.1 用線程計(jì)算矩陣的和125 4.5.2 用線程快速排序127 4.6 線程同步129 4.6.1 互斥量129 4.6.2 死鎖預(yù)防131 4.6.3 條件變量132 4.6.4 生產(chǎn)者-消費(fèi)者問題133 4.6.5 信號(hào)量136 4.6.6 屏障137 4.6.7 用并發(fā)線程解線性方程組138 4.6.8 Linux中的線程140 4.7 編程項(xiàng)目:用戶級(jí)線程141 4.7.1 項(xiàng)目基本代碼:一個(gè)多任務(wù)處理系統(tǒng)142 4.7.2 用戶級(jí)線程145 4.7.3 線程連接操作的實(shí)現(xiàn)147 4.7.4 互斥量操作的實(shí)現(xiàn)151 4.7.5 用并發(fā)程序測試有互斥量的項(xiàng)目152 4.7.6 信號(hào)量的實(shí)現(xiàn)156 4.7.7 使用信號(hào)量實(shí)現(xiàn)生產(chǎn)者-消費(fèi)者問題156 4.8 習(xí)題158 參考文獻(xiàn)159 第5章 定時(shí)器及時(shí)鐘服務(wù)160 5.1 硬件定時(shí)器160 5.2 個(gè)人計(jì)算機(jī)定時(shí)器160 5.3 CPU操作161 5.4 中斷處理161 5.5 時(shí)鐘服務(wù)函數(shù)161 5.5.1 gettimeofday-settimeofday162 5.5.2 time系統(tǒng)調(diào)用163 5.5.3 times系統(tǒng)調(diào)用164 5.5.4 time和date命令164 5.6 間隔定時(shí)器164 5.7 REAL模式間隔定時(shí)器166 5.8 編程項(xiàng)目166 5.8.1 系統(tǒng)基本代碼167 5.8.2 定時(shí)器中斷170 5.8.3 定時(shí)器隊(duì)列171 5.8.4 臨界區(qū)173 5.8.5 高級(jí)主題173 5.9 習(xí)題174 參考文獻(xiàn)174 第6章 信號(hào)和信號(hào)處理175 6.1 信號(hào)和中斷175 6.2 Unix/Linux信號(hào)示例177 6.3 Unix/Linux中的信號(hào)處理177 6.3.1 信號(hào)類型177 6.3.2 信號(hào)的來源178 6.3.3 進(jìn)程PROC結(jié)構(gòu)體中的信號(hào)178 6.3.4 信號(hào)處理函數(shù)179 6.3.5 安裝信號(hào)捕捉函數(shù)179 6.4 信號(hào)處理步驟181 6.5 信號(hào)與異常182 6.6 信號(hào)用作IPC182 6.7 Linux中的IPC183 6.7.1 管道和FIFO183 6.7.2 信號(hào)184 6.7.3 System V IPC184 6.7.4 POSIX消息隊(duì)列184 6.7.5 線程同步機(jī)制184 6.7.6 套接字184 6.8 編程項(xiàng)目:實(shí)現(xiàn)一個(gè)消息IPC184 6.9 習(xí)題186 參考文獻(xiàn)186 第7章 文件操作187 7.1 文件操作級(jí)別187 7.2 文件I/O操作189 7.3 低級(jí)別文件操作191 7.3.1 分區(qū)191 7.3.2 格式化分區(qū)193 7.3.3 掛載分區(qū)194 7.4 EXT2文件系統(tǒng)簡介195 7.4.1 EXT2文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)195 7.4.2 超級(jí)塊196 7.4.3 塊組描述符196 7.4.4 位圖197 7.4.5 索引節(jié)點(diǎn)197 7.4.6 目錄條目198 7.5 編程示例198 7.5.1 顯示超級(jí)塊198 7.5.2 顯示位圖200 7.5.3 顯示根索引節(jié)點(diǎn)202 7.5.4 顯示目錄條目203 7.6 編程項(xiàng)目:將文件路徑名轉(zhuǎn)換為索引節(jié)點(diǎn)205 7.7 習(xí)題206 參考文獻(xiàn)206 第8章 使用系統(tǒng)調(diào)用進(jìn)行文件操作207 8.1 系統(tǒng)調(diào)用207 8.2 系統(tǒng)調(diào)用手冊(cè)頁207 8.3 使用系統(tǒng)調(diào)用進(jìn)行文件操作207 8.4 常用的系統(tǒng)調(diào)用209 8.5 鏈接文件210 8.5.1 硬鏈接文件210 8.5.2 符號(hào)鏈接文件211 8.6 stat系統(tǒng)調(diào)用211 8.6.1 stat文件狀態(tài)211 8.6.2 stat結(jié)構(gòu)體212 8.6.3 stat與文件索引節(jié)點(diǎn)213 8.6.4 文件類型和權(quán)限214 8.6.5 opendir-readdir函數(shù)215 8.6.6 readlink函數(shù)215 8.6.7 ls程序216 8.7 open-close-lseek系統(tǒng)調(diào)用217 8.7.1 打開文件和文件描述符218 8.7.2 關(guān)閉文件描述符218 8.7.3 lseek文件描述符218 8.8 read()系統(tǒng)調(diào)用218 8.9 write()系統(tǒng)調(diào)用219 8.10 文件操作示例程序219 8.10.1 顯示文件內(nèi)容219 8.10.2 復(fù)制文件220 8.10.3 選擇性文件復(fù)制221 8.11 編程項(xiàng)目:使用系統(tǒng)調(diào)用遞歸復(fù)制文件222 8.11.1 提示和幫助222 8.11.2 示例解決方案223 參考文獻(xiàn)223 第9章 I/O庫函數(shù)224 9.1 I/O庫函數(shù)224 9.2 I/O庫函數(shù)與系統(tǒng)調(diào)用224 9.3 I/O庫函數(shù)的算法227 9.3.1 fread算法227 9.3.2 fwrite算法227 9.3.3 fclose算法228 9.4 使用I/O庫函數(shù)或系統(tǒng)調(dià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 內(nèi)存中的轉(zhuǎn)換函數(shù)230 9.5.5 其他I/O庫函數(shù)230 9.5.6 限制混合fread-fwrite230 9.6 文件流緩沖231 9.7 變參函數(shù)232 9.8 編程項(xiàng)目:類printf函數(shù)233 9.8.1 項(xiàng)目規(guī)范233 9.8.2 項(xiàng)目基本代碼233 9.8.3 myprintf()的算法234 9.8.4 項(xiàng)目改進(jìn)234 9.8.5 項(xiàng)目演示和示例解決方案234 9.9 習(xí)題234 參考文獻(xiàn)235 第10章 sh編程236 10.1 sh腳本236 10.2 sh腳本與C程序236 10.3 命令行參數(shù)237 10.4 sh變量237 10.5 sh中的引號(hào)238 10.6 sh語句238 10.7 sh命令238 10.7.1 內(nèi)置命令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函數(shù)244 10.13 sh中的通配符245 10.14 命令分組245 10.15 eval語句245 10.16 調(diào)試sh腳本246 10.17 sh腳本的應(yīng)用246 10.18 編程項(xiàng)目:用sh腳本遞歸復(fù)制文件248 參考文獻(xiàn)249 第11章 EXT2文件系統(tǒng)250 11.1 EXT2文件系統(tǒng)250 11.2 EXT2文件系統(tǒng)數(shù)據(jù)結(jié)構(gòu)250 11.2.1 通過mkfs創(chuàng)建虛擬磁盤250 11.2.2 虛擬磁盤布局251 11.2.3 超級(jí)塊251 11.2.4 塊組描述符252 11.2.5 塊和索引節(jié)點(diǎn)位圖252 11.2.6 索引節(jié)點(diǎn)252 11.2.7 數(shù)據(jù)塊253 11.2.8 目錄條目254 11.3 郵差算法254 11.3.1 C語言中的Test-Set-Clear位254 11.3.2 將索引節(jié)點(diǎn)號(hào)轉(zhuǎn)換為磁盤上的索引節(jié)點(diǎn)255 11.4 編程示例255 11.4.1 顯示超級(jí)塊255 11.4.2 顯示位圖257 11.4.3 顯示根索引節(jié)點(diǎn)259 11.4.4 顯示目錄條目260 11.5 遍歷EXT2文件系統(tǒng)樹261 11.5.1 遍歷算法262 11.5.2 將路徑名轉(zhuǎn)換為索引節(jié)點(diǎn)263 11.5.3 顯示索引節(jié)點(diǎn)磁盤塊263 11.6 EXT2文件系統(tǒng)的實(shí)現(xiàn)263 11.6.1 文件系統(tǒng)的結(jié)構(gòu)263 11.6.2 文件系統(tǒng)的級(jí)別264 11.7 基本文件系統(tǒng)265 11.7.1 type.h文件265 11.7.2 global.c文件267 11.7.3 實(shí)用程序函數(shù)268 11.7.4 mount-root272 11.7.5 基本文件系統(tǒng)的實(shí)現(xiàn)275 11.8 1級(jí)文件系統(tǒng)函數(shù)276 11.8.1 mkdir算法276 11.8.2 creat算法279 11.8.3 mkdir-creat的實(shí)現(xiàn)280 11.8.4 rmdir算法281 11.8.5 rmdir的實(shí)現(xiàn)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級(jí)函數(shù)286 11.8.11 編程項(xiàng)目1:1級(jí)文件系統(tǒng)的實(shí)現(xiàn)286 11.9 2級(jí)文件系統(tǒng)函數(shù)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 編程項(xiàng)目2:2級(jí)文件系統(tǒng)的實(shí)現(xiàn)292 11.10 3級(jí)文件系統(tǒng)292 11.10.1 掛載算法292 11.10.2 卸載算法293 11.10.3 交叉掛載點(diǎn)293 11.10.4 文件保護(hù)294 11.10.5 實(shí)際uid和有效uid294 11.10.6 文件鎖定294 11.10.7 編程項(xiàng)目3:整個(gè)文件系統(tǒng)的實(shí)現(xiàn)295 11.11 文件系統(tǒng)項(xiàng)目的擴(kuò)展295 11.12 習(xí)題295 參考文獻(xiàn)296 第12章 塊設(shè)備I/O和緩沖區(qū)管理297 12.1 塊設(shè)備I/O緩沖區(qū)297 12.2 Unix I/O緩沖區(qū)管理算法299 12.3 新的I/O緩沖區(qū)管理算法301 12.4 PV算法302 12.5 編程項(xiàng)目:I/O緩沖區(qū)管理算法比較303 12.5.1 系統(tǒng)組織303 12.5.2 多任務(wù)處理系統(tǒng)304 12.5.3 緩沖區(qū)管理器305 12.5.4 磁盤驅(qū)動(dòng)程序305 12.5.5 磁盤控制器306 12.5.6 磁盤中斷306 12.5.7 虛擬磁盤306 12.5.8 項(xiàng)目要求306 12.5.9 基本代碼示例307 12.5.10 示例解決方案311 12.6 模擬系統(tǒng)的改進(jìn)312 12.7 PV算法的改進(jìn)312 參考文獻(xiàn)313 第13章 TCP/IP和網(wǎng)絡(luò)編程314 13.1 網(wǎng)絡(luò)編程簡介314 13.2 TCP/IP協(xié)議314 13.3 IP主機(jī)和IP地址315 13.4 IP協(xié)議315 13.5 IP數(shù)據(jù)包格式316 13.6 路由器316 13.7 UDP316 13.8 TCP316 13.9 端口編號(hào)316 13.10 網(wǎng)絡(luò)和主機(jī)字節(jié)序317 13.11 TCP/IP網(wǎng)絡(luò)中的數(shù)據(jù)流317 13.12 網(wǎng)絡(luò)編程318 13.12.1 網(wǎng)絡(luò)編程平臺(tái)318 13.12.2 服務(wù)器-客戶機(jī)計(jì)算模型318 13.13 套接字編程319 13.13.1 套接字地址319 13.13.2 套接字API319 13.14 UDP回顯服務(wù)器-客戶機(jī)程序321 13.15 TCP回顯服務(wù)器-客戶機(jī)程序323 13.16 主機(jī)名和IP地址326 13.17 TCP編程項(xiàng)目:互聯(lián)網(wǎng)上的文件服務(wù)器328 13.17.1 項(xiàng)目規(guī)范328 13.17.2 幫助和提示329 13.17.3 多線程TCP服務(wù)器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 動(dòng)態(tài)Web頁面334 13.18.6 PHP334 13.18.7 CGI編程339 13.18.8 配置CGI的HTTPD339 13.19 CGI編程項(xiàng)目:通過CGI實(shí)現(xiàn)動(dòng)態(tài)Web頁面339 13.20 習(xí)題343 參考文獻(xiàn)343 第14章 MySQL數(shù)據(jù)庫系統(tǒng)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服務(wù)器345 14.3.2 顯示數(shù)據(jù)庫346 14.3.3 新建數(shù)據(jù)庫346 14.3.4 刪除數(shù)據(jù)庫346 14.3.5 選擇數(shù)據(jù)庫347 14.3.6 創(chuàng)建表347 14.3.7 刪除表348 14.3.8 MySQL中的數(shù)據(jù)類型348 14.3.9 插入行349 14.3.10 刪除行350 14.3.11 更新表350 14.3.12 修改表351 14.3.13 關(guān)聯(lián)表352 14.3.14 連接操作355 14.3.15 MySQL數(shù)據(jù)庫關(guān)系圖357 14.3.16 MySQL腳本357 14.4 C語言MySQL編程360 14.4.1 使用C語言構(gòu)建MySQL客戶機(jī)程序361 14.4.2 使用C語言連接到MySQL服務(wù)器361 14.4.3 使用C語言構(gòu)建MySQL數(shù)據(jù)庫362 14.4.4 使用C語言檢索MySQL查詢結(jié)果364 14.5 PHP MySQL編程367 14.5.1 使用PHP連接到MySQL服務(wù)器367 14.5.2 使用PHP創(chuàng)建數(shù)據(jù)庫表368 14.5.3 使用PHP將記錄插入表中369 14.5.4 在PHP中檢索MySQL查詢結(jié)果371 14.5.5 使用PHP進(jìn)行更新操作372 14.5.6 使用PHP刪除行373 14.6 習(xí)題373 參考文獻(xiàn)373
你還可能感興趣
我要評(píng)論
|