Linux 高級程序設計, 3/e
楊宗德 呂光宏 劉雍 編著
買這商品的人也買了...
-
$550$495 -
$2,510$2,385 -
$550$495 -
$780$616 -
$720$562 -
$2,080Hacking Exposed Malware & Rootkits: Security Secrets and Solutions, Second Edition
-
$354$336 -
$834$792 -
$1,008$958 -
$620$484 -
$414$393 -
$894$849 -
$810$770 -
$714$678 -
$250數值方法
-
$774$735 -
$600$468 -
$780$616 -
$658$619 -
$714$678 -
$1,280$845 -
$517高性能 Linux 網絡編程核心技術揭秘
-
$480$456 -
$980$764 -
$894$849
相關主題
商品描述
《Linux高 級程序設計(第三版)》圍繞Linux操作系統“一切都是文件”的特點,講述了Linux操作系統下應用層“一段執行單元(進程)對系統資源(CPU資源、各類文件資源)的管理”。詳細介紹了Linux系統編程環境及編程工具(GCC/Makefile/GDB)、文件管理(文件屬性控制、ANSI以及POSIX標準下文件讀寫操作、終端編程)、進程管理(創建、退出、執行、等待、屬性控制)、進程間通信(管道、消息隊列、共享內存)、進程間同步機制(信號量)、進程間異步機制(信號)、線程管理(創建、退出、取消等以及屬性控制)、線程間同步(互斥鎖、讀寫鎖、條件變量)、線程與信號以及BSD socket編程中的TCP、UDP、原始套接口、網絡服務器應用開發等內容,並對Linux系統下的音頻應用程序開發做了講解。
《Linux高 級程序設計(第三版)》內容豐富、緊扣應用,適合從事Linux下C應用編程的人員閱讀,也適合從事嵌入式Linux開發的人員閱讀。
目錄大綱
目 錄
第 1章 Linux下C語言開發環境 1
1.1 Linux操作系統簡介 2
1.1.1 Linux操作系統簡介 2
1.1.2 GNU/Linux簡介 3
1.1.3 相關術語介紹 3
1.2 Linux開發初步 5
1.2.1 Linux下C程序標準 5
1.2.2 庫函數和系統調用 7
1.2.3 在線文檔介紹 8
1.2.4 獲取錯誤信息 9
1.3 部分常用工具簡介 10
1.3.1 tar打包器 10
1.3.2 Linux常用命令及工具 11
1.4 Linux下編碼風格 15
1.4.1 GNU編碼規範 16
1.4.2 Linux內核編碼規範 17
第 2章 Linux下C語言開發工具 19
2.1 常用編輯工具 20
2.1.1 VIM編輯器 20
2.1.2 Emacs編輯器 22
2.1.3 Source Insight工具 23
2.2 GCC/GDB編譯調試工具基礎 27
2.2.1 GCC/G++簡單介紹 28
2.2.2 GDB調試工具簡介 30
2.2.3 使用GCC編譯C程序示例 31
2.2.4 使用g++編譯C++程序示例 32
2.2.5 GDB演示示例 33
第3章 Linux進程存儲管理 35
3.1 Linux程序存儲結構與進程結構 36
3.1.1 Linux可執行文件結構 36
3.1.2 Linux進程結構 37
3.1.3 C變量及函數存儲類型 39
3.1.4 棧和堆的區別 44
3.1.5 示例:查看代碼中各數據存儲位置 45
3.1.6 常見內存錯誤示例分析 48
3.2 ANSI C動態內存管理 50
3.2.1 內存分配的基本方式 50
3.2.2 示例:為程序申請動態內存空間 50
3.2.3 內存數據管理函數 54
3.3 Valgrind及valkyrie內存管理工具 56
3.3.1 Valgrind介紹 57
3.3.2 Valgrind安裝與使用 59
3.3.3 valgrind圖形化工具Valkyrie 61
3.3.4 內存檢測示例 62
3.4 Linux進程環境及系統限制 64
3.4.1 進程與命令行選項及參數 64
3.4.2 進程與環境變量 69
3.4.3 Linux系統限制 70
3.4.4 Linux時間管理 72
第4章 ANSI C文件IO管理 75
4.1 文件及文件流 77
4.1.1 文件與流的基本概念 77
4.1.2 標準流及流主要功能 78
4.1.3 文件流指針 79
4.1.4 緩沖區類型 81
4.1.5 指定流緩沖區 82
4.2 ANSI C文件I/O操作 85
4.2.1 打開關閉文件 85
4.2.2 讀/寫文件流 86
4.2.3 文件流定位 91
4.2.4 實現文件復制操作示例 92
4.3 流的格式化輸入/輸出操作 94
4.3.1 printf/scanf函數分析 94
4.3.2 fprintf/fscanf函數分析 95
4.3.3 sprintf函數分析 96
4.3.4 sscanf函數分析 97
第5章 POSIX文件及目錄管理 99
5.1 文件描述符與內核文件表項 100
5.1.1 文件流與文件描述符的區別 100
5.1.2 文件表結構圖 101
5.1.3 文件描述符與文件流的轉換操作 101
5.2 POSIX標準下文件IO管理 103
5.2.1 創建/打開/關閉文件 104
5.2.2 文件控制fcntl 107
5.2.3 讀/寫文件內容 110
5.2.4 使用POSIX IO實現大於2G文件復制 111
5.2.5 文件定位 112
5.2.6 同步內核緩沖區 113
5.2.7 映射文件到內存 114
5.2.8 鎖定/解鎖文件 116
5.3 目錄流基本操作 118
5.3.1 打開/關閉目錄文件 118
5.3.2 讀/寫目錄內容 119
5.3.3 定位目錄位置 121
5.3.4 添加和刪除目錄 121
5.3.5 當前工作路徑操作 122
5.3.6 文件流、目錄流、文件描述符總結 123
5.4 應用案例:遞歸文件目錄復制操作 123
5.4.1 應用需求及流程圖 123
5.4.2 示例代碼 125
第6章 普通文件、連接文件及目錄文件屬性管理 128
6.1 Linux文件系統管理 129
6.1.1 Linux下VFS虛擬文件系統 129
6.1.2 ext2文件系統結構 130
6.1.3 目錄文件及常規文件存儲方法 132
6.2 Linux系統下文件類型及屬性 132
6.2.1 Linux文件類型及權限 132
6.2.2 Linux文件類型 133
6.2.3 文件權限修飾位 136
6.2.4 文件訪問權限位 137
6.3 Linux文件屬性管理 138
6.3.1 讀取文件屬性 138
6.3.2 修改文件權限操作 141
6.3.3 修改系統umask值 142
6.3.4 修改文件的擁有者及組 143
6.3.5 用戶名/組名與UID/GID的轉換 144
6.3.6 創建/刪除硬連接 145
6.3.7 符號連接文件特殊操作 146
6.3.8 文件時間屬性修改與時間處理 147
6.4 示例:ls l以排序方式列出目錄信息 149
6.4.1 需求及知識點涵蓋 149
6.4.2 流程及源代碼實現 149
6.5 示例:實現tree系統命令 152
第7章 終端及串口編程 156
7.1 終端設備類型 157
7.1.1 實際的物理串口 157
7.1.2 控制台終端 158
7.1.3 虛擬終端 159
7.1.4 當前終端 159
7.2 終端屬性控制 160
7.2.1 讀取/設置終端屬性信息 160
7.2.2 c_cflag終端控制選項 161
7.2.3 c_lflag終端本地選項 163
7.2.4 c_iflag終端輸入選項 165
7.2.5 c_oflag終端輸出選項 166
7.2.6 c_cc[NCCS]終端控制字符 166
7.2.7 IOCTLs控制終端 167
7.2.8 進程與終端 168
7.3 串口編程 169
7.3.1 串口物理設備 169
7.3.2 串口終端基本操作 170
7.3.3 串口編程示例 171
7.4 控制台終端應用基礎 175
7.4.1 終端屬性設置 175
7.4.2 控制命令基本格式 176
7.4.3 從控制台終端獲取信息不回顯 178
第8章 Linux進程管理與程序開發 180
8.1 進程環境及進程屬性 181
8.1.1 程序、進程與進程資源 181
8.1.2 進程狀態 182
8.1.3 進程基本屬性 183
8.1.4 進程用戶屬性 187
8.2 進程管理及控制 190
8.2.1 創建進程 190
8.2.2 在進程中運行新代碼 197
8.2.3 回收進程用戶空間資源 201
8.2.4 回收內核空間資源 203
8.2.5 孤兒進程與僵死進程 205
8.2.6 修改進程用戶相關信息 206
8.3 Linux特殊進程 210
8.3.1 守候進程及其創建過程 210
8.3.2 日誌信息及其管理 211
8.3.3 守候進程應用示例 214
第9章 進程間通信——管道 216
9.1 進程間通信——PIPE 218
9.1.1 無名管道概念 218
9.1.2 無名管道文件操作的特殊性 218
9.1.3 文件描述符重定向 221
9.1.4 實現who|sort 225
9.1.5 流重定向 226
9.2 進程間通信——FIFO 228
9.2.1 有名管道概念 228
9.2.2 有名管道管理及其特殊性 228
9.2.3 管道基本特點總結 232
第 10章 Linux異步信號處理機制 233
10.1 Linux常見信號與處理 234
10.1.1 信號與中斷 234
10.1.2 信號基本概念 236
10.1.3 信號的生命周期 236
10.1.4 發送信號 237
10.2 安裝信號與捕獲信號 242
10.2.1 信號處理辦法 242
10.2.2 signal安裝信號 243
10.2.3 sigaction安裝信號 244
10.2.4 signal的系統漏洞 248
10.3 安裝信號與捕獲信號 250
10.3.1 設置進程屏蔽信號集 250
10.3.2 獲取當前未決的信號 251
10.3.3 信號集合操作 251
10.3.4 信號集合操作應用示例 252
10.4 等待信號 256
10.4.1 pause函數 256
10.4.2 sigsuspend函數 256
10.5 信號應用實例 258
第 11章 System V進程間通信 261
11.1 System V IPC基礎 263
11.1.1 key值和ID值 263
11.1.2 擁有者及權限 265
11.2 消息隊列 265
11.2.1 消息隊列IPC原理 265
11.2.2 Linux消息隊列管理 267
11.2.3 消息隊列應用實例 269
11.3 信號量通信機制 273
11.3.1 信號量IPC原理 273
11.3.2 Linux信號量管理操作 274
11.3.3 SEM_UNDO參數的應用 279
11.3.4 使用信號量實現生產消費問題 282
11.4 共享內存 285
11.4.1 共享內存IPC原理 285
11.4.2 Linux共享內存管理 286
11.4.3 共享內存的權限管理示例 287
11.4.4 共享內存處理應用示例 288
第 12章 Linux多線程編程 293
12.1 線程基本概念與線程操作 294
12.1.1 線程與進程的對比 294
12.1.2 創建線程 295
12.1.3 線程退出與等待 297
12.1.4 取消線程 299
12.1.5 線程與私有數據 302
12.2 線程同步機制 305
12.2.1 互斥鎖通信機制 305
12.2.2 條件變量通信機制 308
12.2.3 讀寫鎖通信機制 314
12.3 多線程異步管理——信號 319
12.3.1 線程信號管理 319
12.3.2 線程信號應用實例 320
12.4 線程屬性控制 322
12.4.1 獲取線程ID 323
12.4.2 初始化線程屬性對象 324
12.4.3 獲取/設置線程detachstate屬性 325
12.4.4 獲取/設置線程棧相關屬性 326
第 13章 Linux Socket網絡編程基礎 328
13.1 網絡通信基礎 329
13.1.1 TCP/IP協議簇基礎 329
13.1.2 IPv4協議基礎 330
13.1.3 點分十進制IP地址與二進制IP地址轉換 333
13.1.4 網絡數據包封包與拆包過程 335
13.1.5 字節順序與大小端問題 340
13.2 BSD Socket網絡通信編程 344
13.2.1 BSD TCP通信編程流程 344
13.2.2 BSD Socket網絡編程API 346
13.3 使用TCP實現簡單聊天程序 351
13.3.1 服務器端代碼分析 352
13.3.2 客戶器端代碼分析 354
13.4 網絡調試工具 356
13.4.1 tcpdump的使用 356
13.4.2 netstat工具使用 359
13.4.3 lsof工具使用 360
第 14章 TCP高 級應用 362
14.1 文件I/O方式比較 363
14.2 I/O阻塞與非阻塞操作 364
14.2.1 阻塞與非阻塞基本概念 364
14.2.2 非阻塞應用示例 365
14.3 socket多路復用應用 368
14.3.1 select()與pselect函數介紹 368
14.3.2 poll與ppoll函數 370
14.3.3 多路復用應用示例 371
14.4 控制socket文件描述符屬性 376
14.4.1 set/getsockopt()修改socket屬性 376
14.4.2 fcntl控制socket 379
14.4.3 ioctl控制文件描述符 379
第 15章 UDP網絡編程應用 383
15.1 UDP網絡編程基礎 384
15.1.1 UDP網絡通信流程 384
15.1.2 使用AF_INET實現UDP點對點通信示例 385
15.2 UDP廣播通信 388
15.2.1 廣播地址與廣播通信 388
15.2.2 UDP廣播通信示例 390
15.3 UDP組播通信 393
15.3.1 組播地址與組播通信 393
15.3.2 UDP組播應用示例 394
15.4 socket信號驅動 399
15.4.1 異步信號處理機制流程 399
15.4.2 信號驅動方式處理UDP數據 400
15.5 域名與IP信息解析 403
15.5.1 Linux下域名解析過程 403
15.5.2 通過域名返回主機信息 404
15.5.3 通過域名和IP返回主機信息 405
15.5.4 getaddrinfo獲取主機信息 406
第 16章 網絡服務器應用設計 410
16.1 迭代服務器設計 411
16.1.1 xinetd服務介紹 411
16.1.2 時間服務器應用 412
16.2 多進程/多線程並發服務器設計 414
16.2.1 多進程實現多客戶端 414
16.2.2 多線程實現多客戶端 418
16.2.3 基於HTTP的多進程並發文件服務器 418
16.3 進程池/線程池服務器設計 428
16.3.1 進程池/線程池服務器模型 428
16.3.2 線程池文件服務器示例 431
第 17章 本地通信與原始套接口 440
17.1 sock實現本地進程間通信 441
17.1.1 使用socket實現本地進程通信 441
17.1.2 使用AF_UNIX實現本機數據流 442
17.2 本地socket傳遞文件描述符 445
17.2.1 sendmsg/recvmsg函數 446
17.2.2 傳遞文件描述符示例 446
17.3 原始套應用程序開發 450
17.3.1 原始套接口基本原理 450
17.3.2 原始套接口實現ping應用程序 450
17.3.3 原始套實現DOS攻擊 456
第 18章 音頻應用程序開發基礎 459
18.1 WAV音頻文件格式分析 460
18.1.1 數字音頻基本參數 460
18.1.2 WAV音頻文件結構 460
18.1.3 讀出WAV格式文件頭信息 463
18.4.4 MP3文件格式 464
18.2 OSS音頻設備編程 467
18.2.1 OSS音頻設備基本架構 467
18.2.2 OSS音頻編程應用示例 469
18.3 ALSA音頻設備編程 474
18.3.1 ALSA基本架構 474
18.3.2 alsa-libs基本應用 476
18.3.3 ALSA音頻編程示例 481