內容簡介
《Linux開發工具箱》將系統性地介紹GNU/Linux的開源工具,並通過可以被讀者容易修改的簡明示例說明如何使用這些工具,以滿足讀者的實際需求。
《Linux開發工具箱》首先介紹如何下載、構建和安裝開源項目,如何發布開源工具,以及如何避免將時間浪費到還未準備好的項目中,並引導讀者構建自己的項目。然後通過示例演示了如何在文本編輯器中進行查找操作,展示了幾個常用文本編輯器中會用到的小技巧。
書中接下來對Linux核心的基礎知識和作業系統的內部原理進行了詳細且通俗易懂的闡述,並示範了如何將這些知識套用到更高級的工具中。還重點講解sar、vmstat、valgrind和strace等工具的輸出,以及如何將它們運用到應用程式中;如何利用各種編程API來開發適用於自己的工具。
最後,作者介紹了可以提高軟體性能的工具;解釋了如今市面上的多芯CPU的內在原理,並演示了如何從這些系統中獲取最佳性能;以及介紹了在各種環境下調試代碼的工具和技術。
對於程式設計師來說,如果希望自己開發出來的程式更為簡潔有效,如果想對Linux編程環境有更深刻的理解,那么,《Linux開發工具箱》提供的資料相信能給您帶來驚喜!
作者簡介
JohnFusco是GEHealthcare的一名軟體開發人員,專門編寫Linux應用程式和設備驅動程式。他在Unix軟體行業有十多年的工作經驗,從核心2.0版本就開始開發Linux應用程式。他曾為EmbeddedSystemsProgramming和LinuxJournal撰寫文章。
編輯推薦
《Linux開發工具箱》主要內容
最大化編輯器、版本控制工具和原始碼瀏覽器的生產效率
理解進程及用來管理它們的工具
使用gprof和valgrind跟蹤和解決套用瓶頸
在需要時如何快速找到幫助、解決方案和工作區
使用sar、vmstat、iostat及其他工具最佳化程式代碼
使用shell命令調試IPC:信號、管道、套接字、檔案和IPC對象
使用printf、gdb和其他基本的調試工具
目錄
第1章開源工具的下載和安裝1
1.1簡介1
1.2什麼是開放源碼2
1.3開放源碼的意義2
1.3.1搜尋工具2
1.3.2版本格式3
1.4存檔檔案4
1.4.1識別存檔檔案5
1.4.2查詢存檔檔案6
1.4.3提取存檔檔案9
1.5認識軟體包管理器10
1.5.1原始碼或二進制格式的選擇11
1.5.2使用軟體包12
1.6關於安全性和軟體包13
1.6.1驗證的必要性14
1.6.2軟體包的基本認證14
1.6.3數字簽名的軟體包驗證機制15
1.6.4RPM格式的GPG簽名16
1.6.5何時不能驗證軟體包19
1.7檢查軟體包目錄20
1.7.1查看軟體包20
1.7.2深入理解RPM軟體包22
1.7.3深入理解Debian軟體包23
1.8軟體包更新25
1.8.1Apt:高級軟體包工具26
1.8.2Yum:Yellowdog修訂版更新26
1.8.3Synaptic:TheGUIFrontEndForApt27
1.8.4up2date:RedHat軟體包更新28
1.9小結29
1.9.1本章用到的工具29
1.9.2網路資源29
第2章從原始碼構建31
2.1簡介31
2.2構建工具32
2.2.1背景知識32
2.2.2make工具34
2.2.3程式的連結52
2.2.4深入理解庫53
2.3創建過程57
2.3.1GNU構建工具57
2.3.2配置階段57
2.3.3構建階段:make59
2.3.4安裝階段:makeinstall60
2.4理解錯誤和警告60
2.4.1常見的Makefile錯誤61
2.4.2配置階段的錯誤63
2.4.3創建階段的錯誤64
2.4.4理解編譯器錯誤66
2.4.5理解編譯器警告信息68
2.4.6理解連結器錯誤76
2.5小結77
2.5.1本章用到的工具77
2.5.2網路資源78
第3章查找幫助79
3.1簡介79
3.2線上幫助工具80
3.2.1man頁面80
3.2.2man結構81
3.2.3查找man頁面:apropos82
3.2.4查找正確的man頁面:whatis84
3.2.5在man頁面中查找85
3.2.6一些推薦的man頁面86
3.2.7GNUinfo88
3.2.8瀏覽info頁面88
3.2.9查找info頁面90
3.2.10推薦info頁面91
3.2.11桌面幫助工具91
3.3其他92
3.3.1/usr/share/doc92
3.3.2交叉引用和索引93
3.3.3查詢軟體包94
3.4檔案格式95
3.4.1TeX/LaTtex/DVI95
3.4.2Texinfo96
3.4.3DoCbook96
3.4.4HTML97
3.4.5PostScript98
3.4.6攜帶型檔案格式(PDF)99
3.4.7troff100
3.5來自網際網路的信息100
3.5.1www.gnu.org100
3.5.2sourceforge.net101
3.5.3Linux檔案項目101
3.5.4Usenet(世界性的新聞組網路系統)102
3.5.5郵件列表102
3.5.6其他論壇102
3.6查找Linux核心信息103
3.6.1核心構建103
3.6.2核心模組105
3.6.3混雜(miscellaneous)檔案106
3.7小結106
3.7.1本章用到的工具106
3.7.2線上資源106
第4章編輯和保存源檔案109
4.1簡介109
4.2文本編輯器110
4.2.1默認編輯器111
4.2.2在文本編輯器中查找111
4.2.3vi和Emacs113
4.2.4Vim:vi擴展113
4.2.5Emacs130
4.2.6反對複製品137
4.2.7GUI文本編輯器139
4.2.8記憶體使用率144
4.2.9編輯器概述145
4.3版本控制145
4.3.1版本控制基礎145
4.3.2定義版本控制的術語147
4.3.3支持工具148
4.3.4diff和patch簡介149
4.3.5檢查和合併更改152
4.4原始碼的最佳化器和瀏覽器157
4.4.1縮進代碼最佳化器158
4.4.2Astyle風格160
4.4.3用cflow分析代碼160
4.4.4用ctags分析代碼163
4.4.5用cscope瀏覽代碼163
4.4.6用Doxygen瀏覽和記錄代碼164
4.4.7使用編譯器分析代碼165
4.5小結167
4.5.1本章用到的工具168
4.5.2參考資料168
4.5.3線上資源168
第5章開發者必備核心知識171
5.1簡介171
5.2用戶模式與核心模式172
5.2.1系統調用173
5.2.2用戶空間與核心空間的數據傳送175
5.3進程調度程式175
5.3.1初識調度176
5.3.2阻塞,搶先占有和放棄177
5.3.3調度的優先與公平178
5.3.4優先權和Nice值182
5.3.5實時優先權183
5.3.6創建實時進程185
5.3.7進程狀態186
5.3.8時間度量190
5.4設備和設備驅動程式198
5.4.1設備驅動程式的類型199
5.4.2核心模組200
5.4.3設備節點201
5.4.4設備和輸入/輸出210
5.5I/O調度程式217
5.5.1Linus電梯式調度(akanoop)218
5.5.2I/O調度程式的截止時間219
5.5.3先占I/O調度程式219
5.5.4完整的公平地排隊I/O調度程式219
5.5.5選擇一個I/O調度程式219
5.6用戶空間的記憶體管理220
5.6.1虛擬記憶體的解釋220
5.6.2記憶體耗盡232
5.7小結241
5.7.1本章用到的工具241
5.7.2本章討論的APIs242
5.7.3線上資源242
5.7.4參考資料242
第6章進程243
6.1簡介243
6.2進程的產生243
6.2.1fork和vfork244
6.2.2寫拷貝244
6.2.3clone245
6.3exec函式245
6.3.1可執行腳本246
6.3.2可執行目標檔案248
6.3.3二進制檔案248
6.4wait實現進程同步250
6.5進程的記憶體占用252
6.5.1檔案描述符254
6.5.2堆疊259
6.5.3常駐記憶體和固定記憶體260
6.6設定進程限制260
6.7進程和procfs263
6.8進程管理工具265
6.8.1通過ps命令顯示進程信息265
6.8.2使用formats增加進程信息267
6.8.3查找名中帶有ps和pgrep的進程269
6.8.4利用pmap查看進程使用的空間269
6.8.5通過名字傳送信號給進程271
6.9小結271
6.9.1系統調用和本章用到的API272
6.9.2本章用到的工具272
6.9.3線上資源272
第7章進程通信273
7.1簡介273
7.2使用純文本檔案的IPC274
7.2.1檔案加鎖279
7.2.2使用檔案進行IPC的缺點279
7.3共享記憶體279
7.3.1POSIX共享記憶體API280
7.3.2SystemV共享記憶體API283
7.4信號286
7.4.1向進程傳送信號286
7.4.2信號處理287
7.4.3信號掩碼和信號處理288
7.4.4實時信號291
7.4.5具有sigqueue和sigaction的高級信號293
7.5管道295
7.6套接字296
7.6.1創建套接字296
7.6.2使用socketpair的本地套接字示例298
7.6.3使用本地套接字的客戶端/伺服器端示例300
7.6.4使用網路套接字的客戶端/伺服器端示例305
7.7訊息佇列305
7.7.1SystemV訊息佇列306
7.7.2POSIX訊息佇列309
7.7.3POSIX與SystemV的訊息佇列的區別314
7.8信號量314
7.8.1POSIX信號量使用的API318
7.8.2SystemV信號量使用的API321
7.9小結323
7.9.1本章中用到的系統調用和API323
7.9.2參考資料325
7.9.3線上資源325
第8章使用shell命令調試IPC327
8.1簡介327
8.2打開檔案時用到的工具327
8.2.1lsof328
8.2.2fuser329
8.2.3ls330
8.2.4file330
8.2.5stat330
8.3查看檔案中的數據331
8.3.1字元串命令334
8.3.2xxd命令334
8.3.3hexdump命令335
8.3.4od命令336
8.4用於VIPC系統的核心工具337
8.4.1V系統共享記憶體337
8.4.2V系統訊息佇列340
8.4.3V系統的信號量340
8.5POSIXIPC用到的工具341
8.5.1POSIX共享記憶體342
8.5.2POSIX訊息佇列342
8.5.3POSIX信號量343
8.6信號用到的工具344
8.7管道和套接字用到的工具346
8.7.1管道和FIFO346
8.7.2套接字347
8.8使用索引識別檔案和IPC對象349
8.9小結351
8.9.1本章用到的工具351
8.9.2線上資源351
第9章性能最佳化353
9.1簡介353
9.2系統性能353
9.2.1記憶體問題354
9.2.2CPU利用率和匯流排衝突363
9.2.3設備和中斷365
9.2.4查找系統性能問題的工具371
9.3應用程式性能377
9.3.1計時命令的第一步378
9.3.2x86info處理器結構379
9.3.3使用Valgrind檢查指令效率382
9.3.4ltrace簡介385
9.3.5使用strace監視程式性能387
9.3.6傳統性能最佳化工具:gcov和gprof388
9.3.7OProfile簡介394
9.4多處理器平台400
9.4.1SMP硬體的類型400
9.4.2SMP機上的編程實現404
9.5小結406
9.5.1本章介紹的基本性能406
9.5.2本章介紹的專業術語406
9.5.3本章用到的工具406
9.5.4線上資源407
9.5.5參考資料407
第10章調試409
10.1簡介409
10.2最基本的調試工具:printf410
10.2.1使用printf存在的問題410
10.2.2有效地使用printf414
10.2.3關於printf調試工具的結束語421
10.3GNU下最好用的調試器:gdb422
10.3.1使用gdb運行代碼423
10.3.2停止和重新執行424
10.3.3檢查和管理數據432
10.3.4使用gdb連線正在運行的進程441
10.3.5調試核心檔案442
10.3.6使用gdb進行多執行緒調試445
10.3.7調試最佳化的代碼446
10.4調試共享對象449
10.4.1使用共享對象的時間和原因449
10.4.2創建共享對象449
10.4.3定位共享對象450
10.4.4覆蓋默認共享目標的位置451
10.4.5共享對象的安全問題451
10.4.6共享對象使用的工具452
10.5查找記憶體問題454
10.5.1兩次釋放454
10.5.2記憶體泄露455
10.5.3緩衝區溢出455
10.5.4glibc工具457
10.5.5使用valgrind調試記憶體460
10.5.6使用ElectricFence檢測記憶體泄漏465
10.6非常規技術467
10.6.1創建自己的黑匣子467
10.6.2獲取運行時的堆疊軌跡470
10.6.3強制核心轉儲471
10.6.4使用信號473
10.6.5使用procfs調試473
10.7小結475
10.7.1本章用到的工具476
10.7.2線上資源476
10.7.3參考資料476
……