Linux C與C++ 一線開發實踐 ( 簡體 字) |
作者:朱文偉 李建英 | 類別:1. -> 作業系統 -> Linux 2. -> 程式設計 -> C -> C 3. -> 程式設計 -> C++ -> C++ |
譯者: |
出版社:清華大學出版社 | 3dWoo書號: 50364 詢問書籍請說出此書號!【缺書】 NT售價: 645 元 |
出版日:12/1/2018 |
頁數:692 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787302512554 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:這是一本Linux C/C++入門的經典圖書。任何學過C/C++語言并立志成為一名Linux開發工程師的朋友,都可以從本書起步。本書雖然有點厚,但內容通俗易懂,由淺入深,并且實例豐富、步驟詳細、注釋充分,相信大家都能看得懂。對于中高級開發人員,也可以通過本書快速上手Linux C/C++的實際開發。本書并沒有詳細講述C++語言部分(但也進行了一定程度的敘述),而是把更多的筆墨放在Linux編程方面,因此書中都是實實在在的Linux編程“干貨”。此外,實例豐富是本書的一大特點,大家應該知道,編程開發只是了解理論是不夠的,只有自己上機調試運行實例,才能深刻理解編程,尤其是C/C++。另外,為了照顧初學者,每個實例步驟都非常詳細,并且從建立工程到運行工程都有著豐富的注釋。最后,本書所有例子都在CentOS 7上用gcc/g++編譯通過。 本書在講述基本編程的同時,也講述了很多一線實踐開發中經常會碰到的問題和解決方案,可以說本書是緊貼工業界的圖書。希望大家能夠通過本書的學習打好Linux開發的基礎,早日成為Linux C/C++開發高手。
本書示例源代碼下載 本書示例源代碼下載鏈接請掃描下面的右邊二維碼獲得: 如果下載有問題,請聯系,郵件主題為“Linux C與C++一線開發實踐”。
技術支持與鳴謝 雖然編者盡了最大努力,但是書中難免會出現一些疏漏,希望大家不吝指正。,。編者的QQ技術支持郵箱,歡迎大家來信。,關于本書的最新動態和錯誤列表,可以關注作者的QQ空間,讀者反映的建議或書中的疏漏會更新到空間中。 這里要最后感謝夫人李建英,沒有她認真測試驗證實示例程序就不能順利完成本書的寫作。同時也感謝清華大學出版社的老師們,他們辛勤的工作使得會有本書得以的順利出版。
編 者 2018年811月 |
內容簡介:Linux C/C++編程在Linux應用程序開發中占有重要的地位,掌握這項技能將在就業競爭中立于不敗之地。本書是一本針對初、中級讀者的、貼近軟件公司一線開發實踐的書。 本書共分為19章,內容包括Linux概述、搭建開發環境、語言基礎、文件編程、多進程編程、進程間通信、Web編程、多線程編程、Linux下的庫、TCP/IP協議基礎、網絡編程、網絡性能測試工具iPerf簡析、版本控制和SVN工具、C++跨平臺開發以及安全編程等。 本書適合想全面學習Linux環境下C/C++語言編程的讀者,并可作為初中級開發人員的案頭查閱與參考手冊,也適合作為高等院校和培訓學校相關專業師生的教學參考書。 |
目錄:第1章Linux概述1 1.1什么是Linux1 1.2Linux的簡史2 1.3Linux和Windows的比較4 1.4Linux主要應用領域4 1.5Linux的版本5 1.6使用哪個版本的Linux進行學習5 1.7Linux的特點5 1.8如何學習Linux6 1.9命令行還是圖形界面6 1.10計算機啟動的基本過程6 1.10.1按下電源7 第1章Linux概述1 1.1什么是Linux1 1.2Linux的簡史2 1.3Linux和Windows的比較4 1.4Linux主要應用領域4 1.5Linux的版本5 1.6使用哪個版本的Linux進行學習5 1.7Linux的特點5 1.8如何學習Linux6 1.9命令行還是圖形界面6 1.10計算機啟動的基本過程6 1.10.1按下電源7 1.10.2BIOS自檢7 1.10.3系統引導8 1.10.4實模式和保護模式10 1.11啟動內核11 1.12認識Shell11 1.13常見的Shell11 1.14圖形界面和字符界面的切換12 1.14.1在不退出X-Window的情況下切換到字符界面12 1.14.2強行退出X-Window進入文本模式12 1.14.3設置每次開機進入字符界面13 1.14.4從字符界面進入圖形界面14 1.15Shell命令概述14 1.16環境變量14 第2章搭建LinuxC++開發環境16 2.1準備Linux虛擬機16 2.2連接Linux虛擬機20 2.2.1通過橋接模式連接虛擬機21 2.2.2主機模式24 2.2.3通過NAT模式連接虛擬機25 2.3通過終端工具連接Linux虛擬機27 2.4搭建Linux下的C++開發環境30 2.4.1非集成開發方式30 2.4.2集成開發方式31 2.5搭建Windows下的LinuxC++開發環境37 2.5.1搭建非集成式的Windows下的LinuxC++開發環境37 2.5.2搭建集成式的Windows下的LinuxC++開發環境39 2.6需要掌握的開發工具49 2.7vi編輯器的使用50 2.7.1vi編輯器概述50 2.7.2vi編輯器的工作模式50 2.7.3vi的基本操作51 2.7.4命令行模式下的基本操作51 2.7.5插入模式55 2.7.6末行模式操作55 2.8gcc編譯器的使用57 2.8.1gcc對C語言的編譯過程57 2.8.2gcc所支持的后綴名文件62 2.8.3gcc的語法格式62 2.8.4gcc常見選項64 2.9g++的基本使用75 2.10gdb調試器的使用77 2.10.1為何要學習gdb調試器77 2.10.2gdb簡介77 2.10.3重要準備77 2.10.4啟動gdb77 2.10.5退出gdb78 2.10.6gdb的常用命令概述79 2.10.7file命令加載程序80 2.10.8list命令顯示源代碼80 2.10.9run命令運行程序83 2.10.10break命令設置斷點85 第3章C++語言基礎89 3.1C++基礎知識89 3.1.1C++程序結構89 3.1.2注釋91 3.1.3變量和數據類型92 3.1.4標識92 3.1.5基本數據類型93 3.1.6變量的定義和C++11中的auto94 3.1.7變量的范圍98 3.1.8變量初始化98 3.1.9常量99 3.1.10操作符/運算符103 3.1.11控制臺交互110 3.2控制結構115 3.2.1條件結構115 3.2.2循環結構116 3.2.3分支控制和跳轉120 3.2.4選擇結構語句switch122 3.3函數123 3.4函數高級話題127 3.4.1參數按數值傳遞和按地址傳遞127 3.4.2函數重載130 3.4.3內聯函數131 3.4.4遞歸132 3.4.5函數的聲明133 3.5高級數據類型134 3.5.1數組134 3.5.2指針145 3.5.3動態分配內存155 3.5.4結構體159 3.5.5自定義數據類型165 3.6面向對象編程168 3.6.1類168 3.6.2構造函數和析構函數171 3.6.3構造函數重載173 3.6.4類的指針175 3.6.5由關鍵字struct和union定義的類176 3.6.6操作符重載176 3.6.7關鍵字this179 3.6.8靜態成員180 3.6.9類之間的關系182 3.6.10多態189 3.7C++面向對象小結195 3.8C++高級知識199 3.8.1模板199 3.8.2命名空間205 3.8.3異常處理209 3.8.4預處理指令213 3.8.5預定義宏215 3.8.6C++11中的預定義宏216 3.9字符串218 3.9.1字符串基礎218 3.9.2搜索與查找227 3.10再論異常處理233 3.10.1基本概念233 3.10.2拋出異常234 3.10.3捕獲異常234 3.10.4C++標準異常235 3.10.5定義新的異常236 3.11再論函數模板237 3.12字符集239 3.12.1計算機上的3種字符集239 3.12.2查看Linux系統的字符集241 3.12.3修改Linux系統的字符集242 3.12.4Unicode編碼的實現242 3.12.5C運行時庫對Unicode的支持246 3.12.6C++標準庫對Unicode的支持247 3.12.7字符集相關實例248 第4章Linux文件編程249 4.1文件系統249 4.1.1基本概念249 4.1.2文件系統層次結構標準249 4.2文件的屬性信息250 4.3i節點251 4.3.1基本概念251 4.3.2i節點的內容251 4.3.3i節點的使用狀況253 4.4文件類型254 4.4.1普通文件255 4.4.2目錄255 4.4.3塊設備文件256 4.4.4字符設備文件257 4.4.5鏈接文件257 4.5文件權限259 4.6Linux文件I/O編程的基本方式260 4.7什么是I/O260 4.8Linux系統調用下的文件I/O編程261 4.8.1文件描述符261 4.8.2打開或創建文件262 4.8.3創建文件263 4.8.4關閉文件264 4.8.5讀取文件中的數據266 4.8.6向文件寫入數據268 4.8.7設定文件偏移量269 4.8.8獲取文件狀態271 4.8.9文件鎖定272 4.8.10建立文件和內存映射276 4.8.11mmap和共享內存對比279 4.9C++方式下的文件I/O編程280 4.9.1流的概念280 4.9.2流的類庫280 4.9.3打開文件281 4.9.4關閉文件283 4.9.5寫入文件283 4.9.6讀取文件283 4.9.7文件位置指針285 4.9.8狀態標志符的驗證287 4.9.9讀寫文件數據塊288 4.10文件編程中的其他操作290 4.10.1獲取文件有關信息290 4.10.2創建和刪除文件目錄項293 第5章多進程編程296 5.1進程的基本概念296 5.2進程的描述296 5.2.1進程的標識符299 5.2.2PID文件301 5.3進程的創建303 5.3.1使用fork創建進程303 5.3.2使用exec創建進程305 5.3.3使用system創建進程311 5.4進程調度312 5.5進程的分類315 5.5.1前臺進程315 5.5.2后臺進程315 5.6守護進程316 5.6.1守護進程的概念316 5.6.2守護進程的特點317 5.6.3查看守護進程317 5.6.4守護進程的分類318 5.6.5守護進程的啟動方式319 5.6.6編寫守護進程的步驟319 第6章Linux進程間的通信323 6.1信號323 6.1.1信號的基本概念323 6.1.2與信號相關的系統調用328 6.2管道336 6.2.1管道的基本概念336 6.2.2管道讀寫的特點337 6.2.3管道的局限性337 6.2.4創建管道函數pipe338 6.2.5讀寫管道函數read/write338 6.2.6等待子進程中斷或結束的函數wait338 6.2.7使用管道的特殊情況342 6.3消息隊列342 6.3.1創建和打開消息隊列函數msgget343 6.3.2獲取和設置消息隊列的屬性函數msgctl343 6.3.3將消息送入消息隊列的函數msgsnd344 6.3.4從消息隊列中讀取一條新消息的函數msgrcv345 6.3.5生成鍵值函數ftok346 第7章C++Web編程354 7.1CGI程序的工作方式354 7.2架設Web服務器Apache354 第8章多線程基本編程358 8.1使用多線程的好處358 8.2多線程編程的基本概念359 8.2.1操作系統和多線程359 8.2.2線程的基本概念359 8.2.3線程的狀態360 8.2.4線程函數361 8.2.5線程標識361 8.2.6C++多線程開發的兩種方式361 8.3利用POSIX多線程API函數進行多線程開發362 8.3.1線程的創建362 8.3.2線程的屬性367 8.3.3線程的結束379 8.3.4線程退出時的清理機會387 8.4C++11中的線程類392 8.4.1線程的創建393 8.4.2線程的標識符401 8.4.3當前線程this_thread402 第9章多線程高級編程406 9.1多線程的同步和異步406 9.2線程同步406 9.3利用POSIX多線程API函數進行線程同步411 9.3.1互斥鎖411 9.3.2讀寫鎖417 9.3.3條件變量424 9.4C++11/14中的線程同步431 9.5線程池434 9.5.1線程池的定義434 9.5.2使用線程池的原因435 9.5.3用C++實現一個簡單的線程池435 第10章Linux下的庫441 10.1庫的基本概念441 10.2庫的分類441 10.3靜態庫442 10.3.1靜態庫的基本概念442 10.3.2靜態庫的創建和使用442 10.4動態庫445 10.4.1動態庫的基本概念445 10.4.2動態庫的創建和使用445 第11章TCP/IP協議基礎450 11.1什么是TCP/IP450 11.2TCP/IP協議的分層結構450 11.3應用層453 11.3.1DNS454 11.3.2端口的概念454 11.4傳輸層455 11.4.1TCP協議455 11.4.2UDP協議456 11.5網絡層456 11.5.1IP協議456 11.5.2ARP協議462 11.5.3RARP協議464 11.5.4ICMP協議465 11.6數據鏈路層474 11.6.1數據鏈路層的基本概念474 11.6.2數據鏈路層的主要功能474 第12章套接字基礎476 12.1網絡程序的架構477 12.2套接字的類型478 12.3套接字的地址結構478 12.4主機字節序和網絡字節序479 12.5出錯信息的獲取481 第13章TCP套接字編程483 13.1TCP套接字編程的基本步驟483 13.2協議簇和地址簇484 13.3socket地址487 13.3.1通用socket地址487 13.3.2專用socket地址488 13.3.3IP地址的轉換489 13.4TCP套接字編程的相關函數491 13.4.1socket函數491 13.4.2bind函數492 13.4.3listen函數494 13.4.4accept函數494 13.4.5connect函數495 13.4.6write函數497 13.4.7read函數498 13.4.8send函數498 13.4.9recv函數499 13.4.10close函數499 13.4.11獲得套接字地址499 13.4.12阻塞套接字的使用504 13.4.13非阻塞套接字的使用511 第14章UDP套接字編程525 14.1UDP套接字編程的基本步驟525 14.2TCP套接字編程的相關函數526 14.2.1消息發送函數sendto和sendmsg526 14.2.2消息接收函數recvfrom和recvmsg527 14.3實戰UDP套接字529 14.4UDP丟包及無序問題538 第15章原始套接字編程539 15.1原始套接字概述539 15.2與標準套接字的區別539 15.3原始套接字的編程方法540 15.4面向鏈路層的原始套接字編程函數540 15.4.1創建原始套接字函數540 15.4.2接收函數recvfrom541 15.4.3發送函數sendto542 15.5以太網幀格式545 15.6獲取網絡接口的信息547 15.7實戰鏈路層的原始套接字550 15.7.1常見的應用場景550 15.7.2混雜模式577 15.7.3鏈路層原始套接字開發注意事項596 15.8面向IP層的原始套接字編程597 第16章C++網絡性能測試工具iPerf的簡析605 16.1iPerf概述605 16.2iPerf的特點605 16.3iPerf的工作原理605 16.4iPerf的主要功能606 16.5在Linux下安裝iPerf607 16.6iPerf的簡單使用608 16.7iPerf源代碼概述609 16.8Thread類610 16.8.1數據成員說明611 16.8.2主要函數成員611 16.9SocketAddr類615 16.10Socket類617 16.10.1Listen函數618 16.10.2Accept函數620 16.10.3Connect函數620 第17章版本控制和SVN工具623 17.1SVN簡介623 17.1.1什么是SVN623 17.1.2使用SVN的好處624 17.1.3使用SVN的基本流程624 17.2SVN服務器的安裝和配置624 17.2.1VisualSVN服務器的安裝和配置624 17.2.2SVN客戶端在Windows上的使用629 第18章C++跨平臺開發634 18.1什么是跨平臺634 18.2C++的可移植性634 18.2.1可移植性的概念634 18.2.2影響C++語言可移植性的因素635 18.3設計跨平臺軟件的原則638 18.3.1避免語言的擴展特性638 18.3.2實現動態的處理638 18.3.3使用腳本文件進行管理639 18.3.4使用安全的數據串行化640 18.3.5跨平臺開發中的編譯及測試641 18.3.6實現抽象641 18.4建立跨平臺的開發環境642 18.4.1跨平臺開發編譯器的選擇642 18.4.2建立跨平臺的Make系統643 18.5C++語言跨平臺軟件開發的實現648 18.6C++語言跨平臺的開發策略649 18.7建立統一的工程包650 18.8建立跨平臺的代碼庫650 18.9工廠模式與單例模式的實現651 18.10利用平臺依賴庫封裝平臺相關代碼651 18.11處理器的差異控制652 18.11.1內存對齊652 18.11.2字節順序653 18.11.3類型的大小654 18.11.4使用預編譯處理類型差異654 18.12編譯器的差異控制655 18.12.1實現平臺無關的代碼655 18.12.2內存管理657 18.12.3容錯性的影響657 18.12.4利用日志管理異常657 18.13操作系統和接口庫658 18.13.1文件描述符的限制659 18.13.2進程和線程的限制659 18.13.3操作系統抽象層659 18.14用戶界面660 18.14.1跨平臺軟件圖形界面的設計660 18.14.2wxWidgets簡介661 18.14.3使用wxWidgets開發跨平臺軟件的界面661 第19章Linux下的安全編程663 19.1本章概述663 19.2密碼學基礎知識665 19.2.1密碼學概述665 19.2.2對稱密鑰加密技術665 19.2.3公開密鑰加密技術666 19.2.4單向散列函數算法667 19.2.5數字簽名基礎知識667 19.3身份認證基礎知識668 19.3.1身份認證概述668 19.3.2身份認證的方式669 19.4密碼編程的兩個重要庫670 19.5OpenSSL的簡介671 19.6OpenSSL模塊分析671 19.6.1OpenSSL源代碼模塊結構671 19.6.2OpenSSL加密庫調用方式672 19.6.3OpenSSL支持的對稱加密算法673 19.6.4OpenSSL支持的非對稱加密算法673 19.6.5OpenSSL支持的信息摘要算法673 19.6.6OpenSSL密鑰和證書管理673 19.7面向對象與OpenSSL674 19.7.1BIO接口675 19.7.2EVP接口676 19.8OpenSSL的下載、編譯和升級安裝677 19.9對稱加解密算法的分類680 19.9.1流對稱算法680 19.9.2分組對稱算法680 19.9.3了解庫和頭文件684 19.10利用OpenSSL進行對稱加解密686 19.10.1一些基本概念686 19.10.2對稱加解密相關函數687 19.11Crypto++的簡介695 19.12Crypto++的編譯696 19.13Crypto++進行AES加解密696 |
序: |