Linux系統(tǒng)編程(第2版)
-
>
決戰(zhàn)行測5000題(言語理解與表達(dá))
-
>
軟件性能測試.分析與調(diào)優(yōu)實(shí)踐之路
-
>
第一行代碼Android
-
>
深度學(xué)習(xí)
-
>
Unreal Engine 4藍(lán)圖完全學(xué)習(xí)教程
-
>
深入理解計算機(jī)系統(tǒng)-原書第3版
-
>
Word/Excel PPT 2013辦公應(yīng)用從入門到精通-(附贈1DVD.含語音視頻教學(xué)+辦公模板+PDF電子書)
Linux系統(tǒng)編程(第2版) 版權(quán)信息
- ISBN:9787115346353
- 條形碼:9787115346353 ; 978-7-115-34635-3
- 裝幀:一般膠版紙
- 冊數(shù):暫無
- 重量:暫無
- 所屬分類:>>
Linux系統(tǒng)編程(第2版) 本書特色
適讀人群 :Linux系統(tǒng)開發(fā)人員、Linux程序員、Linux系統(tǒng)高級管理員、對Linux內(nèi)核和編程感興趣的讀者Linux系統(tǒng)編程用心之作,根據(jù)Linux內(nèi)核3.0更新 Linux程序設(shè)計方面的傳奇人物Robert Love力作
Linux系統(tǒng)編程(第2版) 內(nèi)容簡介
系統(tǒng)編程是指編寫系統(tǒng)軟件,其代碼在底層運(yùn)行,直接跟內(nèi)核和核心系統(tǒng)庫對話。 《Linux系統(tǒng)編程(第 2版)》是一本關(guān)于Linux系統(tǒng)編程的教程,也是一本介紹Linux系統(tǒng)編程的手冊,還是一本如何實(shí)現(xiàn)更優(yōu)雅更快代碼的內(nèi)幕指南。全書分為11章和2個附錄,詳細(xì)介紹了Linux系統(tǒng)編程基本概念、文件I/O、緩沖I/O、高 級文件I/O、進(jìn)程管理、高 級進(jìn)程管理、線程、文件和目錄管理、信號和時間等主題。附錄給出了gcc和GNU C提供的很多語言擴(kuò)展,以及推薦閱讀的相關(guān)書目。 《Linux系統(tǒng)編程(第 2版)》的作者是Linux內(nèi)核專業(yè)人士,多本技術(shù)圖書的作者!禠inux系統(tǒng)編程(第 2版)》需要在C編程和Linux編程環(huán)境下工作的程序員閱讀,對于想要鞏固基礎(chǔ)或了解內(nèi)核的高 級編程人員,《Linux系統(tǒng)編程(第 2版)》也很有參考價值。
Linux系統(tǒng)編程(第2版) 目錄
第 1章 入門和基本概念 1
1.1 系統(tǒng)編程 1
1.1.1 為什么要學(xué)習(xí)系統(tǒng)編程 2
1.1.2 系統(tǒng)編程的基礎(chǔ) 2
1.1.3 系統(tǒng)調(diào)用 3
1.1.4 C庫 3
1.1.5 C編譯器 4
1.2 API和ABI 4
1.2.1 API 5
1.2.2 ABI 5
1.3 標(biāo)準(zhǔn) 6
1.3.1 POSIX和SUS的歷史 6
1.3.2 C語言標(biāo)準(zhǔn) 7
1.3.3 Linux和標(biāo)準(zhǔn) 8
1.3.4 本書和標(biāo)準(zhǔn) 8
1.4 Linux編程的概念 9
1.4.1 文件和文件系統(tǒng) 9
1.4.2 進(jìn)程 15
1.4.3 用戶和組 16
1.4.4 權(quán)限 17
1.4.5 信號 18
1.4.6 進(jìn)程間通信 19
1.4.7 頭文件 19
1.4.8 錯誤處理 19
第 2章 文件I O 23
2.1 打開文件 24
2.1.1 系統(tǒng)調(diào)用open() 24
2.1.2 新建文件的所有者 27
2.1.3 新建文件的權(quán)限 27
2.1.4 creat()函數(shù) 30
2.1.5 返回值和錯誤碼 30
2.2 通過read()讀文件 31
2.2.1 返回值 31
2.2.2 讀入所有字節(jié) 33
2.2.3 非阻塞讀 33
2.2.4 其他錯誤碼 34
2.2.5 read()調(diào)用的大小限制 34
2.3 調(diào)用write()寫 35
2.3.1 部分寫(Partial Write) 36
2.3.2 Append(追加)模式 36
2.3.3 非阻塞寫 37
2.3.4 其他錯誤碼 37
2.3.5 write()大小限制 38
2.3.6 write()行為 38
2.4 同步I O 39
2.4.1 fsync()和fdatasync() 39
2.4.2 sync() 41
2.4.3 O_SYNC標(biāo)志位 42
2.4.4 O_DSYNC和O_RSYNC 42
2.5 直接I O 43
2.6 關(guān)閉文件 43
2.7 用lseek()查找 44
2.7.1 在文件末尾后查找 46
2.7.2 錯誤碼 46
2.7.3 限制 47
2.8 定位讀寫 47
2.9 文件截短 48
2.10 I O多路復(fù)用 49
2.10.1 select() 50
2.10.2 poll() 56
2.10.3 poll()和select()的區(qū)別 60
2.11 內(nèi)核內(nèi)幕 61
2.11.1 虛擬文件系統(tǒng) 61
2.11.2 頁緩存 62
2.11.3 頁回寫 63
2.12 結(jié)束語 64
第3章 緩沖I O 65
3.1 用戶緩沖I O 65
3.2 標(biāo)準(zhǔn)I O 68
3.3 打開文件 69
3.4 通過文件描述符打開流 70
3.5 關(guān)閉流 71
3.6 從流中讀數(shù)據(jù) 71
3.6.1 每次讀取一個字節(jié) 71
3.6.2 每次讀一行 72
3.6.3 讀二進(jìn)制文件 74
3.7 向流中寫數(shù)據(jù) 75
3.7.1 寫入單個字符 75
3.7.2 寫入字符串 76
3.7.3 寫入二進(jìn)制數(shù)據(jù) 76
3.8 緩沖I O示例程序 77
3.9 定位流 78
3.10 Flush(刷新輸出)流 80
3.11 錯誤和文件結(jié)束 80
3.12 獲取關(guān)聯(lián)的文件描述符 81
3.13 控制緩沖 82
3.14 線程安全 83
3.14.1 手動文件加鎖 84
3.14.2 對流操作解鎖 85
3.15 對標(biāo)準(zhǔn)I O的批評 86
3.16 結(jié)束語 87
第4章 高 級文件I O 88
4.1 分散 聚集I O 89
4.2 Event Poll 94
4.2.1 創(chuàng)建新的epoll實(shí)例 94
4.2.2 控制epoll 95
4.2.3 等待epoll事件 98
4.2.4 邊緣觸發(fā)事件和條件觸發(fā)事件 100
4.3 存儲映射 101
4.3.1 mmap() 101
4.3.2 munmap() 105
4.3.3 存儲映射實(shí)例 106
4.3.4 mmap()的優(yōu)點(diǎn) 107
4.3.5 mmap()的不足 108
4.3.6 調(diào)整映射的大小 108
4.3.7 改變映射區(qū)域的權(quán)限 109
4.3.8 通過映射同步文件 110
4.3.9 給出映射提示 112
4.4 普通文件I O提示 114
4.4.1 系統(tǒng)調(diào)用posix_fadvise() 114
4.4.2 readahead()系統(tǒng)調(diào)用 115
4.4.3 “經(jīng)濟(jì)實(shí)用”的操作提示 116
4.5 同步(Synchronized),同步(Synchronous)及異步(Asynchronous)操作 117
4.6 I O調(diào)度器和I O性能 118
4.6.1 磁盤尋址 119
4.6.2 I O調(diào)度器的功能 120
4.6.3 改進(jìn)讀請求 120
4.6.4 選擇和配置你的I O調(diào)度器 123
4.6.5 優(yōu)化I O性能 124
4.7 結(jié)束語 130
第5章 進(jìn)程管理 131
5.1 程序、進(jìn)程和線程 131
5.2 進(jìn)程ID 132
5.2.1 分配進(jìn)程ID 132
5.2.2 進(jìn)程體系 133
5.2.3 pid_t 133
5.2.4 獲取進(jìn)程ID和父進(jìn)程ID 133
5.3 運(yùn)行新進(jìn)程 134
5.3.1 exec系統(tǒng)調(diào)用 134
5.3.2 fork()系統(tǒng)調(diào)用 138
5.4 終止進(jìn)程 141
5.4.1 終止進(jìn)程的其他方式 142
5.4.2 atexit() 143
5.4.3 on_exit() 144
5.4.4 SIGCHLD 144
5.5 等待子進(jìn)程終止 144
5.5.1 等待特定進(jìn)程 147
5.5.2 等待子進(jìn)程的其他方法 149
5.5.3 BSD中的wait3()和wait4() 151
5.5.4 創(chuàng)建并等待新進(jìn)程 152
5.5.5 僵尸進(jìn)程 155
5.6 用戶和組 155
5.6.1 改變實(shí)際用戶 組ID和保留的用戶 組ID 156
5.6.2 改變有效的用戶ID或組ID 157
5.6.3 BSD改變用戶ID和組ID的方式 158
5.6.4 HP-UX中改變用戶ID和組ID的方式 158
5.6.5 操作用戶ID 組ID的首 選方法 159
5.6.6 對保留的用戶ID的支持 159
5.6.7 獲取用戶ID和組ID 159
5.7 會話(Session)和進(jìn)程組 160
5.7.1 與會話相關(guān)的系統(tǒng)調(diào)用 161
5.7.2 與進(jìn)程組相關(guān)的系統(tǒng)調(diào)用 163
5.7.3 廢棄的進(jìn)程組函數(shù) 164
5.8 守護(hù)進(jìn)程 164
5.9 結(jié)束語 167
第6章 高 級進(jìn)程管理 168
6.1 進(jìn)程調(diào)度 168
6.1.1 時間片 169
6.1.2 I O約束型進(jìn)程和處理器約束型進(jìn)程 169
6.1.3 搶占式調(diào)度 170
6.2 完全公平調(diào)度器 171
6.3 讓出處理器 172
6.4 進(jìn)程優(yōu)先級 173
6.4.1 nice() 174
6.4.2 getpriority()和setpriority() 175
6.4.3 I O優(yōu)先級 176
6.5 處理器親和力(Affinity) 177
6.6 實(shí)時系統(tǒng) 180
6.6.1 硬實(shí)時系統(tǒng)和軟實(shí)時系統(tǒng) 180
6.6.2 延遲、抖動和截止期限 181
6.6.3 Linux的實(shí)時支持 182
6.6.4 Linux調(diào)度策略和優(yōu)先級 182
6.6.5 設(shè)置調(diào)度參數(shù) 186
6.6.6 sched_rr_get_interval() 189
6.6.7 關(guān)于實(shí)時進(jìn)程的注意事項 190
6.6.8 確定性 191
6.7 資源限制 193
6.7.1 限制項 194
6.7.2 獲取和設(shè)置資源限制 198
第7章 線程 200
7.1 二進(jìn)制程序、進(jìn)程和線程 200
7.2 多線程 201
7.2.1 多線程代價 203
7.2.2 其他選擇 203
7.3 線程模型 203
7.3.1 用戶級線程模型 204
7.3.2 混合式線程模型 204
7.3.3 協(xié)同程序 205
7.4 線程模式 205
7.4.1 每個連接對應(yīng)一個線程 206
7.4.2 事件驅(qū)動的線程模式 206
7.5 并發(fā)性、并行性和競爭 207
7.6 同步 210
7.6.1 互斥 211
7.6.2 死鎖 212
7.7 Pthreads 214
7.7.1 Linux線程實(shí)現(xiàn) 214
7.7.2 Pthread API 215
7.7.3 鏈接Pthreads 216
7.7.4 創(chuàng)建線程 216
7.7.5 線程ID 217
7.7.6 終止線程 218
7.7.7 join(加入)線程和detach(分離)線程 221
7.7.8 線程編碼實(shí)例 223
7.7.9 Pthread互斥 224
7.8 進(jìn)一步研究 227
第8章 文件和目錄管理 228
8.1 文件及其元數(shù)據(jù) 228
8.1.1 一組stat函數(shù) 229
8.1.2 權(quán)限 233
8.1.3 所有權(quán) 234
8.1.4 擴(kuò)展屬性 237
8.1.5 擴(kuò)展屬性操作 239
8.2 目錄 245
8.2.1 獲取當(dāng)前工作目錄 246
8.2.2 創(chuàng)建目錄 251
8.2.3 刪除目錄 252
8.2.4 讀取目錄內(nèi)容 253
8.3 鏈接 256
8.3.1 硬鏈接 256
8.3.2 符號鏈接 258
8.3.3 解除鏈接 259
8.4 拷貝和移動文件 261
8.4.1 拷貝 261
8.4.2 移動 261
8.5 設(shè)備節(jié)點(diǎn) 263
8.5.1 特殊設(shè)備節(jié)點(diǎn) 264
8.5.2 隨機(jī)數(shù)生成器 264
8.6 帶外通信(Out-of-Band Communication) 265
8.7 監(jiān)視文件事件 266
8.7.1 初始化inotify 267
8.7.2 監(jiān)視 268
8.7.3 inotify事件 270
8.7.4 高 級監(jiān)視選項 273
8.7.5 刪除inotify監(jiān)視 273
8.7.6 獲取事件隊列大小 274
8.7.7 銷毀inotify實(shí)例 274
第9章 內(nèi)存管理 276
9.1 進(jìn)程地址空間 276
9.1.1 頁和頁面調(diào)度 276
9.1.2 內(nèi)存區(qū)域 278
9.2 動態(tài)內(nèi)存分配 279
9.2.1 數(shù)組分配 281
9.2.2 調(diào)整已分配內(nèi)存大小 282
9.2.3 釋放動態(tài)內(nèi)存 283
9.2.4 對齊 285
9.3 數(shù)據(jù)段的管理 289
9.4 匿名內(nèi)存映射 290
9.4.1 創(chuàng)建匿名內(nèi)存映射 291
9.4.2 映射到設(shè)備文件 dev zero 293
9.5 高 級內(nèi)存分配 294
9.5.1 調(diào)試內(nèi)存分配 297
9.5.2 獲取統(tǒng)計信息 297
9.6 基于棧的分配 298
9.6.1 把字符串復(fù)制到棧中 300
9.6.2 變長數(shù)組 301
9.7 選擇合適的內(nèi)存分配機(jī)制 302
9.8 內(nèi)存操作 303
9.8.1 字節(jié)設(shè)置 303
9.8.2 字節(jié)比較 304
9.8.3 字節(jié)移動 305
9.8.4 字節(jié)查找 306
9.8.5 字節(jié)加密 306
9.9 內(nèi)存鎖定 307
9.9.1 鎖定部分地址空間 307
9.9.2 鎖定全部地址空間 308
9.9.3 內(nèi)存解鎖 309
9.9.4 鎖的限制 310
9.9.5 該頁在物理內(nèi)存中嗎 310
9.10 投機(jī)性內(nèi)存分配策略 311
第 10章 信號 313
10.1 信號相關(guān)的概念 313
10.1.1 信號標(biāo)識符 314
10.1.2 Linux支持的信號 315
10.2 基本信號管理 320
10.2.1 等待信號 321
10.2.2 示例 322
10.2.3 執(zhí)行和繼承 324
10.2.4 把信號編號映射為字符串 325
10.3 發(fā)送信號 326
10.3.1 權(quán)限 326
10.3.2 示例 327
10.3.3 給進(jìn)程本身發(fā)送信號 327
10.3.4 給整個進(jìn)程組發(fā)送信號 327
10.4 重入 328
10.5 信號集 330
10.5.1 更多的信號集函數(shù) 331
10.5.2 獲取待處理信號 332
10.5.3 等待信號集 333
10.6 高 級信號管理 333
10.6.1 結(jié)構(gòu)體siginfo_t 336
10.6.2 si_code的相關(guān)說明 338
10.6.3 發(fā)送帶附加信息(payload)的信號 342
10.6.4 示例 343
10.7 信號是個UNIX“瑕疵”嗎 343
第 11章 時間 345
11.1 時間的數(shù)據(jù)結(jié)構(gòu) 347
11.1.1 原始表示 348
11.1.2 微秒級精度 348
11.1.3 更精 確的:納秒級精度 348
11.1.4 對時間進(jìn)行分解 349
11.1.5 進(jìn)程時間類型 350
11.2 POSIX時鐘 351
11.3 時間源精度 351
11.4 取得當(dāng)前時間 353
11.4.1 更好的接口 353
11.4.2 高 級接口 354
11.4.3 獲取進(jìn)程時間 355
11.5 設(shè)置當(dāng)前時間 356
11.5.1 設(shè)置支持高精度的時間 356
11.5.2 設(shè)置時間的高 級接口 357
11.6 玩轉(zhuǎn)時間 358
11.7 睡眠和等待 363
11.7.1 以微秒級精度睡眠 363
11.7.2 以納秒級精度睡眠 365
11.7.3 實(shí)現(xiàn)睡眠的高 級方法 366
11.7.4 sleep的可移植實(shí)現(xiàn) 368
11.7.5 超時(Overrun) 368
11.7.6 睡眠的其他方式 369
11.8 定時器 369
11.8.1 簡單的鬧鐘 369
11.8.2 計時器(interval timer) 370
11.8.3 高 級定時器 372
附錄A C語言的GCC擴(kuò)展 378
附錄B 參考書目 390
Linux系統(tǒng)編程(第2版) 作者簡介
Robert Love在很早期就一直使用Linux并貢獻(xiàn)代碼,包括對Linux內(nèi)核和GNOME桌面環(huán)境的貢獻(xiàn)。Robert Love是Google軟件工程師,是Android設(shè)計和開發(fā)團(tuán)隊成員。目前,他致力于Google的Web搜索架構(gòu)。Robert獲得了Florida大學(xué)的雙學(xué)位:計算機(jī)科學(xué)理學(xué)學(xué)士和數(shù)學(xué)文學(xué)學(xué)士。
- >
人文閱讀與收藏·良友文學(xué)叢書:一天的工作
- >
煙與鏡
- >
朝聞道
- >
山海經(jīng)
- >
名家?guī)阕x魯迅:朝花夕拾
- >
姑媽的寶刀
- >
二體千字文
- >
羅曼·羅蘭讀書隨筆-精裝