UNIX 環境高級編程, 3/e Advanced Programming in the UNIX Environment, 3/e

W. Richard Stevens , Stephen A. Rago 著

  • UNIX 環境高級編程, 3/e-preview-1
  • UNIX 環境高級編程, 3/e-preview-2
UNIX 環境高級編程, 3/e-preview-1

買這商品的人也買了...

商品描述

本書是被譽為UNIX編程“聖經”的Advanced Programming in the UNIX Environment一書的第3版。在本書第2版出版後的8年中,UNIX發生了巨大的變化,特別是影響UNIX編程接口的有關標準變化很大。本書在保持前一版風格的基礎上,根據新的標準對內容進行了修訂和增補,反映了新的技術發展。書中除了介紹UNIX文件和目錄、標準I/O庫、系統數據文件和信息、進程環境、進程控制、進程關系、信號、線程、線程控制、守護進程、各種I/O、進程間通信、網絡IPC、偽終端等方面的內容,還在此基礎上介紹了眾多應用實例,包括如何創建數據庫函數庫以及如何與網絡打印機通信等。此外,還在附錄中給出了函數原型和部分習題的答案。

 

本書內容權威,概念清晰,闡述精闢,對於所有層次UNIX/Linux程序員都是一本不可或缺的參考書。

作者簡介

作者簡介
W.理查德·史蒂文斯(W. Richard Stevens)國際知名的UNIX和網絡專家,備受讚譽的技術作家。生前著有多部經典的傳世之作,包括《UNIX網絡編程》(兩卷本)、《TCP/IP詳解》(三卷本)和本書第1版。
史蒂芬·A.拉戈(Stephen A. Rago)資深UNIX程序員,目前任NEC美國實驗室存儲系統研究組研究員。之前是貝爾實驗室的UNIX系統V版本4的開發人員之一。著有《UNIX系統V網絡編程》,是本書第1版的技術審校和第2版的共同作者。
譯者簡介
戚正偉博士,上海交通大學軟件學院教授、博士生導師,CCF高級會員,CCF系統軟件、理論計算機專委會委員,微軟亞洲研究院和美國卡內基梅隆大學(CMU)訪問學者。主要研究方向為系統軟件和程序分析等,除翻譯本書外,還著有《NewBluePill:深入理解硬件虛擬機》等。
張亞英博士,同濟大學電子與信息工程學院計算機系教授,研究方向為網絡與分佈式系統、大數據挖掘與分析等。
尤晉元上海交通大學計算機科學及工程系教授、博士生導師。在科研方面,主要從事操作系統和分佈對象計算技術方面的研究。在教學方面,長期承擔操作系統及分佈計算等課程的教學工作。主編和翻譯了多本操作系統教材和參考書,包括《UNIX操作系統教程》《UNIX高級編程技術》《UNIX環境高級編程》和《操作系統:設計與實現》等。

目錄大綱

第1章UNIX基礎知識\t1


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