內容簡介
編寫套用軟體,特別是那些比較重要的軟體,毫無疑問要涉及到系統調用。在UNIX/Linux環境下編程更是如此。要想編寫優秀的軟體,就必須熟悉這些系統調用的方方面面。通過閱讀這本書,你能夠快速地掌握這些重要技術,以構建嚴謹的Linux軟體。全書主要分為三大部分:第一部分討論了基本的編程問題,包括Linux編程環境、基本的檔案和進程管理與操作、記憶體操作,還介紹了一些基本的庫接口。第二部分比較深入地討論了上面這些概念,如進程間通信、信號、許可權檢查;此外這部分還介紹了一些擴展接口;接著討論了多語言問題;最後介紹了一些高級專題。第三部分介紹了程式設計的一個重要環節即調試。本書結構合理、概念清晰、實例豐富,並具有很強的啟發性和實用性。
作者簡介
ARNOLDROBBINS是一位專業程式設計師和教授,同時也是《LJNIXinaNLJtshell))、《LearllingtheKorrlShell》和《EffectiveawkProgramming》等書的作者。另外,他還是一名長期的GNUProject的志願者,目前負責維護gawk。從1980年開始,Robbirls就開始使用C、C++、LINIX和GNIJ/LInux。
編輯推薦
想學習編程?想從Windows過渡到Linux?曾經進行過Linux開發,但希望進一步探索系統調用接口?不管是哪種情況,這本書都能夠快速和直接地幫助你掌握這些重要技術,以構建嚴謹的Linux軟體。
該書通過展示和解釋優良的實例程式來介紹Linux編程,這可能是最有效的方式。通過引用V7UNIX和GNU中的原始碼,ArnoldRobbins著重介紹了基礎的系統調用API,這些API在任何重要程式中均處於核心地位。Robbins還循序漸進地介紹了許多高水平的編程準則和“內幕’’技術。與此同時,他還仔細地陳述了許多實際性的問題,如性能、可移植性和健壯性。
目錄
譯者序
前言
第1部分檔案與用戶
第1章引言3
1.1Linux/Unix檔案模型3
1.2Linux/Unix進程模型7
1.3標準C與原始C9
1.4為什麼GNU程式更好?10
1.5回顧可移植性13
1.6推薦讀物14
1.7小結15
練習15
第2章參數、選項和環境17
2.1選項和參數約定17
2.2基本的命名行處理技術20
2.3選項解析:getopt()和getopt_long()函式21
2.4環境29
2.5小結36
練習37
第3章用戶級記憶體管理39
3.1Linux/Unix地址空間39
3.2記憶體分配42
3.3小結60
練習60
第4章檔案和檔案I/O63
4.1介紹Linux/UnixI/O模型63
4.2介紹基本的程式結構64
4.3確定出了什麼問題65
4.4輸入與輸出70
4.5隨機訪問:在檔案內部移動讀寫位置78
4.6創建檔案81
4.7強迫數據存到磁碟上86
4.8設定檔案長度87
4.9小結88
練習88
第5章目錄和檔案元數據91
5.1仔細思考目錄的內容91
5.2創建和刪除目錄100
5.3讀取目錄102
5.4獲取檔案相關信息107
5.5修改所有權、許可權和修改時間119
5.6小結125
練習125
第6章通用庫接口——第一部分127
6.1時間和日期127
6.2排序和搜尋函式138
6.3用戶名和組名150
6.4終端:isatty()154
6.5推薦讀物155
6.6小結155
練習156
第7章綜合套用:ls159
7.1V7ls命令選項159
7.2V7ls命令的原始碼160
7.3小結173
練習173
第8章檔案系統和目錄遍歷175
8.1安裝和卸載檔案系統175
8.2用於檔案系統管理的檔案182
8.3獲得每個檔案系統的信息187
8.4在檔案層次結構中移動197
8.5在檔案樹中移動:GNUdu206
8.6改變根目錄:chroot()212
8.7小結213
練習214
第2部分進程、IPC和國際化
第9章進程管理和管道217
9.1進程創建和管理217
9.2進程組237
9.3基本的進程間通信:管道和FIFO239
9.4檔案描述符管理243
9.5例子:gawk中的雙向管道255
9.6推薦讀物258
9.7小結259
練習260
第10章信號263
10.1引言263
10.2信號處理264
10.3標準C信號:signal()和raise()函式264
10.4運轉中的信號處理器268
10.5SystemV版本3的信號API:sigset()等函式277
10.6POSIX信號279
10.7進程間通信信號287
10.8一些重要的專用信號290
10.9橫跨fork()和exec()函式的信號303
10.10小結303
練習305
第11章許可權、用戶ID號及組ID號307
11.1許可權檢查307
11.2獲取用戶ID和組ID310
11.3核准作為真實用戶:access()函式312
11.4核准作為有效用戶:euidaccess()函式(GLIBC)313
11.5設定目錄的額外許可權標誌位314
11.6設定真實ID和有效ID316
11.7處理三種ID:getresuid()和setresuid()(Linux)320
11.8穿越安全雷區:setuidroot321
11.9推薦讀物322
11.10小結322
練習323
第12章通用庫接口——第二部分325
12.1斷言語句:assert()宏325
12.2底層記憶體操作:memXXX()函式328
12.3臨時檔案332
12.4自殺:abort()函式339
12.5非局部轉移339
12.6偽隨機數346
12.7元字元擴展351
12.8正則表達式360
12.9推薦讀物366
12.10小結367
練習368
第13章國際化和本地化371
13.1引言371
13.2區域設定和C語言庫372
13.3程式訊息的動態翻譯387
13.4請把它拼寫出來,好嗎?399
13.5推薦讀物401
13.6小結401
練習402
第14章擴展接口403
14.1分配對齊的記憶體:posix_memalign()和memalign()函式403
14.2檔案鎖定404
14.3更精確的時間413
14.4使用二叉樹進行高級搜尋419
14.5小結428
練習428
第3部分調試和最終的項目
第15章調試433
15.1首要問題434
15.2為調試而編譯434
15.3GDB基礎434
15.4為調試而編程440
15.5調試工具462
15.6軟體測試482
15.7調試規則483
15.8推薦讀物485
15.9小結485
練習486
第16章綜合前面所有主題的工程489
16.1工程描述489
16.2推薦讀物491
第4部分附錄
附錄A十年學會編程495
為何人人都這么著急?495
十年學會編程496
參考文獻497
答案498
腳註498
附錄BCaldera原始UNIX許可證499
附靈CGNU通用公共許可證501
序言501
複製、發布和修改的條款和條件502
沒有擔保504
條款和條件的結束504
如何將這些條款運用於你的新程式504
套用示例505