出版時間:2008-7 出版社:人民郵電出版社 作者:Jon Masters,Richard Blum 頁數(shù):390 字數(shù):660000 譯者:陳健
Tag標簽:無
內容概要
本書是Linux 程序設計領域的一部力作,講解了大量程序員需要掌握的關鍵知識點,包括Linux 開發(fā)中的基本工具、Linux 系統(tǒng)編程、Linux 桌面開發(fā)以及Linux 與Web 開發(fā)。書中包括大量有益的經驗之談和富于啟發(fā)的示例?! ”緯饕槍σ延幸欢↙inux 開發(fā)經驗或者從其他平臺轉到Linux 平臺的專業(yè)程序員,同樣也適合想更多了解系統(tǒng)以解決實際問題的Linux 使用者。
作者簡介
Jon Masters著名Linux內核工程師。目前效力于Red Hat公司。13歲取得計算機科學學士學位,創(chuàng)造了英國記錄。他精通Linux內核引擎、Unix系統(tǒng)管理、基于Linux的嵌入式系統(tǒng)開發(fā),而且在網絡、安全等領域也頗有造詣。目前正在負責維護Module—init—tools—Linux官方的一個工具包,
書籍目錄
第1章 Linux簡介 1.1 Linux發(fā)展簡史 1.1.1 GNU項目 1.1.2 Linux內核 1.1.3 Linux發(fā)行版 1.1.4 自由軟件與開放源碼 1.2 開發(fā)起步 1.2.1 選擇一個Linux發(fā)行版 1.2.2 安裝Linux發(fā)行版 1.2.3 沙盒和虛擬化技術 1.3 Linux社區(qū) 1.3.1 Linux用戶組 1.3.2 郵件列表 1.3.3 IRC 1.3.4 私有社區(qū) 1.4 關鍵差別 1.4.1 Linux是模塊化的 1.4.2 Linux是可移植的 1.4.3 Linux是通用的 1.5 本章總結 第2章 工具鏈 2.1 Linux開發(fā)過程 2.1.1 使用源代碼 2.1.2 配置本地環(huán)境 2.1.3 編譯源代碼 2.2 GNU工具鏈的組成 2.3 GNU二進制工具集 2.3.1 GNU匯編器 2.3.2 GNU連接器 2.3.3 GNU objcopy和objdump 2.4 GNU Make 2.5 GNU調試器 2.6 Linux內核和GNU工具鏈 2.6.1 內聯(lián)匯編 2.6.2 屬性標記 2.6.3 定制連接器腳本 2.7 交叉編譯 2.8 建立GNU工具鏈 2.9 本章總結 第3章 可移植性 3.1 可移植性的需要 3.2 Linux的可移植性 3.2.1 抽象層 3.2.2 Linux發(fā)行版 3.2.3 建立軟件包 3.2.4 可移植的源代碼 3.3 硬件可移植性 3.3.1 位兼容 3.3.2 字節(jié)序中立 3.3.3 字節(jié)序的門派之爭 3.4 本章總結 第4章 軟件配置管理 4.1 SCM的必要性 4.2 集中式開發(fā)與分散式開發(fā) 4.3 集中式工具 4.3.1 CVS 4.3.2 Subversion 4.4 分散式工具 4.4.1 Bazaar-NG 4.4.2 Linux內核SCM 4.5 集成化SCM工具 4.6 本章總結 第5章 網絡編程 5.1 Linux套接字編程 5.1.1 套接字 5.1.2 網絡地址 5.1.3 使用面向連接的套接字 5.1.4 使用無連接套接字 5.2 傳輸數(shù)據 5.2.1 數(shù)據報與字節(jié)流 5.2.2 標記消息邊界 5.3 使用網絡編程函數(shù)庫 5.3.1 libCurl函數(shù)庫 5.3.2 使用libCurl庫 5.4 本章總結 第6章 數(shù)據庫 6.1 持久性數(shù)據存儲 6.1.1 使用標準文件 6.1.2 使用數(shù)據庫 6.2 Berkeley DB軟件包 6.2.1 下載和安裝 6.2.2 編譯程序 6.2.3 基本數(shù)據處理 6.3 PostgreSQL數(shù)據庫服務器 6.3.1 下載和安裝 6.3.2 編譯程序 6.3.3 創(chuàng)建一個應用程序數(shù)據庫 6.3.4 連接服務器 6.3.5 執(zhí)行SQL命令 6.3.6 使用參數(shù) 6.4 本章總結 第7章 內核開發(fā) 7.1 基本知識 7.1.1 背景先決條件 7.1.2 內核源代碼 7.1.3 配置內核 7.1.4 編譯內核 7.1.5 已編譯好的內核 7.1.6 測試內核 7.1.7 包裝和安裝內核 7.2 內核概念 7.2.1 一句警告 7.2.2 任務抽象 7.2.3 虛擬內存 7.2.4 不要恐慌 7.3 內核編程 7.4 內核開發(fā)過程 7.4.1 git: 傻瓜內容跟蹤器 7.4.2 Linux內核郵件列表 7.4.3 “mm”開發(fā)樹 7.4.4 穩(wěn)定內核小組 7.4.5 LWN:Linux每周新聞 7.5 本章總結 第8章 內核接口 8.1 什么是接口 8.2 外部內核接口 8.2.1 系統(tǒng)調用 8.2.2 設備文件抽象 8.2.3 內核事件 8.2.4 忽略內核保護 8.3 內部內核接口 8.3.1 內核API 8.3.2 內核ABI 8.4 本章總結 第9章 Linux內核模塊 9.1 模塊工作原理 9.1.1 擴展內核命名空間 9.1.2 沒有對模塊兼容性的保證 9.2 找到好的文檔 9.3 編寫Linux內核模塊 9.3.1 開始之前 9.3.2 基本模塊需求 9.3.3 日志記錄 9.3.4 輸出的符號 9.3.5 分配內存 9.3.6 鎖的考慮 9.3.7 推遲工作 9.3.8 進一步閱讀 9.4 分發(fā)Linux內核模塊 9.4.1 進入上游Linux內核 9.4.2 發(fā)行源代碼 9.4.3 發(fā)行預編譯模塊 9.5 本章總結 第10章 調試 10.1 調試概述 10.2 基本調試工具 10.2.1 GNU調試器 10.2.2 Valgrind 10.3 圖形化調試工具 10.3.1 DDD 10.3.2 Eclipse 10.4 內核調試 10.4.1 不要驚慌! 10.4.2 理解oops 10.4.3 使用UML進行調試 10.4.4 一件軼事 10.4.5 關于內核調試器的注記 10.5 本章總結 第11章 GNOME開發(fā)者平臺 11.1 GNOME函數(shù)庫 11.1.1 Glib 11.1.2 GObject 11.1.3 Cairo 11.1.4 GDK 11.1.5 Pango 11.1.6 GTK+ 11.1.7 libglade 11.1.8 GConf 11.1.9 GStreamer 11.2 建立一個音樂播放器 11.2.1 需求 11.2.2 開始:主窗口 11.2.3 建立GUI 11.3 本章總結 第12章 自由桌面項目 12.1 D-BUS:桌面總線 12.1.1 什么是D-Bus 12.1.2 D-Bus基礎 12.1.3 D-Bus方法 12.2 硬件抽象層 12.2.1 使硬件可以即插即用 12.2.2 HAL設備對象 12.3 網絡管理器 12.4 其他自由桌面項目 12.5 本章總結 第13章 圖形和音頻 13.1 Linux和圖形 13.1.1 X視窗 13.1.2 開放式圖形庫 13.1.3 OpenGL應用工具包 13.1.4 簡單直接媒介層 13.2 編寫OpenGL應用程序 13.2.1 下載和安裝 13.2.2 編程環(huán)境 13.2.3 使用GLUT庫 13.3 編寫SDL應用程序 13.3.1 下載和安裝 13.3.2 編程環(huán)境 13.3.3 使用SDL庫 13.4 本章總結 第14章 LAMP 14.1 什么是LAMP 14.1.1 Apache 14.1.2 MySQL 14.1.3 PHP 14.1.4 反叛平臺 14.1.5 評價LAMP平臺 14.2 Apache 14.2.1 虛擬主機 14.2.2 安裝和配置PHP 5 14.2.3 Apache Basic認證 14.2.4 Apache與SSL 14.2.5 SSL與HTTP認證的整合 14.3 MySQL 14.3.1 安裝MySQL 14.3.2 配置和啟動數(shù)據庫 14.3.3 修改默認密碼 14.3.4 MySQL客戶端接口 14.3.5 關系數(shù)據庫 14.3.6 SQL 14.3.7 關系模型 14.4 PHP 14.4.1 PHP語言 14.4.2 錯誤處理 14.4.3 異常錯誤處理 14.4.4 優(yōu)化技巧 14.4.5 安裝額外的PHP軟件 14.4.6 日志記錄 14.4.7 參數(shù)處理 14.4.8 會話處理 14.4.9 單元測試 14.4.10 數(shù)據庫和PHP 14.4.11 PHP框架 14.5 DVD庫 14.5.1 版本1:開發(fā)者的噩夢 14.5.2 版本2:使用DB數(shù)據層的基本應用程序 14.5.3 版本3:重寫數(shù)據層,添加日志記錄和異常 14.5.4 版本4:應用模板框架 14.6 本章總結
章節(jié)摘錄
第1章 Linux簡介為Linux編寫軟件的一個最大障礙是弄明I芻Linux是什么和它不是什么。不同的人對Linux有著不同的理解。雖然如今大多數(shù)用戶都隨意地將整個基于Linux的系統(tǒng)稱為Linux,但從技術角度來說,Linux本身是由芬蘭人LinusTorvalds編寫的一個操作系統(tǒng)內核。在短短幾年時間里,Linux迅速發(fā)展并被全球一些最大的企業(yè)和最強大的計算機用戶所廣泛接受。Linux現(xiàn)在已成為一個提供高收益和企業(yè)質量的操作系統(tǒng)。它既用于一些最大型的超級計算機,也用在許多你根本不會想到的底層由Linux支持的最小型裝置中。然而,這樣一個在現(xiàn)代計算機領域中流行的大品牌卻并不屬于任何一家公司。Linux之所以會這么成功,是因為有數(shù)以千計來自世界各地的開發(fā)者在堅持不懈地努力來完善它。這些開發(fā)者和你一樣,對編寫高質量的軟件有濃厚的興趣,并從Linux社區(qū)中獲取他人的經驗。不管Linux對你意味著什么,你選擇本書是因為你想了解更多的有關如何成為一位專業(yè)Linux程序員的知識。當你準備開始這次學習之旅時,你將發(fā)現(xiàn)如果你對不同版本的Linux系統(tǒng)有所了解,知道如何開始對它們進行開發(fā),并且清楚Linux開發(fā)和目前市場上其他流行平臺的開發(fā)有何不同,將會對你的學習有很大的幫助。如果你已是一位Linux專家,那么只需略讀本章即可。如果你想成為一位Linux專家,本章將會為你提供一些有用的指導。在本章中,你將站在專業(yè)程序員的角度來學習什么是Linux以及Linux發(fā)行版的各個組件是如何組合在一起的。你將學習Linux系統(tǒng)上所用的大多數(shù)自由/開放源碼軟件(FLoSS)的開發(fā)過程,并找到大量提供開放源碼革命動力的在線社區(qū)。最后,你還將了解至JJLinux與你之前遇到的其他操作系統(tǒng)的一些不同之處——我們將在本書的其余部分介紹更多這方面的內容。1.1 Linux發(fā)展簡史Linux有一個非常多樣而有趣的歷史,它的歷史可能比你最初想象的要早得多。事實上,Linux的繼承歷史跨越了30年,可以從20世紀70年代最早的UNIX系統(tǒng)算起。這一事實不只是與執(zhí)著的Linux狂熱者有關,對讀者來說也很重要,因為它至少讓你對目前接觸到的現(xiàn)代Linux系統(tǒng)的獨特歷史有一個大致的了解。通過介紹這些歷史能讓你更好地理解將Linux和目前市場上的其他操作系統(tǒng)區(qū)分開來的細節(jié)特征,并有助于使Linux的開發(fā)更加有趣。Linux本身的工作最早始于1991年夏天,但早在Linux存在之前,就有了GNU項目。這個項目已花費了lof年的時問來創(chuàng)建很多必要的自由軟件組件,其目的就是為了能創(chuàng)建一個完全自由的操作系統(tǒng),如Linux。如果沒有GNU項目,就不會誕生Linux;同樣,如果沒有Linux,你可能也不會立刻去閱讀GNU項目。這兩個項目彼此之間互相受益,正如你將要在本書所要討論的主題中發(fā)現(xiàn)的那樣。1.1.1 GNU項目1983年,那時的RichardStallman(也稱為RMS)還在麻省理工學院的人工智能實驗室工作。直到那時為止,許多軟件應用程序還是以源代碼的形式提供,或有源代碼可用,以便用戶在必要的時候針對自己的系統(tǒng)進行修改。但從那時開始,已存在一種日益增長的趨勢,即軟件廠商只發(fā)行二進制版本的軟件應用程序。軟件的源代碼很快變成了公司的“商業(yè)機密”,并受到高度保護——開放源碼的開發(fā)者通常將這些源代碼稱為“秘笈”。GNU項目最初的目標是通過使用必要的工具從源代碼開始創(chuàng)建一個自由的類UNIX操作系統(tǒng)。該項目花了10多年的時間創(chuàng)建了所需的大多數(shù)工具,包括GCC編譯器、GNUemacs文本編輯器和數(shù)十個其他的工具和文檔。其中許多工具都以它們的高品質和豐富的功能而聞名,例P口Gcc和GNU調試器。GNU享有許多早期的成就,但它在20世紀80年代缺少了一個最關鍵的組件。它沒有自己的內核,即操作系統(tǒng)的核心,而是需要用戶在已有的商業(yè)操作系統(tǒng),如專有的UNIX上安裝GNU2L具。雖然這并不會對許多在他們自己的專用系統(tǒng)上使用GNUl具的用戶造成什么影響,但如果GNU項目沒有自己的內核,它就不是一個完整的項目。在Linux出現(xiàn)之前,針對是否開發(fā)這樣一個內核(如發(fā)展中的GNUHURD)的激烈爭論長期以來一直存在著。Linux從來沒有真正成為RichardStallman所設想的GNU操作系統(tǒng)的一部分。事實上,盡管Linux已成為新一代用戶和開發(fā)者的寵兒,并且是迄今為止更受歡迎的內核,GNU項目還是一直主張在其概念性的GNU系統(tǒng)中使用GNUHURD微內核。盡管如此,仍然會偶爾看到在提及一個完整的Linux系統(tǒng)時使用術語“GNU/Linux”,這是對在構建和運行任何一個現(xiàn)代Linux系統(tǒng)中扮演重要角色的眾多GNUI具的認可。1.1.2 Linux,內核Linux內核的誕生遠晚于GNU項目本身,在RichardStallman發(fā)表他的最初宣言之后的10多年后它才出現(xiàn)。在此之前,已有一些可供選擇的操作系統(tǒng)被開發(fā)出來,包括HURD微內核(在狂熱的內核開發(fā)者社區(qū)之外只贏得了有限的大眾關注)和FhAndrewTanenbaum編寫的用于教學目的的Minix微內核。但由于種種原因,在Linux初次登臺之前沒有一個系統(tǒng)在這一段最好的時機中獲得一般計算機用戶的廣泛認可。就在那時,一位在赫爾辛基大學讀書的年輕的芬蘭學生正受制于Minix操作系統(tǒng)中很多他認為不合理的地方。于是,他開始專門為他的(當時很高級的)AT386微機設計自己的操作系統(tǒng)。此人就是LinusTorvalds,他將繼續(xù)領導這個已創(chuàng)造了整個Linux產業(yè)的項目并激勵著新一代。Linus在1991年夏天開發(fā)出Linux的最初版本后,就在Usenet新聞組comp.OS.minix中發(fā)表了如下的公告:日期:25Au99120:57:08GMT組織:赫爾辛基大學所有使用minix的人們——我正在為386(486)AT微機開發(fā)一個(免費的)操作系統(tǒng)(只是個人愛好,它不會像9nu那樣龐大和專業(yè))。我從4月份開始醞釀該系統(tǒng),現(xiàn)在已進入準備階段。我需要任何喜歡或不喜歡minix的朋友的反饋意見,因為我的操作系統(tǒng)與它有些類似(同樣的文件系統(tǒng)物理布局(由于某些實際原因)以及其他方面)。我已將bash(1.08)和gcc(1.40)移植到該系統(tǒng)中,并且它們看起來可以正常工作。這意味著在短短幾個月內我就能夠在該系統(tǒng)中做一些實際的事情,我很想知道大多數(shù)人都希望增加哪些功能。歡迎大家提出任何建議,但我無法保證一定會實現(xiàn)它們。盡管Linus一開始很謙遜,但人們對Linux內核的興趣卻在全球迅速擴大。不久之后,Linux就推出了多個新版本,并且一個日益增長的用戶群體(他們基本上都是開發(fā)人員,因為即使是簡單地安裝Linux也需要大量的專業(yè)技術)正在為Linux解決各種技術難題并將一些新的構思和想法付諸實現(xiàn)?,F(xiàn)在的許多大名鼎鼎的Linux開發(fā)者都是在當時加入這一行業(yè)的。他們享受著能夠在一個現(xiàn)代的完全免費的類UNIX系統(tǒng)上工作的樂趣,而不用忍受像其他系統(tǒng)那樣的設計復雜性。Linux的開發(fā)者利用許多已有的GNu工具來構建Linux內核并為它開發(fā)新的特性。事實上,在Linux出現(xiàn)后不久,就有越來越多的人對它發(fā)生了興趣,Minix用戶也開始切換到Linux系統(tǒng)上來工作——這些事情最終導致在Minix創(chuàng)造者AndrewTANenbaum和LinusTorvalds之間發(fā)生了一系列著名的“口水戰(zhàn)”。Tanenbaum至今仍堅持認為Linux的設計根本不如Minix。從理論上來說,這可能是事實,但對其他現(xiàn)代操作系統(tǒng)而言,可以說也存在著同樣的問題。讀者可以從PeterH.Salus所著的AQuarterCenturyofUNIX(Addison-Wesley,1994)中了解到更多有關Linux和其他類UNIX操作系統(tǒng)歷史繼承的信息。1.1.3 Linux發(fā)行版隨著Linux核越來越受歡迎,人們希望Linux系統(tǒng)也能為那些對其內部編程機理沒有深入了解的用戶提供很好的服務。為了創(chuàng)建這樣一個可用的Linux系統(tǒng),需要的不僅僅只是一個Linux內核。事實上,如今一個普通的Linux桌面系統(tǒng)為了能提供從系統(tǒng)加電到具備豐富功能的圖形桌面環(huán)境(如GNOME),它利用了成千上萬個獨立的軟件程序。當Linux第一次發(fā)布時,它還沒有那么多豐富的軟件可用。事實上,Linus開始時只有一個應用程序-GNUBorneAgainSHell(bash)。那些曾經以受限的“單用戶”模式(只運行一個bashshell)啟動過Linux或UNIX系統(tǒng)的用戶都知道這是一種什么體驗。Linus使用一個單一的bash命令行shell對早期的Linux做了大量的測試,但是,即便這樣一個單一的bash也不能直接運行在Linux系統(tǒng)上。它首先需要經過移植或修改才能從一個已有的系統(tǒng)(如Minix)轉換到Linux系統(tǒng)上運行。隨著越來越多的人開始使用Linux并為Linux開發(fā)軟件,那些有耐心編譯和安裝軟件的用戶已有大量的軟件可用。但隨著時間的流逝,人們發(fā)現(xiàn)以一種從無到有的方式來構建每一個Linux系統(tǒng)顯然是一種不能忍受、不可復加的夢魘,除了最有熱情的用戶以外,它將阻止所有其他用戶體驗Linux所提供的功能。解決方法是使用Linux發(fā)行版的形式或將預先創(chuàng)建好的軟件集以及Linux內核以軟盤(或之后的光盤)形式提供給廣泛的潛在用戶群。早期的Linux發(fā)行版只是簡單地為那些不想自己從無到有構建整個系統(tǒng)的用戶提供便利。它并沒有跟蹤系統(tǒng)上已安裝了哪些軟件或對軟件的安全刪除以及新軟件的添加做出處理。直到包(package)管理軟件RedHat的RPM和Debian的dpkg的出現(xiàn),才使得不具備詳盡專業(yè)知識的普通用戶安裝Linux系統(tǒng)成為可能。當你在本書后續(xù)章節(jié)中學習如何為Linux發(fā)行版構建自己的Linux軟件包時,將會了解到更多有關軟件包管理的內容?,F(xiàn)代的Linux發(fā)行版的規(guī)模和大小各不相同,并且針對不同的市場。有些版本針對的是常規(guī)的桌面型Linux用戶;有些版本針對的是企業(yè)級用戶,他們要求操作系統(tǒng)具備可擴展性和健壯的性能;有些版本甚至是專為嵌入式設備如PDA、手機和機項盒設計的。盡管各種Linux發(fā)行版都有各自不同的包裝方式,但它們通常都有用戶可以利用的共性。例如,大多數(shù)發(fā)行版都力爭在一定程度上與事實上的可兼容Linux環(huán)境標準“Linux標準化規(guī)范(LSB)”兼容。1.1.4 自由軟件與開放源碼RichardStallman啟動了GNU項目并成立了自由軟件基金會作為一個非營利組織來負責監(jiān)督該項目。他還編寫了第一版的通用公共許可證(GPL)——為Linux系統(tǒng)編寫的大部分軟件都使用GPL許可證。GPL本身是一個很有意思的文檔,因為它的目的不是限制你使用GPL授權的軟件,而是保護用戶和開發(fā)者獲得源代碼的權利。GPL條款允許你修改Linux內核和其他GPL許可的自由軟件,作為回報,你應該公布這些修改,以便其他用戶使用它們(或將它們集成到指定軟件的下一個正式版本中)。例如,GPL允許你修復一個重要的應用程序如OpenOffice的bu9,或為GNOME桌面系統(tǒng)上的totem多媒體播放器添加定制音頻文件支持。GPL帶給開發(fā)者很大的靈活性,你可以出于任何目的來使用Linux,只要你將自己的修改也同樣地提供給其他用戶即可。這是關鍵的一點——即GPL試圖保持開發(fā)過程的開放性。對RichardStallman來說,遺憾的是,英語中還沒有一個可以和法語單詞libre(英語單詞libertyqb自由的含義)完全相當?shù)膯卧~,所以很多人混淆了自由軟件和免費軟件的概念。事實上,許多自由軟件都是完全免費的,但也有一些公司通過銷售GPL許可的軟件(包括它的自由發(fā)布的源代碼)來賺錢。他們并不是通過軟件本身來賺錢,而是當軟件出現(xiàn)故障時,通過提供各種技術支持和附加的專業(yè)服務來賺錢。為了減少對“自由軟件”一詞理解上的混亂,人們提出了術語“開放源碼”,這個術語成為了20世紀90年代的流行詞匯。與自由軟件不同,開放源碼并不特指GPL許可的軟件,而是指一種對包括源代碼的軟件(使之可以被他人調整、調試和改進)的普遍需求,即使該源代碼是在一個比GPL限制更嚴格的許可證下授權的。因此,有更多的軟件雖然不是自由軟件,但從技術上卻滿足開放源碼的定義。當你要修改現(xiàn)有的擁有GPL許可的軟件時,理解GPL究竟對這項工作有哪些要求是非常重要的。雖然你不一定在自己的程序中使用GPL許可,但你必須尊重已這么做的其他人的權利。在因特網上有許多潛在侵害GPL許可的例子——通常是由于公司不清楚在對軟件(如Linux內核)做出修改時需要將這些修改提供給用戶。當然,你并不想成為下一個這樣的案例,所以請始終確保你和你的同事都了解GPL,并盡早決定你準備如何利用它開展工作。
編輯推薦
《Linux高級程序設計》主要針對已有一定Linux開發(fā)經驗或者從其他平臺轉到Linux平臺的專業(yè)程序員,同樣也適合想更多了解系統(tǒng)以解決實際問題的Linux使用者?!啊禠inux高級程序設計》出色地為其他平臺的程序員揭示了Linux程序設計的復雜本質。而且特別強調了內核開發(fā)。為作者喝彩!”——LinuxMagazine雜志讀了《Linux程序設計(第3版)》之后還不過癮?《Linux高級程序設計》將為你獻上一頓饕餮大餐《Linux高級程序設計》是Linux程序設計領域內的經典著作。涵蓋了各種常用的和最重要的Linux程序設計的技術和方法。書中蘊含了作者的寶貴經驗。提供了大量的最佳實踐。無論你是有開發(fā)經驗的Linux程序員。還是從其他平臺轉至Linux上的專業(yè)開發(fā)者。都能通過《Linux高級程序設計》學到最新的Linux平臺開發(fā)技術。迅速成為現(xiàn)代Linux程序員。
圖書封面
圖書標簽Tags
無
評論、評分、閱讀與下載