Linux編程(第二版)(微課版)
劉文果、丁凱、徐欽桂、鐘雪峰、譚偉
相關主題
商品描述
目錄大綱
目 錄
第1章 Linux系統文件操作 1
1.1 UNIX/Linux操作系統簡介 1
1.1.1 UNIX簡介 1
1.1.2 Linux概述 2
1.2 Linux系統目錄結構 3
1.3 Linux系統的安裝、啟動、登錄、用戶界面與命令格式 5
1.3.1 在VMware中用快照快速安裝Linux虛擬機系統 5
1.3.2 啟動與登錄Linux 5
1.3.3 三種系統操作方法 6
1.3.4 Linux命令格式和說明 7
1.4 Linux文件、目錄操作及文件屬性、權限 9
1.4.1 目錄路徑與目錄操作 9
1.4.2 文件屬性與權限 13
1.4.3 Linux文件操作命令 14
1.4.4 修改文件屬性 19
1.4.5 使用通配符(“*”和“?”)匹配文件名 21
1.4.6 文件的壓縮與打包 22
1.5 輸入/輸出重定向和管道 23
1.6 本章小結 24
課後作業 25
第2章 Linux Shell編程 27
2.1 Shell編程基本概念 27
2.1.1 Shell腳本的結構 27
2.1.2 Shell腳本的創建與執行方法 28
2.1.3 Shell變量與賦值表達式 29
2.1.4 Shell輸入/輸出語句 30
2.1.5 終止腳本的執行和終止狀態 30
2.2 Shell數學運算與字符串處理 33
2.2.1 Shell數學運算 33
2.2.2 Shell字符串處理 33
2.3 Shell條件與if控制結構 34
2.3.1 if語句 34
2.3.2 test命令 36
*2.3.3 復合條件檢查 40
2.3.4 case語句 41
2.4 循環結構 41
2.4.1 for循環結構 42
2.4.2 while循環結構 43
2.4.3 until循環結構 44
2.5 Linux全局變量和環境變量 44
2.5.1 Linux Shell層次結構 44
2.5.2 Shell全局變量與局部變量 46
2.5.3 Linux環境變量 46
*2.5.4 Shell變量的刪除和只讀設置方法 49
2.5.5 Shell數組的定義和使用方法 49
2.6 Linux文件I/O、I/O重定向和管道 50
2.6.1 標準文件描述符 50
2.6.2 I/O重定向 50
2.6.3 管道 52
2.6.4 從文件獲取輸入 52
2.7 命令行參數 53
*2.8 Shell函數 54
*2.8.1 函數的基本用法 54
*2.8.2 向函數傳遞參數 55
2.9 本章小結 55
課後作業 56
第3章 Linux C編程環境 57
3.1 Linux C程序的編譯與執行 57
3.1.1 Linux環境下C程序的編譯與執行過程 57
3.1.2 編譯多個源文件 61
3.1.3 使用頭文件和庫文件 62
*3.1.4 使用gcc創建自定義庫文件 65
3.1.5 gcc常用命令選項及用法 67
3.2 Linux自帶的常用系統庫 68
3.2.1 數學函數 68
3.2.2 環境控制函數 69
3.2.3 字符串處理函數 69
3.2.4 時間函數 70
3.2.5 數據結構算法函數 71
3.3 診斷和處理Linux編程錯誤 75
3.3.1 診斷和處理編譯錯誤 75
3.3.2 處理系統調用失敗 79
3.3.3 用斷言檢查程序狀態錯誤 83
*3.4 用GDB/ddd調試器診斷運行錯誤 84
*3.4.1 用GDB調試程序運行錯誤的示例 85
*3.4.2 常用的GDB命令 88
*3.4.3 用ddd/GDB調試程序 89
3.5 命令行參數和環境變量的讀取方法 89
3.5.1 環境變量及其使用方法 89
3.5.2 命令行參數的使用方法 90
*3.6 make工具 91
*3.6.1 引入make工具的原因 91
*3.6.2 用makefile描述源文件間的依賴關系 92
*3.6.3 引入偽目標以增強makefile功能 94
*3.6.4 用變量優化makefile文件 94
3.6.5 用預定義變量和隱式規則簡化makefile文件 95
3.7 本章小結 96
課後作業 97
第4章 輸入/輸出與文件系統 100
4.1 文件系統層次結構 100
4.1.1 文件系統層次結構簡介 100
4.1.2 文件I/O庫函數 101
4.2 系統I/O概念與文件操作編程 102
4.2.1 UNIX I/O 102
4.2.2 文件打開和關閉函數 103
4.2.3 文件讀寫編程與讀寫性能改進方法 106
4.2.4 文件定位與文件內容隨機讀取 110
4.2.5 任意類型數據的文件讀寫 112
4.2.6 用文件讀寫函數操作設備 114
4.3 內核文件I/O數據結構及應用 116
4.3.1 文件描述符和標準輸入/輸出 116
4.3.2 文件打開過程 117
4.3.3 內核文件I/O數據結構
共享原理 118
4.3.4 dup和I/O重定向 119
*4.4 用RIO包增強UNIX I/O功能 123
*4.4.1 RIO無緩沖的輸入/輸出函數 123
*4.4.2 RIO帶緩沖的輸入函數 124
4.5 文件組織 127
4.5.1 文件屬性、目錄項與目錄 127
4.5.2 邏輯地址與物理地址 128
4.5.3 創建和讀寫文件 129
4.5.4 一體化文件目錄和分解目錄 131
4.5.5 Linux分解式目錄管理 132
4.5.6 讀取文件元數據 134
4.5.7 文件搜索和當前目錄 135
4.6 文件物理結構 136
4.6.1 外存組織方式 136
4.6.2 管理磁盤空閑盤塊 140
4.6.3 文件系統結構格式 142
4.7 本章小結 143
課後作業 143
第5章 進程管理與控制 150
5.1 邏輯控制流和並發流 150
5.2 進程的基本概念 152
5.2.1 進程概念、結構與描述 152
5.2.2 進程的基本狀態及狀態轉換 154
5.2.3 對進程PCB進行組織 154
5.2.4 進程實例 155
5.2.5 操作進程的工具 157
5.2.6 編程讀取進程屬性 159
*5.2.7 進程權限和文件特殊權限位 160
5.3 進程控制 162
5.3.1 創建進程 162
5.3.2 多進程並發特徵與執行流程分析 169
5.3.3 進程的終止與回收 172
5.3.4 讓進程休眠 176
5.3.5 加載並運行程序 176
5.3.6 fork和exec函數的應用實例 179
*5.3.7 非本地跳轉 182
5.3.8 進程與程序的區別 184
5.4 信號機制 184
5.4.1 信號的概念 185
5.4.2 有關信號的術語 186
5.4.3 發送信號的過程 187
5.4.4 接收信號的過程 190
*5.4.5 信號處理問題 192
*5.4.6 可移植信號處理 195
*5.4.7 信號處理引起的競爭 197
*5.5 守護進程 200
5.6 進程、內核與系統調用間的關系 202
5.7 本章小結 203
課後作業 203
第6章 線程控制與同步互斥 209
6.1 線程概念 209
6.1.1 什麽是線程 209
6.1.2 線程執行模型 210
6.1.3 多線程應用 211
6.1.4 第一個線程 211
6.2 多線程並發特徵與編程方法 212
6.2.1 Pthreads線程API 212
6.2.2 多線程並發特徵 215
6.2.3 線程間數據傳遞 217
6.3 多線程程序中的共享變量 219
6.3.1 進程的用戶地址空間結構 220
6.3.2 變量類型和運行實例 220
6.3.3 共享變量的識別 221
6.4 線程同步與互斥 221
6.4.1 變量共享引入的同步錯誤 222
6.4.2 臨界資源、臨界區、進程(線程)互斥問題 227
6.4.3 用信號量與P/V操作保證臨界區互斥執行 228
6.4.4 用信號量及P/V操作解決資源調度問題 230
6.4.5 用Pthreads同步機制實現線程的互斥與同步 235
6.4.6 共享變量的類型與同步編程小結 239
6.5 經典同步問題 240
6.5.1 生產者/消費者問題 240
6.5.2 讀者/寫者問題 243
*6.6 其他同步機制 244
*6.6.1 AND型信號量 244
*6.6.2 信號量集 245
*6.6.3 條件變量 245
*6.6.4 管程 248
*6.7 多線程並發的其他問題 249
*6.7.1 線程安全 249
*6.7.2 可重入性 251
*6.7.3 線程不安全庫函數 251
*6.7.4 線程競爭 252
6.8 使用多線程提高並行性 255
6.8.1 順序程序、並發程序和並行程序 255
6.8.2 並行程序應用示例 255
6.8.3 使用線程管理多個並發活動 259
6.9 本章小結 261
課後作業 262
第7章 進程間通信 270
7.1 管道通信 270
7.1.1 什麽是管道 270
7.1.2 命名管道FIFO及應用編程 271
*7.1.3 利用FIFO傳輸任意類型的數據 274
7.1.4 無名管道pipe及應用 275
7.1.5 使用pipe實現管道命令 278
*7.1.6 使用FIFO的客戶端/服務器應用程序 280
7.2 消息隊列 283
7.2.1 消息隊列的結構 283
7.2.2 消息隊列函數 284
7.2.3 消息隊列通信示例 286
7.2.4 通過消息隊列傳送任意類型的數據 289
7.3 共享內存 291
7.3.1 基於共享內存進行通信的基本原理 291
7.3.2 共享內存相關API函數 291
7.3.3 共享內存通信驗證 293
7.3.4 共享內存通信示例 295
7.4 用IPC信號量實施進程同步 299
7.4.1 IPC信號量集結構體及操作函數 299
7.4.2 用信號量集創建自定義P/V操作函數庫 301
7.5 本章小結 302
課後作業 302
第8章 網 絡 編 程 304
8.1 客戶端/服務器編程模型 304
8.2 網絡通信結構和Internet連接 305
8.2.1 網絡通信結構 305
8.2.2 Internet連接 306
8.3 套接字地址與設置方法 307
8.3.1 IP地址和字節序 307
8.3.2 Internet域名 309
8.3.3 套接字地址結構 312
8.4 套接字接口與TCP通信編程方法 312
8.4.1 socket函數 313
8.4.2 connect函數 313
8.4.3 open_client_sock函數 314
8.4.4 bind函數 315
8.4.5 listen函數 315
8.4.6 open_listen_sock函數 315
8.4.7 accept函數 316
8.4.8 send/recv函數 317
8.5 網絡通信應用示例toggle 317
8.6 Web編程基礎 320
8.6.1 Web基礎 320
8.6.2 Web內容 321
8.6.3 HTTP事務 322
8.7 小型Web服務器: weblet.c 324
8.7.1 weblet的主程序 324
8.7.2 HTTP事務處理 325
8.7.3 生成錯誤提示頁面 327
8.7.4 HTTP額外請求報頭的讀取 328
8.7.5 URI解析 328
8.7.6 提供靜態內容 329
8.7.7 測試靜態網頁功能 330
8.7.8 提供動態內容 331
8.7.9 實現CGI程序 332
8.7.10 測試動態網頁功能 333
8.7.11 關於Web服務器的其他問題 335
8.8 本章小結 335
課後作業 336
第9章 並發網絡通信編程實例 337
9.1 基於多進程的並發編程 337
*9.2 基於I/O多路復用的並發編程 340
*9.2.1 利用I/O多路復用等待多種I/O事件 340
*9.2.2 基於I/O多路復用實現事件驅動服務器 342
9.3 基於線程的並發編程 345
9.3.1 基於線程的並發toggle服務器 346
9.3.2 基於預線程化的並發服務器 347
9.4 本章小結 350
課後作業 350
參考文獻 352