具體描述
齣版方簡介Publisher Introduction 定價:128.00元 包裝:平裝 版次:2 ISBN:9787115352118 齣版時間:2014-06-01 齣 版 社:人民郵電齣版社 作 者:(美)史蒂文斯(Stevens,W,R,),(美)拉戈(Rago,S.A) 著 UNIX環境高級編程(第3版) 作者簡介Author Biography 作者介紹
W.RichardStevens國際知名的UNIX和網絡專傢,備受贊譽的技術作傢。生前著有多部經典的傳世之作,包括《UNIX網絡編程》(兩捲本)、《TCP/IP詳解》(三捲本)和本書第1版。
StephenA.Rago資深UNIX程序員,目前任NEC美國實驗室存儲係統集團研究員。之前是貝爾實驗室的UNIX係統V版本4的開發人員之一。著有《UNIX係統V網絡編程》,並曾擔任本書第1版的技術審校和第2版的共同作者。
譯者介紹
戚正偉博士,上海交通大學軟件學院副教授,微軟亞洲研究院(2008)和美國CMU大學(2011-2012)訪問學者。研究方嚮為係統軟件和程序分析,著有《NewBluePill深入理解硬件虛擬機》和《嵌入式GIS開發及應用》等書。
張亞英博士,同濟大學電子與信息工程學院計算機係副教授,研究方嚮為分布與移動計算、嵌入式係統以及係統軟件等。.
尤晉元上海交通大學計算機科學及工程係教授、博士生導師。在科研方麵,主要從事操作係統和分布對象計算技術方麵的研究。在教學方麵,長期承擔操作係統及分布計算等課程的教學工作。主編和翻譯瞭多本操作係統教材和參考書,包括《UNIX操作係統教程》、《UNIX高級編程技術》、《UNIX環境高級編程》和《操作係統:設計與實現》等。 編輯推薦Editorial Reviews 20多年來,嚴謹的C程序員都是依靠一本書來深入瞭解驅動UNIX和Linux內核的編程接口的實用知識的,這本書就是W.RichardStevens所著的《UNIX高級環境編程》。現在,Stevens的同事SteveRago徹底更新瞭這本經典著作。新的第3版支持當今領先的係統平颱,反映瞭*進展和**實踐,並且符閤**的SingleUNIXSpecification第4版(SUSv4)。
Rago保留瞭使本書前版成為經典之作的精髓和方法。他在Stevens原著的基礎上,從基礎的文件、目錄和進程講起,並給諸如信號處理和終端I/O之類的先進技術保留較大的篇幅。他還深入討論瞭綫程和多綫程編程、使用套接字接口驅動進程間通信(IPC)等方麵的內容。
這一版涵蓋瞭70多個**版POSIX.1標準的新增接口,包括POSIX異步I/O、鏇轉鎖、屏障(barrier)和POSIX信號量。此外,這一版刪除瞭許多過時的接口,保留瞭一些廣泛使用的接口。書中幾乎所有實例都已經在目前*主流的4個平颱上測試過,包括Solaris10、MacOSX10.6.8(Darwin10.8.0)、FressBSD8.0、Ubuntu12.04(基於Linux3.2內核)。
與前兩版一樣,讀者仍可以通過實例學習,這些實例包括瞭1萬多行可下載的ISOC源代碼,書中通過簡明但完整的程序闡述瞭400多個係統調用和函數,清楚地說明它們的用法、參數和返迴值。為瞭使讀者能融會貫通,書中還提供瞭幾個貫穿整章的案例,每個案例都根據現在的技術環境進行瞭全麵更新。
本書幫助瞭幾代程序員寫齣強大、高性能、可靠的代碼。第3版根據當今主流係統進行更新,更具實用價值。 目錄Catalog 第1章 UNIX基礎知識
1.1 引言
1.2 UNIX體係結構
1.3 登錄
1.4 文件和目錄
1.5 輸入和輸齣
1.6 程序和進程
1.7 齣錯處理
1.8 用戶標識
1.9 信號
1.10 時間值
1.11 係統調用和庫函數
1.12 小結
習題
第2章 UNIX標準及實現
2.1 引言
2.2 UNIX標準化
2.2.1 ISO C
2.2.2 IEEE POSIX
2.2.3 Single UNIX Specification
2.2.4 FIPS
2.3 UNIX係統實現
2.3.1 SVR4
2.3.2 4.4BSD
2.3.3 FreeBSD
2.3.4 Linux
2.3.5 Mac OS X
2.3.6 Solaris
2.3.7 其他UNIX係統
2.4 標準和實現的關係
2.5 限製
2.5.1 ISO C限製
2.5.2 POSIX限製
2.5.3 XSI限製
2.5.4 函數sysconf、pathconf和fpathconf
2.5.5 不確定的運行時限製
2.6 選項
2.7 功能測試宏
2.8 基本係統數據類型
2.9 標準之間的衝突
2.10 小結
習題
第3章 文件I/O
3.1 引言
3.2 文件描述符
3.3 函數open和openat
3.4 函數creat
3.5 函數close
3.6 函數lseek
3.7 函數read
3.8 函數write
3.9 I/O的效率
3.10 文件共享
3.11 原子操作
3.12 函數dup和dup2
3.13 函數sync、fsync和fdatasync
3.14 函數fcntl
3.15 函數ioctl
3.16 /dev/fd
3.17 小結
部分目錄...
精彩書評Reviews ★本書第1版連同Stevens所著的係列網絡技術書籍,被公認為匠心獨具的名著,成為極其暢銷的作品……總之,這是一本彌足珍貴的經典著作的更新版。
——Dennis Ritchie,圖靈奬得主,UNIX操作係統和C語言之父
★對任何一個嚴謹的、專業的UNIX係統程序員而言,本書都是不可或缺的參考書。Rago更新和擴展瞭Stevens的經典著作,並保持瞭原書的風貌。書中利用清晰的實例演示瞭API的使用過程,還提到瞭許多在不同UNIX係統實現上編程時需要注意的陷阱,並指齣如何使用相關的標準(如POSIX 1003.1 2004版和Single UNIX Specification第3版)來避免這些錯誤。
——Andrew Josey, The Open Group標準部門主管,POSIX 1003.1標準工作組主席
★UNIX編程經典之一。
——Eric S. Raymond,《UNIX編程藝術》作者
★Stephen Rago的更新版本對於使用眾多UNIX及相關操作係統環境的廣大專業用戶來說是一個遲來的喜訊。這一版不僅刪除瞭過時的接口,吸納瞭較新的開發接口,還根據UNIX及類UNIX操作係統環境的幾種主流實現發布的新版本全麵更新瞭所有主題、實例和應用的背景。難能可貴的是,這一版本還保持瞭經典的第1版的風格和品位。
——Mukesh Kacker,Pronto Networks公司聯閤創始人和前任CTO
★本書對於任何在UNIX係統上編寫程序的開發人員來說都是非常重要的參考書。當我想要瞭解或者重新迴顧各種係統接口時,這本書是求助工具。Stephen Rago成功地修訂瞭本書,使其與新的操作係統(如GNU/Linux和蘋果的OS X)相容,並保持瞭第1版易讀和實用的特質。它將永遠擺放在我桌上隨手可及的位置。
——Benjamin Kuperman博士,斯沃斯莫爾學院
★這是每一位嚴謹的UNIX C程序員必備的書籍。它深入、全麵、清晰的解釋是無可匹敵的。
——UniForum Monthly
★從W. Richard Stevens的這本書中可以找到更多易於理解的、詳盡的UNIX係統內部細節。這本書包含瞭大量實際的例子,對係統編程工作非常有益。
——RS/Magazine 精彩書摘Excerpt 由於1003.1標準說明瞭一個接口(interface)而不是一種實現(implementation),所以並不區分係統調用和庫函數。所有在標準中的例程都被稱為函數。
標準是不斷演進的,1003.1標準也不例外。該標準的1988版,即IEEE標準1003.1-1988經修改後遞交給IS0,它沒有增加新的接口或功能,但修訂瞭文本。最終的文檔作為IEEE標準1003.1-1990正式齣版[IEEE 1990],這也就是國際標準ISO/IEC 9945-1:1990。該標準通常稱為POSIX.1,本書將使用此術語來錶示不同版本的標準。
IEEE 1003.1工作組此後繼續對這一標準做瞭更多修改。1996年,該標準的修訂版發布,它包括瞭1003.1.1990、1003.1b-1993實時擴展標準以及被稱為pthreads的多綫程編程接口(POSIX綫程),這就是國際標準IS0/IEC 9945-1:1996。1999年齣版瞭IEEE標準1003.1d-1999,其中增加瞭更多實時接口。一年後,齣版瞭IEEE標準l003.1j-2000和1003.1q-2000,前者包含瞭更多實時接口,後者增加瞭標準在事件跟蹤方麵的擴展。
2001年的1003.1版本與以前各版本有較大的差彆,它組閤瞭多個1003.1的修正、1003.2標準以及Single UNIX Specificaiton(SUS)第2版的若乾部分(對於SUS,後麵將進行更多說明),這形成瞭IEEE標準1003.1-2001,它包括下列幾個標準。
ISO/IEC 9945-1(IEEE標準l003.1-1996),包括
IEEE標準1003.1-1990
IEEE標準1003.1b-1993(實時擴展)
IEEE標準1003.1c-1995(pthreads)
IEEE標準1003.1i-1995(實時技術勘誤錶)
IEEE P1003.1a草案(係統接口修正)
IEEE標準1003.1d-1999(高級實時擴展)
IEEE標準1003.1j-2000(更多高級實時擴展)
IEEE標準1003.1q-2000(跟蹤)
部分IEEE標準1003.1g-2000(協議無關接口)
ISO/IEC 9945-2(IEEE標準1003.2-1993)
IEEE P1003.2b草案(shell及實用程序的修正)
IEEE標準1003.2d.1994(批處理擴展)。
…… 前言/序言Foreword/Preface 引言
從我*次修訂《UNIX環境高級編程》一書以來已經快有8年瞭,期間發生瞭很多的變化。
· 在齣版第2版之前,Open Group完成瞭2004版的Single UNIX Specification,它涵蓋瞭兩套勘誤錶的修改。2008年,Open Group完成瞭新版的Single UNIX Specification,它更新瞭基本定義,添加瞭新的接口,並且去除瞭棄用的接口。這套規範被稱為2008年版的POSIX.1,其中包含第7版的基本規範,並在2009年發行。2010年,它與更新後的curses接口捆綁,一起作為Single UNIX Specification第4版(SUSv4)進行再版。
· 運行在Intel處理器上的Mac OS X操作係統的10.5、10.6和10.8版,被Open Group認證為UNIX係統。
· 蘋果公司停止瞭PowerPC平颱上Mac OS X的開發。在10.6發行版(Snow Leopard)之後隻針對x86平颱發布瞭新的操作係統版本。
· Solaris操作係統以開源的形式發布,試圖與FreeBSD、Linux和Mac OS X遵循的開源模式在聲望上一爭高下。在2010年,Oracle收購瞭Sun Microsystems之後,OpenSolaris的開發被終止。作為替代,Solaris社區組建瞭Illumos項目來繼續基於OpenSolaris的開源開發。
· 2011年,C語言標準被更新,但是因為係統並未能跟上其變化,本書中依然參照1999版。
*重要的是,在第2版中使用的平颱已經過時瞭。本書這一版中涉及以下平颱。
(1)FreeBSD 8.0,前身是加州大學伯剋利分校計算機係統研究組發布的4.4BSD係統,運行在32位Intel Pentium處理器上。
(2)Linux 3.2.0(Ubuntu 12.04發布版),這是一個免費的類UNIX操作係統,運行在64位的Intel Core i5 處理器上。
(3)Apple Mac OS X 10.6.8版(Darwin 10.8.0),運行在64位Intel Core2 Duo處理器上(Darwin基於FreeBSD和Mach)。我選擇從PowerPC平颱轉嚮Intel平颱,是因為*新版的Mac OS X不再支持PowerPC平颱。這次選擇帶來的缺點是涉及的處理器傾斜嚮瞭Intel,而當討論到異構性問題時,涉及的處理器如果能在字節序和整數大小等方麵有不同的性質將是很有好處的。
(4)Solaris 10,Sun Microsystems(現在的Oracle)的System V Release 4的派生係統,運行在64位UltraSPARC IIi處理器上。
與第2版的不同
*大的變化之一是POSIX.1-2008中的Single UNIX Specification棄用瞭一些STREAMS相關接口。這是準備在該標準的未來版本中去掉全部這些接口過程的*步。因此,我已經不情願地在這一版中刪除瞭STREAMS的內容。這是一個不幸的變化,因為STREAMS接口為socket接口提供瞭一個很好的對照,並且在很多方麵更為靈活。不可否認,當談論到STREAMS時我並非絕對公正,但是毫無疑問的是,在現有係統中它的分量已經減輕。
· Linux基礎係統中未包含STREAMS,雖然添加該功能的包(LiS和OpenSS7)是可用的。
· 雖然Solaris 10中包含瞭STREAMS,但是Solaris 11的socket實現並沒有構建在STREAMS之上。
· Mac OS X不包含STREAMS支持。
· FreeBSD不包含STREAMS支持(也從未包含過)。
隨著STREAMS相關內容的去除,新的主題變得有機會替代它,例如POSIX異步I/O。
在本書第2版中,Linux版本是基於2.4版的。在這次的版本中,我們已經更新到瞭3.2版。兩個版本的*大不同之一是綫程係統。在Linux 2.4和Linux 2.6之間,綫程的實現變為Native POSIX Thread Library(NPTL)。NPTL使得Linux綫程的行為與其他係統的綫程更加相似。
總的來說,這次的版本涵蓋瞭超過70個新的接口,包括處理異步I/O、自鏇鎖、屏障和POSIX信號量等等接口。除瞭一些普遍使用的接口被保留,大多數棄用的接口均被刪除。
緻謝
許多讀者為第2版寄來瞭評論和錯誤報告。我很感謝他們提高瞭第2版的準確性。下麵提及的各位是*早提齣建議或者指齣錯誤的:Seth Arnold、Luke Bakken、Rick Ballard、Johannes Bittner、David Bronder、Vlad Buslov、Peter Butler、Yuching Chen、Mike Cheng、Jim Collins、Bob Cousins、Will Dennis、Thomas Dickey、Lo·c Domaigné、Igor Fuksman、Alex Gezerlis、M. Scott Gordon、Timothy Goya、Tony Graham、Michael Hobgood、Michael Kerrisk、Youngho Kwon、Richard Li、Xueke Liu、Yun Long、Dan McGregor、Dylan McNamee、Greg Miller、Simon Morgan、Harry Newton、Jim Oldfield、Scott Parish、Zvezdan Petkovic、David Reiss、Konstantinos Sakoutis、David Smoot、David Somers、Andriy Tkachuk、Nathan Weeks、Florian Weimer、Qingyang Xu和 Michael Zalokar。
技術審校者也提高瞭內容的準確性,感謝Steve Albert、Bogdan Barbu和Robert Day。特彆感謝Geoff Clare和Andrew Josey為Single UNIX Specification的升華和第2章的準確性提供瞭幫助。另外,感謝Ken Thompson對曆史問題做齣瞭解答。
我得再一次說,與Addison-Wesley的工作人員的閤作非常愉快。感謝Kim Boedigheimer、Romny French、John Fuller、Jessica Goldstein、Julie Nahil和Debra Williams-Cauley,此外,感謝Jill Hobbs在這段時間提供瞭她的專業審稿能力。
*後,感謝我的傢人對我在這次再版上花費瞭如此多時間給予的理解。
和以前一樣,我非常歡迎讀者發來郵件,發錶評論,提齣建議,訂正錯誤。
《精通Linux係統管理與應用開發》 內容概述: 本書是一本深入探討Linux操作係統核心機製、係統管理技術以及圍繞Linux平颱進行高效應用開發的實踐指南。它旨在為讀者提供一個全麵而深入的視角,理解Linux的底層工作原理,掌握係統管理的必備技能,並解鎖在Linux環境下進行軟件開發的高級技巧。全書內容涵蓋從Linux係統啓動流程、進程管理、內存管理、文件係統原理,到網絡服務配置、安全加固,以及Shell腳本、Python、C/C++等主流開發語言在Linux環境下的應用開發實踐。本書尤其強調理論與實踐的結閤,通過大量的實例演示和代碼示例,幫助讀者快速掌握Linux係統的精髓,並能獨立完成復雜的係統管理任務和高質量的應用開發。 核心內容詳解: 第一部分:Linux係統深度解析 1. Linux內核的奧秘: 啓動流程剖析: 詳細解讀從BIOS/UEFI到Bootloader(GRUB)、Kernel加載、Init進程啓動的完整過程。理解Kernel的初始化步驟,包括設備驅動的加載、內存的分配、中斷處理機製的建立等。 進程管理與調度: 深入理解Linux進程的生命周期、PCB(Process Control Block)的結構與作用、進程間通信(IPC)機製(如管道、消息隊列、共享內存、信號量、套接字)的原理與應用。探討Linux進程調度算法(如CFS、O(1))的工作原理,以及如何通過係統工具(如`top`、`htop`、`ps`)監控和調整進程行為。 內存管理機製: 講解虛擬內存的概念,包括頁錶、TLB、缺頁中斷等。分析Linux如何管理物理內存,包括夥伴係統(Buddy System)、 slab 分配器等。介紹內存映射(mmap)的原理與應用,以及如何使用工具(如`free`、`vmstat`、`/proc/meminfo`)診斷內存相關問題。 文件係統原理與實踐: 深入理解Linux文件係統的層級結構,以及Ext4、XFS、Btrfs等主流文件係統的設計理念和特點。講解文件係統的掛載、卸載、inode、dentry、超級塊等核心概念。探討文件I/O的優化技術,如緩衝I/O、直接I/O,以及`sync`、`fsync`等係統調用的作用。 設備驅動模型: 介紹Linux設備驅動的通用模型,包括字符設備、塊設備、網絡設備驅動的開發基礎。理解設備文件(`/dev`)的作用,以及udev在設備管理中的角色。 2. 係統服務與配置: Systemd的現代管理: 全麵講解Systemd作為新一代Linux係統和服務管理器,其單元(Unit)的概念(Service, Target, Mount, Socket等)、依賴關係、啓動順序控製。學習如何編寫和管理`.service`文件,實現服務的啓停、重啓、日誌管理。 網絡服務搭建與優化: 搭建和配置常用的網絡服務,如SSH(安全遠程訪問)、HTTP(Web服務器,如Apache/Nginx)、DNS(域名解析)、DHCP(動態IP分配)。深入理解TCP/IP協議棧在Linux中的實現,以及`netstat`、`ss`、`ip`等命令的使用。 日誌係統與監控: 理解`rsyslog`或`journald`的日誌收集、存儲和分析機製。學習如何配置日誌級彆、輪轉策略,以及使用`grep`、`awk`、`sed`等工具進行日誌分析。介紹常用的係統監控工具(如Nagios, Zabbix, Prometheus)的基本概念和部署。 第二部分:Linux下的高效開發實踐 1. Shell腳本編程精通: Bash高級特性: 深入掌握Bash的變量、運算符、條件判斷、循環結構、函數。理解命令替換、進程替換、here document等高級用法。 常用命令組閤與自動化: 學習如何巧妙組閤`find`, `grep`, `sed`, `awk`, `xargs`等強大命令,實現文件處理、文本分析、任務自動化。 腳本調試與錯誤處理: 掌握`set -x`, `set -e`等選項,以及`trap`命令,編寫健壯的Shell腳本。 實際應用案例: 通過實例演示如何編寫Shell腳本實現係統備份、日誌清理、服務監控、批量文件操作等自動化任務。 2. Python在Linux開發中的應用: Python與係統交互: 學習使用Python的`os`、`sys`、`subprocess`模塊與Linux係統進行交互,執行Shell命令,管理文件和目錄,創建進程。 網絡編程: 利用Python的`socket`模塊進行底層的TCP/UDP網絡編程,以及使用`requests`庫進行HTTP通信。 Web開發框架: 簡要介紹Flask或Django等Python Web框架,如何在Linux環境下部署和運行Web應用。 自動化運維腳本: 演示如何使用Python編寫自動化運維腳本,如配置管理、服務部署、數據采集等。 3. C/C++與Linux係統編程: 係統調用(System Calls): 詳細講解Linux係統調用的概念,以及如何通過C/C++語言進行係統調用,實現進程創建(`fork`)、執行(`exec`)、綫程創建(`pthread`)、文件操作(`open`, `read`, `write`, `close`)、信號處理等。 多綫程與並發: 深入理解POSIX綫程(pthreads)的創建、同步(互斥鎖、條件變量)、通信和管理。學習如何編寫高性能的多綫程應用程序。 網絡編程(Socket API): 掌握Linux Socket API(Berkeley Sockets)的使用,包括套接字的創建、綁定、監聽、連接、數據傳輸以及並發服務器的實現。 內存模型與同步: 探討Linux下的內存模型,以及在並發環境下如何正確使用原子操作、內存屏障等機製保證數據的一緻性。 性能分析與優化: 介紹使用`gprof`, `perf`等工具進行C/C++程序的性能剖析,以及優化內存訪問、減少鎖競爭等常見優化策略。 第三部分:Linux係統安全與性能調優 1. Linux係統安全基礎: 用戶與權限管理: 深入理解Linux的用戶、組、文件權限模型(rwx),以及`sudo`的配置和使用。 SSH安全加固: 配置SSH服務器,禁用root登錄,使用密鑰認證,限製可登錄用戶等。 防火牆配置: 使用`iptables`或`firewalld`配置Linux防火牆,實現包過濾、端口控製。 SELinux與AppArmor: 介紹強製訪問控製(MAC)的概念,以及SELinux和AppArmor的基本原理和使用方法。 安全審計與入侵檢測: 瞭解`auditd`等安全審計工具,以及Fail2Ban等基礎入侵檢測工具的部署。 2. 係統性能瓶頸分析與調優: CPU性能調優: 分析CPU使用率、上下文切換、負載過高等問題。學習使用`top`、`vmstat`、`mpstat`、`perf`等工具。 內存性能調優: 診斷內存泄漏、Swap使用過高、緩存失效等問題。 I/O性能調優: 分析磁盤I/O瓶頸,包括IOPS、吞吐量、延遲。學習使用`iostat`、`iotop`、`blktrace`等工具。 網絡性能調優: 診斷網絡延遲、丟包、吞吐量不足等問題。 內核參數調優: 介紹`sysctl`命令,以及`/proc/sys`目錄下常用內核參數的含義和調優方法(如TCP/IP棧參數、文件係統緩存參數)。 目標讀者: 希望深入理解Linux操作係統底層機製的開發者、係統管理員。 需要掌握Linux係統管理技能,負責服務器部署、維護和優化的IT專業人士。 希望在Linux平颱上進行高性能應用開發的軟件工程師,包括後端開發、嵌入式開發、係統工具開發等。 計算機科學和相關專業的學生,需要打牢Linux係統和編程基礎。 任何對Linux操作係統感興趣,希望提升自身在Linux環境下工作效率和技術能力的讀者。 本書特色: 理論與實踐並重: 深入講解Linux核心概念,並輔以大量實際操作和代碼示例。 循序漸進: 從基礎概念到高級主題,層層遞進,適閤不同程度的讀者。 實戰導嚮: 專注於解決Linux係統管理和應用開發中的實際問題。 技術全麵: 涵蓋係統底層、網絡服務、腳本編程、主流開發語言等多個維度。 工具豐富: 介紹並演示多種Linux下常用的係統管理和開發工具。 通過學習本書,讀者將能夠自信地駕馭Linux係統,從容應對各種復雜的係統管理任務,並開發齣高質量、高性能的Linux應用程序。