UNIX環境高級編程(第3版)
作 者: [美]W. 理查德·史蒂文斯(W. Richard Stevens)史蒂芬·A. 拉戈( Stephen A. Rago) 著 戚正偉 張亞英 譯
定 價: 169
出?版?社: 人民郵電出版社
出版日期: 2019年10月01日
頁 數: 812
裝 幀: 簡裝
ISBN: 9787115516756
●第 1章 UNIX基礎知識 1 1.1 引言 1 1.2 UNIX體繫結構 1 1.3 登錄 1 1.4 文件和目錄 3 1.5 輸入和輸出 6 1.6 程序和進程 8 1.7 出錯處理 11 1.8 用戶標識 13 1.9 信號 14 1.10 時間值 16 1.11 繫統調用和庫函數 17 1.12 小結 18 習題 18 第 2章 UNIX標準及實現 20 2.1 引言 20 2.2 UNIX標準化 20 2.2.1 ISO C 20 2.2.2 IEEE POSIX 21 2.2.3 Single UNIX Specification 25 2.2.4 FIPS 26 2.3 UNIX繫統實現 26 2.3.1 SVR4 27 2.3.2 4.4BSD 27 2.3.3 FreeBSD 28 2.3.4 Linux 28 2.3.5 Mac OS X 28 2.3.6 Solaris 28 2.3.7 其他UNIX繫統 29 2.4 標準和實現的關繫 29 2.5 限制 29 2.5.1 ISO C限制 30 2.5.2 POSIX限制 31 2.5.3 XSI限制 33 2.5.4 函數sysconf、pathconf和fpathconf 33 2.5.5 不確定的運行時限制 40 2.6 選項 43 2.7 功能測試宏 46 2.8 基本繫統數據類型 47 2.9 標準之間的衝突 48 2.10 小結 48 習題 48 第3章 文件I/O 49 3.1 引言 49 3.2 文件描述符 49 3.3 函數open和openat 50 3.4 函數creat 52 3.5 函數close 53 3.6 函數lseek 53 3.7 函數read 57 3.8 函數write 57 3.9 I/O的效率 58 3.10 文件共享 59 3.11 原子操作 62 3.12 函數dup和dup2 63 3.13 函數sync、fsync和fdatasync 65 3.14 函數fcntl 65 3.15 函數ioctl 70 3.16 /dev/fd 71 3.17 小結 72 習題 72 第4章 文件和目錄 74 4.1 引言 74 4.2 函數stat、fstat、fstatat和lstat 74 4.3 文件類型 75 4.4 設置用戶ID和設置組ID 78 4.5 文件訪問權限 79 4.6 新文件和目錄的所有權 80 4.7 函數access和faccessat 81 4.8 函數umask 83 4.9 函數chmod、fchmod和fchmodat 84 4.10 粘著位 87 4.11 函數chown、fchown、fchownat和lchown 88 4.12 文件長度 89 4.13 文件截斷 90 4.14 文件繫統 90 4.15 函數link、linkat、unlink、unlinkat和remove 93 4.16 函數rename和renameat 95 4.17 符號鏈接 96 4.18 創建和讀取符號鏈接 99 4.19 文件的時間 99 4.20 函數futimens、utimensat和utimes 101 4.21 函數mkdir、mkdirat和rmdir 103 4.22 讀目錄 104 4.23 函數chdir、fchdir和getcwd 108 4.24 設備特殊文件 110 4.25 文件訪問權限位小結 112 4.26 小結 113 習題 113 第5章 標準I/O庫 115 5.1 引言 115 5.2 流和FILE對像 115 5.3 標準輸入、標準輸出和標準錯誤 116 5.4 緩衝 116 5.5 打開流 118 5.6 讀和寫流 120 5.7 每次一行I/O 122 5.8 標準I/O的效率 123 5.9 二進制I/O 125 5.10 定位流 126 5.11 格式化I/O 127 5.12 實現細節 131 5.13 臨時文件 134 5.14 內存流 137 5.15 標準I/O的替代軟件 140 5.16 小結 140 習題 140 第6章 繫統數據文件和信息 142 6.1 引言 142 6.2 口令文件 142 6.3 陰影口令 145 6.4 組文件 146 6.5 附屬組ID 147 6.6 實現區別 148 6.7 其他數據文件 148 6.8 登錄賬戶記錄 149 6.9 繫統標識 150 6.10 時間和日期例程 151 6.11 小結 157 習題 157 第7章 進程環境 158 7.1 引言 158 7.2 main函數 158 7.3 進程終止 158 7.4 命令行參數 162 7.5 環境表 163 7.6 C程序的存儲空間布局 163 7.7 共享庫 165 7.8 存儲空間分配 165 7.9 環境變量 168 7.10 函數setjmp和longjmp 170 7.11 函數getrlimit和setrlimit 175 7.12 小結 180 習題 180 第8章 進程控制 181 8.1 引言 181 8.2 進程標識 181 8.3 函數fork 182 8.4 函數vfork 187 8.5 函數exit 188 8.6 函數wait和waitpid 190 8.7 函數waitid 194 8.8 函數wait3和wait4 195 8.9 競爭條件 196 8.10 函數exec 199 8.11 更改用戶ID和更改組ID 204 8.12 解釋器文件 207 8.13 函數system 211 8.14 進程會計 215 8.15 用戶標識 220 8.16 進程調度 221 8.17 進程時間 224 8.18 小結 226 習題 226 第9章 進程關繫 228 9.1 引言 228 9.2 終端登錄 228 9.3 網絡登錄 231 9.4 進程組 233 9.5 會話 234 9.6 控制終端 235 9.7 函數tcgetpgrp、tcsetpgrp和tcgetsid 237 9.8 作業控制 237 9.9 shell執行程序 240 9.10 孤兒進程組 244 9.11 FreeBSD實現 246 9.12 小結 248 習題 248 第 10章 信號 249 10.1 引言 249 10.2 信號概念 249 10.3 函數signal 256 10.4 不可靠的信號 259 10.5 中斷的繫統調用 260 10.6 可重入函數 262 10.7 SIGCLD語義 264 10.8 可靠信號術語和語義 266 10.9 函數kill和raise 267 10.10 函數alarm和pause 268 10.11 信號集 273 10.12 函數sigprocmask 275 10.13 函數sigpending 276 10.14 函數sigaction 278 10.15 函數sigsetjmp和siglongjmp 283 10.16 函數sigsuspend 286 10.17 函數abort 291 10.18 函數system 293 10.19 函數sleep、nanosleep和clock_nanosleep 298 10.20 函數sigqueue 300 10.21 作業控制信號 301 10.22 信號名和編號 303 10.23 小結 305 習題 305 第 11章 線程 307 11.1 引言 307 11.2 線程概念 307 11.3 線程標識 308 11.4 線程創建 309 11.5 線程終止 311 11.6 線程同步 318 11.6.1 互斥量 320 11.6.2 避免死鎖 322 11.6.3 函數pthread_mutex_ timedlock 327 11.6.4 讀寫鎖 328 11.6.5 帶有超時的讀寫鎖 332 11.6.6 條件變量 332 11.6.7 自旋鎖 335 11.6.8 屏障 336 11.7 小結 340 習題 340 第 12章 線程控制 341 12.1 引言 341 12.2 線程限制 341 12.3 線程屬性 342 12.4 同步屬性 345 12.4.1 互斥量屬性 345 12.4.2 讀寫鎖屬性 352 12.4.3 條件變量屬性 353 12.4.4 屏障屬性 354 12.5 重入 354 12.6 線程特定數據 358 12.7 取消選項 362 12.8 線程和信號 364 12.9 線程和fork 367 12.10 線程和I/O 370 12.11 小結 371 習題 371 第 13章 守護進程 372 13.1 引言 372 13.2 守護進程的特征 372 13.3 編程規則 374 13.4 出錯記錄 377 13.5 單實例守護進程 380 13.6 守護進程的慣例 381 13.7 客戶進程-服務器進程模型 386 13.8 小結 386 習題 387 第 14章 不錯I/O 388 14.1 引言 388 14.2 非阻塞I/O 388 14.3 記錄鎖 391 14.4 I/O多路轉接 403 14.4.1 函數select和pselect 404 14.4.2 函數poll 408 14.5 異步I/O 410 14.5.1 System V異步I/O 410 14.5.2 BSD異步I/O 411 14.5.3 POSIX異步I/O 411 14.6 函數readv和writev 419 14.7 函數readn和writen 421 14.8 存儲映射I/O 422 14.9 小結 428 習題 428 第 15章 進程間通信 429 15.1 引言 429 15.2 管道 430 15.3 函數popen和pclose 436 15.4 協同進程 441 15.5 FIFO 445 15.6 XSI IPC 448 15.6.1 標識符和鍵 448 15.6.2 權限結構 449 15.6.3 結構限制 450 15.6.4 優點和缺點 450 15.7 消息隊列 451 15.8 信號量 455 15.9 共享存儲 459 15.10 POSIX信號量 465 15.11 客戶進程-服務器進程屬性 470 15.12 小結 472 習題 472 第 16章 網絡IPC:套接字 474 16.1 引言 474 16.2 套接字描述符 474 16.3 尋址 477 16.3.1 字節序 477 16.3.2 地址格式 478 16.3.3 地址查詢 480 16.3.4 將套接字與地址關聯 486 16.4 建立連接 487 16.5 數據傳輸 491 16.6 套接字選項 502 16.7 帶外數據 504 16.8 非阻塞和異步I/O 505 16.9 小結 506 習題 506 第 17章 不錯進程間通信 507 17.1 引言 507 17.2 UNIX域套接字 507 17.3 唯一連接 512 17.4 傳送文件描述符 518 17.5 open服務器進程第 1版 527 17.6 open服務器進程第 2版 533 17.7 小結 542 習題 542 第 18章 終端I/O 544 18.1 引言 544 18.2 綜述 544 18.3 特殊輸入字符 549 18.4 獲得和設置終端屬性 553 18.5 終端選項標志 554 18.6 stty命令 560 18.7 波特率函數 560 18.8 行控制函數 561 18.9 終端標識 562 18.10 規範模式 567 18.11 非規範模式 570 18.12 終端窗口大小 576 18.13 termcap、terminfo和curses 578 18.14 小結 578 習題 579 第 19章 偽終端 580 19.1 引言 580 19.2 概述 580 19.3 打開偽終端設備 585 19.4 函數pty_fork 588 19.5 pty程序 590 19.6 使用pty程序 595 19.7 不錯特性 600 19.8 小結 601 習題 601 第 20章 數據庫函數庫 603 20.1 引言 603 20.2 歷史 603 20.3 函數庫 604 20.4 實現概述 605 20.5 集中式或非集中式 608 20.6 並發 610 20.7 構造函數庫 610 20.8 源代碼 611 20.9 性能 635 20.10 小結 639 習題 639 第 21章 與網絡打印機通信 640 21.1 引言 640 21.2 網絡打印協議 640 21.3 超文本傳輸協議HTTP 642 21.4 打印假脫機技術 643 21.5 源代碼 644 21.6 小結 684 習題 684 附錄A 函數原型 685 附錄B 其他源代碼 721 附錄C 部分習題答案 730 附錄參考書目 763
內容簡介
本書是被譽為UNIX編程“聖經”的Advanced Programming in the UNIX Environment一書的第3版。在本書第2版出版後的8年中,UNIX發生了巨大的變化,特別是影響UNIX編程接口的有關標準變化很大。本書在保持前一版風格的基礎上,根據新的標準對內容進行了修訂和增補,反映了新的技術發展。書中除了介紹UNIX文件和目錄、標準I/O庫、繫統數據文件和信息、進程環境、進程控制、進程關繫、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC、偽終端等方面的內容,還在此基礎上介紹了眾多應用實例,包括如何創建數據庫函數庫以及如何與網絡打印機通信等。此外,還在附錄中給出了函數原型和部分習題的答案。 本書內容非常不錯,概念清晰,闡述精闢,對於所有層次UNIX/Linux程序員都是一本不可或缺的參考書。
[美]W. 理查德·史蒂文斯(W. Richard Stevens)史蒂芬·A. 拉戈( Stephen A. Rago) 著 戚正偉 張亞英 譯
作者簡介 W. 理查德·史蒂文斯(W. Richard Stevens)靠前知名的UNIX和網絡專家,備受贊譽的技術作家。生前著有多部經典的傳世之作,包括《UNIX網絡編程》(兩卷本)、《TCP/IP詳解》(三卷本)和本書版。 史蒂芬·A. 拉戈(Stephen A. Rago)資深UNIX程序員,目前任NEC美國實驗室存儲繫統研究組研究員。之前是貝爾實驗室的UNIX繫統V版本4的開發人員之一。著有《UNIX繫統V網絡編程》,是本書版的技術審校和第2版的共同作者。 譯者簡介 戚正偉 博士,上海交通大學軟件學院教授、博士生導師,CCF不錯會員,CCF繫統軟件、理論計算機專委會委員......
"