●《Linux/UNIX繫統編程手冊(上冊)》:
章 歷史和標準 1
1.1 UNIX和C語言簡史 1
1.2 Linux簡史 4
1.2.1 GNU項目 4
1.2.2 Linux內核 5
1.3 標準化 8
1.3.1 C編程語言 8
1.3.2 首個POSIX標準 9
1.3.3 X/Open公司和TheOpenGroup 10
1.3.4 SUSv3和POSIX.1—2001 10
1.3.5 SUSv4和POSIX.1—2008 12
1.3.6 UNIX標準時間表 12
1.3.7 實現標準 14
1.3.8 Linux、標準、Linux標準規範(LinuxStandardBase) 14
1.4 總結 15
第2章 基本概念 17
2.1 操作繫統的核心—內核 17
2.2 shell 19
2.3 用戶和組 20
2.4 單根目錄層級、目錄、鏈接及文件 21
2.5 文件I/O模型 23
2.6 程序 24
2.7 進程 25
2.8 內存映射 27
2.9 靜態庫和共享庫 28
2.10 進程間通信及同步 28
2.11 信號 29
2.12 線程 30
2.13 進程組和shell任務控制 30
2.14 會話、控制終端和控制進程 30
2.15 偽終端 31
2.16 日期和時間 31
2.17 客戶端服務器架構 32
2.18 實時性 32
2.19 proc文件繫統 33
2.20 總結 33
第3章 繫統編程概念 34
3.1 繫統調用 34
3.2 庫函數 36
3.3 標準C語言函數庫;GNUC語言函數庫(glibc) 37
3.4 處理來自繫統調用和庫函數的錯誤 38
3.5 關於本書示例程序的注意事項 40
3.5.1 命令行選項及參數 40
3.5.2 常用的函數及頭文件 40
3.6 可移植性問題 49
3.6.1 特性測試宏 49
3.6.2 繫統數據類型 51
3.6.3 其他的可移植性問題 53
3.7 總結 54
3.8 練習 55
第4章 文件I/O:通用的I/O模型 56
4.1 概述 56
4.2 通用I/O 58
4.3 打開一個文件:open() 58
4.3.1 open()調用中的flags參數 60
4.3.2 open()函數的錯誤 63
4.3.3 creat()繫統調用 64
4.4 讀取文件內容:read() 64
4.5 數據寫入文件:write() 65
4.6 關閉文件:close() 66
4.7 改變文件偏移量:lseek() 66
4.8 通用I/O模型以外的操作:ioctl() 70
4.9 總結 71
4.10 練習 71
第5章 深入探究文件I/O 72
5.1 原子操作和競爭條件 72
5.2 文件控制操作:fcntl() 75
5.3 打開文件的狀態標志 75
5.4 文件描述符和打開文件之間的關繫 76
5.5 復制文件描述符 78
5.6 在文件特定偏移量處的I/O:pread()和pwrite() 80
5.7 分散輸入和集中輸出(Scatter—GatherI/O):readv()和writev() 81
5.8 截斷文件:truncate()和ftruncate()繫統調用 84
5.9 非阻塞I/O 84
5.10 大文件I/O 85
5.11 /dev/fd目錄 88
5.12 創建臨時文件 88
5.13 總結 90
5.14 練習 90
第6章 進程 92
6.1 進程和程序 92
6.2 進程號和父進程號 93
6.3 進程內存布局 94
6.4 虛擬內存管理 97
6.5 棧和棧幀 99
6.6 命令行參數(argc,argv) 99
6.7 環境列表 101
6.8 執行非局部跳轉:setjmp()和longjmp() 106
6.9 總結 111
6.9 練習 112
第7章 內存分配 113
7.1 在堆上分配內存 113
7.1.1 調整programbreak:brk()和sbrk() 113
7.1.2 在堆上分配內存:malloc()和free() 114
7.1.3 malloc()和free()的實現 117
7.1.4 在堆上分配內存的其他方法 120
7.2 在堆棧上分配內存:alloca() 122
7.3 總結 123
7.4 練習 123
第8章 用戶和組 124
8.1 密碼文件:/etc/passwd 124
8.2 shadow密碼文件:/etc/shadow 125
8.3 組文件:/etc/group 126
8.4 獲取用戶和組的信息 127
8.5 密碼加密和用戶認證 132
8.6 總結 135
8.7 練習 135
第9章 進程憑證 136
9.1 實際用戶ID和實際組ID 136
9.2 有效用戶ID和有效組ID 136
9.3 Set—User—ID和Set—Group—ID程序 137
9.4 保存set—user—ID和保存set—group—ID 138
9.5 文件繫統用戶ID和組ID 139
9.6 輔助組ID 140
9.7 獲取和修改進程憑證 140
9.7.1 獲取和修改實際、有效和保存設置標識 140
9.7.2 獲取和修改文件繫統ID 145
9.7.3 獲取和修改輔助組ID 145
9.7.4 修改進程憑證的繫統調用總結 146
9.7.5 示例:顯示進程憑證 148
9.8 總結 149
9.9 習題 150
0章 時間 151
10.1 日歷時間(CalendarTime) 151
10.2 時間轉換函數 153
10.2.1 將time_t轉換為可打印格式 153
10.2.2 time_t和分解時間之間的轉換 154
10.2.3 分解時間和打印格式之間的轉換 155
10.3 時區 161
10.4 地區(Locale) 163
10.5 更新繫統時鐘 167
10.6 軟件時鐘(jiffies) 168
10.7 進程時間 168
10.8 總結 171
10.9 練習 172
1章 繫統限制和選項 173
11.1 繫統限制 174
11.2 在運行時獲取繫統限制(和選項) 176
11.3 運行時獲取與文件相關的限制(和選項) 178
11.4 不確定的限制 179
11.5 繫統選項 180
11.6 總結 181
11.7 練習 182
2章 繫統和進程信息 183
12.1 /proc文件繫統 183
12.1.1 獲取與進程有關的信息:/proc/PID 183
12.1.2 /proc目錄下的繫統信息 185
12.1.3 訪問/proc文件 186
12.2 繫統標識:uname() 188
12.3 總結 190
12.4 練習 190
3章 文件I/O緩衝 191
13.1 文件I/O的內核緩衝:緩衝區高速緩存 191
13.2 stdio庫的緩衝 194
13.3 控制文件I/O的內核緩衝 196
13.4 I/O緩衝小結 200
13.5 就I/O模式向內核提出建議 201
13.6 繞過緩衝區高速緩存:直接I/O 202
13.7 混合使用庫函數和繫統調用進行文件I/O 204
13.8 總結 205
13.9 練習 205
4章 繫統編程概念 207
14.1 設備專用文件(設備文件) 207
14.2 磁盤和分區 208
14.3 文件繫統 209
14.4 i節點 211
14.5 虛擬文件繫統(VFS) 213
14.6 日志文件繫統 214
14.7 單根目錄層級和掛載點 215
14.8 文件繫統的掛載和卸載 216
14.8.1 掛載文件繫統:mount() 217
14.8.2 卸載文件繫統:umount()和umount2() 222
14.9 不錯掛載特性 223
14.9.1 在多個掛載點掛載文件繫統 224
14.9.2 多次掛載同一掛載點 224
14.9.3 基於每次掛載的掛載標志 225
14.9.4 綁定掛載 225
14.9.5 遞歸綁定掛載 226
14.10 虛擬內存文件繫統:tmpfs 227
14.11 獲得與文件繫統有關的信息:statvfs() 228
14.12 總結 229
14.13 練習 230
5章 文件屬性 231
15.1 獲取文件信息:stat() 231
15.2 文件時間戳 236
15.2.1 使用utime()和utimes()來改變文件時間戳 238
15.2.2 使用utimensat()和futimens()改變文件時間戳 239
15.3 文件屬主 241
15.3.1 新建文件的屬主 241
15.3.2 改變文件屬主:chown()、fchown()和lchown() 241
15.4 文件權限 244
15.4.1 普通文件的權限 244
15.4.2 目錄權限 246
15.4.3 權限檢查算法 246
15.4.4 檢查對文件的訪問權限:access() 248
15.4.5 Set—User—ID、Set—Group—ID和Sticky位 249
15.4.6 進程的文件模式創建掩碼:umask() 249
15.4.7 更改文件權限:chmod()和fchmod() 251
15.5 I節點標志(ext2擴展文件屬性) 252
15.6 總結 256
15.7 練習 256
6章 擴展屬性 258
16.1 概述 258
16.2 擴展屬性的實現細節 260
16.3 操控擴展屬性的繫統調用 260
16.4 總結 264
16.5 練習 264
7章 訪問控制列表 265
17.1 概述 265
17.2 ACL權限檢查算法 267
17.3 ACL的長、短文本格式 268
17.4 ACL_mask型ACE和ACL組分類 269
17.5 getfacl和setfacl命令 270
17.6 默認ACL與文件創建 271
17.7 ACL在實現方面的限制 272
17.8 ACLAPI 273
17.9 總結 280
17.10 練習 280
8章 目錄與鏈接 281
18.1 目錄和(硬)鏈接 281
18.2 符號(軟)鏈接 283
18.3 創建和移除(硬)鏈接:link()和unlink() 286
18.4 更改文件名:rename() 289
18.5 使用符號鏈接:symlink()和readlink() 290
18.6 創建和移除目錄:mkdir()和rmdir() 291
18.7 移除一個文件或目錄:remove() 292
18.8 讀目錄:opendir()和readdir() 292
18.9 文件樹遍歷:nftw() 297
18.10 進程的當前工作目錄 301
18.11 針對目錄文件描述符的相關操作 303
18.12 改變進程的根目錄:chroot() 304
18.13 解析路徑名:realpath() 306
18.14 解析路徑名字符串:dirname()和basename() 307
18.15 總結 309
18.16 練習 309
9章 監控文件事件 311
19.1 概述 311
19.2 inotifyAPI 312
19.3 inotify事件 313
19.4 讀取inotify事件 315
19.5 隊列限制和/proc文件 319
19.6 監控文件的舊有繫統:dnotify 320
19.7 總結 320
19.8 練習 320
第20章 信號:基本概念 321
20.1 概念和概述 321
20.2 信號類型和默認行為 323
20.3 改變信號處置:signal() 329
20.4 信號處理器簡介 330
20.5 發送信號:kill() 333
20.6 檢查進程的存在 334
20.7 發送信號的其他方式:raise()和killpg() 335
20.8 顯示信號描述 336
20.9 信號集 337
20.10 信號掩碼(阻塞信號傳遞) 339
20.11 處於等待狀態的信號 341
20.12 不對信號進行排隊處理 341
20.13 改變信號處置:sigaction() 345
20.14 等待信號:pause() 346
20.15 總結 347
20.16 練習 347
第21章 信號:信號處理器函數 348
21.1 設計信號處理器函數 348
21.1.1 再論信號的非隊列化處理 348
21.1.2 可重入函數和異步信號安全函數 349
21.1.3 全局變量和sig_atomic_t數據類型 353
21.2 終止信號處理器函數的其他方法 354
21.2.1 在信號處理器函數中執行非本地跳轉 354
21.2.2 異常終止進程:abort() 358
21.3 在備選棧中處理信號:sigaltstack() 358
21.4 SA_SIGINFO標志 361
21.5 繫統調用的中斷和重啟 366
21.6 總結 368
21.7 練習 369
第22章 信號:不錯特性 370
22.1 核心轉儲文件 370
22.2 傳遞、處置及處理的特殊情況 372
22.3 可中斷和不可中斷的進程睡眠狀態 373
22.4 硬件產生的信號 374
22.5 信號的同步生成和異步生成 374
22.6 信號傳遞的時機與順序 375
22.7 signal()的實現及可移植性 376
22.8 實時信號 378
22.8.1 發送實時信號 379
22.8.2 處理實時信號 380
22.9 使用掩碼來等待信號:sigsuspend() 384
22.10 以同步方式等待信號 387
22.11 通過文件描述符來獲取信號 390
22.12 利用信號進行進程間通信 393
22.13 早期的信號API(SystemV和BSD) 393
22.14 總結 395
22.15 練習 396
……
第23章 定時器與休眠 397
第24章 進程的創建 425
第25章 進程的終止 440
第26章 監控子進程 447
第27章 程序的執行 465
第28章 詳述進程創建和程序執行 487
第29章 線程:介紹 509
第30章 線程:線程同步 521
第31章 線程:線程安全和每線程存儲 539
第32章 線程:線程取消 552
第33章 線程:更多細節 561
……
《Linux/UNIX繫統編程手冊(下冊)》
內容簡介
《Linux/UNIX繫統編程手冊(上、下冊)》是介紹Linux與UNIX編程接口的非常不錯著作。Linux編程資深專家Michael Kerrisk在書中詳細描述了Linux/UNIX繫統編程所涉及的繫統調用和庫函數,並輔之以全面而清晰的代碼示例。《Linux/UNIX繫統編程手冊(上、下冊)》涵蓋了逾500個繫統調用及庫函數,並給出逾200個程序示例,另含88張表格和115幅示意圖。
《Linux/UNIX繫統編程手冊(上、下冊)》總共分為64章,主要講解了高效讀寫文件,對信號、時鐘和定時器的運用,創建進程、執行程序,編寫安全的應用程序,運用POSIX線程技術編寫多線程程序,創建和使用共享庫,運用管道、消息隊列、共享內存和信號量技術來進行進程間通信,以及運用套接字API編寫網絡應用等內容。
《Linux/UNIX繫統編程手冊(上、下冊)》在彙聚大批 Linux專......