本書是UNIX系統(tǒng)編程的經典教材,并基于最新的UNIX標準進行了更新,其內容完全覆蓋文件、信號、POSIX線程、UDP、Web和客戶機-服務器等相關內容,并對通信、并發(fā)和多線程問題進行了透徹的研究,對復雜的概念進行了全面、完善以及明晰的解釋,并以此而聞名。本書不僅提供了大量實例和練習,還專門設計了有針對性的項目,并給出了參考答案,幫助讀者理解相關的概念,增強應用能力。本書適合作為高等院校計算機專業(yè)教材,也可供軟件開發(fā)人員參考。本書前言前言:本書是1995年PrenticeHall出版的《PracticalUNIXProgramming:AGuidetoCommunication,ConcurrencyandMultithreading》的第2版。為了更好地反映本書的內容,我們修改了書名(英文版)。同上一版相比,除了書名,我們還對許多地方進行了修改。因特網已經成為計算和社會領域中的一個主導因素。我們的個人信息聯網了,我們的軟件經常會受到攻擊。因此,編寫正確的代碼顯得更加重要。在新的版本中,我們盡量去生成能夠正確地處理錯誤和特殊情況的代碼。我們知道,只是聲稱“處理了所有的錯誤”,卻在給出的代碼示例中省略掉錯誤處理,是沒有什么說服力的。但是,錯誤處理使代碼變得更加復雜,我們想盡力使代碼清晰一些。本書對前一版的另一個重大改進就是采用了單一UNIX規(guī)范,在本書中我們稱之為POSIX。我們再也不用為選用哪個廠商的庫函數而發(fā)愁了—現在已有正式的版本了。在編寫本書的過程中,我們盡了最大的努力來遵循這個標準。本書與眾不同之處是含有練習和項目章。實際上,本書就是從一個項目手冊發(fā)展而來的,這個項目手冊是美國國家科學基金課題(NationalScienceFoundationGrant)的一部分。在完成這個項目的初期開發(fā)之后,我們逐漸認識到:完成這個項目所需的資料分散在很多地方—通常可以在那些提供了大量細節(jié)但很少進行概念描述的參考書中找到這些資料。這樣,這本書就逐步演變成一本基于最新UNIX標準的完備的參考書了。本書分為四個部分,每個部分中都包括一些主題章和項目章。主題章以循序漸進的方式涵蓋了特定的資料,其中有很多例子和小練習。本書還針對進程管理、并發(fā)和通信過程中的很多基本概念提供了編程練習(即項目章)。這些編程練習和傳統(tǒng)科學課程中的實驗作用相當。只有通過實踐,才能真正理解書中的概念。這些練習的難度由淺入深,很多練習都只要不到100行的代碼就可以實現。下表對本書的結構進行了總結。有14個主題章,這些主題章與8個項目章相互獨立。第一次通讀本書時可以略過項目章。項目章通過開發(fā)一個擴展的應用將幾個主題章中的資料整合起來。這些項目包含兩個層面:除了說明編程思想之外,還引導讀者去理解與應用相關的更高級的主題。這些項目都是分階段設計的,大多數完整的實現都只需要幾百行代碼。由于不需要編寫大量的代碼,因此讀者可以將注意力集中在對概念的理解而不是代碼的調試上。為了簡化編程,我們提供了網絡通信和日志輸出的庫。對專業(yè)的程序員來說,主題章結尾處的練習提供了基本的練習內容。通常,使用本書的教師可以在一個學期的課程中挑選幾個練習和一個項目章讓學生們實現。每個項目都有很多變化,因此這些項目可以在多個學期中反復使用。讀者可以選擇不同的方式來讀這本書。第一部分中的主題章是學習本書其他部分的基礎。讀完第一部分的主題章之后,讀者就可以按任意的順序來學習第二部分到第四部分了。但后繼各章結尾處有關交互(例如,線程是怎樣與信號交互的)的討論除外。我們假定讀者是一名很好的C程序員,盡管不一定是UNIXC的程序員。讀者應該熟悉C語言編程和基本的數據結構。如果你剛剛接觸UNIX,附錄A中給出了程序開發(fā)的一些必備知識。本書中包括標準函數的概要,在“概要”的右下角列出了用來說明函數的相關標準。知識的更新如此之快,然而書的內容卻是有限的。我們歡迎讀者給我們提出意見和建議。讀者可以給我們發(fā)電子郵件authors@usp.cs.utsa.edu。我們盡了最大的努力來編寫一本無差錯的書。但是,如果你是第一個向我們指出某個錯誤的人,我們會在本書的網站上向你表示誠摯的謝意。我們在Web站http://usp.cs.utsa.edu/usp上提供了與本書相關的信息。本書包含的所有代碼都可以從這個Web站點上下載。譯者序:本書是一本介紹UNIX系統(tǒng)的工作原理以及學習UNIX系統(tǒng)程序編寫方法的經典教材。對于程序員來說,本書同樣是一本不可多得的案頭必備參考書。讀者在掌握了操作系統(tǒng)、C語言以及計算機網絡的基本知識后學習本書,會發(fā)現本書將使讀者對UNIX系統(tǒng)的理解登上一個新的高度,并將讀者編寫多線程和網絡通信程序的能力提高到一個新的境界。本書有以下幾個突出特點:其一,在講述基本概念時,本書圍繞主題設計了大量實例程序和練習來加深讀者對概念的理解;其二,在各部分的最后,作者精心設計了生動有趣的項目來總結各部分的主要內容。這些項目,例如破解命令解釋程序、WWW重定向、因特網音頻廣播、服務器性能等的取材都有很強的實際應用背景,稍加完善就是一個可用的程序;其三,本書采用了最新的UNIX標準:SingleUNIXSpecification,并在書中加入了大量的最新信息,如火星探路者中的優(yōu)先級反轉缺陷等。另外,本書各章末尾處的擴展閱讀也給讀者指出了相關領域經典的或最新的參考資料并進行了細致的評價,對讀者進一步研究提供了很好的指導。如果您希望了解并掌握操作系統(tǒng)接口及其工作原理,我們相信本書將是一本合適的教材及參考書;如果您已經具備了初步的UNIX程序編寫能力,本書將會引領您進入系統(tǒng)程序編寫者的行列;如果您已經是一個熟練的系統(tǒng)程序員了,本書豐富的內容實例、充實的知識架構也一定會讓您對計算機系統(tǒng)的理解有新的升華。本書的第20、21、22章由趙振平翻譯,其他部分由陳涓翻譯。郭傳雄和趙振平校閱了全書。致謝我們非常感謝MikeSpeciner和BobLynch,他們通讀了全部手稿,并提出了很多有益的建議。我們尤其要對MaryLouNohr細心睿智的編輯工作表示感謝。我們還要對NealWagner和RadiaPerlman給予的鼓勵和建議表示感謝。從1988年至今(2003年),我們?yōu)榇髮W本科生和研究生開設了操作系統(tǒng)課程,本書中很多資料都曾作為這些教學課程的一部分使用。學習此課程的學生們都經歷了書稿發(fā)展的不同階段,并對不斷出現的項目進行了實際的測試。他們提供的程序故障、注釋、抱怨和建議都使本書更加出色,并且使我們對這些主題之間的相互聯系有了更深刻的認識。在早期書稿中發(fā)現錯誤的學生有JosephBell、CarlosCardenas、IgorGrinshpan、JasonJendrusch和JamesManion。我們要感謝美國國家科學基金會通過NSF-ILI授權的USE-0950497對我們組建實驗室提供的支持,這樣我們才有機會去開展最初的課程,而這些課程正是本書的基礎。NSF(DUE-975093、DUE-9752165和DUE-0088769)還為開發(fā)那些用來探索和分析操作系統(tǒng)概念的工具提供了支持。我們要感謝PrenticeHall的編輯GregDoench在整個過程中為我們提供的指導,還要感謝我們的出版編輯WilliamMara使此書得以出版。我們用對本書進行了排版,的制作者提供了可以免費使用的軟件,我們還要向他們表達我們的謝意。我們特別要感謝我們的家人,他們給了我們無限的愛和支持,尤其要感謝我們的孩子Nicole和Thomas,他們對這項艱巨的任務表示了熱情和理解。