本書一共21章。第1、2章分別介紹了UNIX系統(tǒng)和UNIX標(biāo)準(zhǔn)化的一些內(nèi)容。第3~6章介紹了文件I/O、文件和目錄、標(biāo)準(zhǔn)I/O庫、系統(tǒng)數(shù)據(jù)文件和信息。第7~10章介紹了進(jìn)程相關(guān)事項(xiàng),包括進(jìn)程環(huán)境、進(jìn)程控制、進(jìn)程關(guān)系,以及進(jìn)程如何處理信號。第11、12章介紹了線程的內(nèi)容,包括線程本身及線程控制的策略。第13章介紹了守護(hù)進(jìn)程。第14章介紹了高級I/O。第15~17章專門介紹了IPC的各種細(xì)節(jié),包括傳統(tǒng)的IPC、網(wǎng)絡(luò)IPC和高級IPC。第18、19章對終端概念進(jìn)行了介紹,包括終端I/O和偽終端。第20、21章用兩個(gè)“長示例”將前述章節(jié)介紹的知識串聯(lián)起來,分別是一個(gè)數(shù)據(jù)庫示例和一個(gè)與網(wǎng)絡(luò)打印機(jī)通信的示例。本書適合對UNIX/Linux有一定使用經(jīng)驗(yàn)或者編程經(jīng)驗(yàn)的讀者,有C語言基礎(chǔ)的讀者,從事UNIX/Linux應(yīng)用軟件開發(fā)的讀者或者對此感興趣的讀者。
已故的W. Richard Stevens是《UNIX網(wǎng)絡(luò)編程》(這本書被公認(rèn)為是UNIX網(wǎng)絡(luò)領(lǐng)域的經(jīng)典著作)第 1 和第 2 卷的作者,也是《TCP/IP 詳解》第 1~3 卷及本書第 1 版的作者。Stephen A. Rago是NEC Laboratories America 的存儲系統(tǒng)團(tuán)隊(duì)的研究人員。在此之前,他是Bell Laboratories的開發(fā)者之一,曾開發(fā) UNIX System V Release 4。他還是《UNIX System V Network Programming》的作者、本書第 1 版的審稿人和第 2 版的合著者。
張毅峰,軟件架構(gòu)師,目前在上汽創(chuàng)新研發(fā)總院軟件部門負(fù)責(zé)智能網(wǎng)聯(lián)相關(guān)基礎(chǔ)軟件的項(xiàng)目預(yù)研、新技術(shù)導(dǎo)入及行業(yè)趨勢跟蹤等工作,是上汽集團(tuán)基金會的多個(gè)產(chǎn)學(xué)研課題負(fù)責(zé)人,也是AUTOSAR中國中心的項(xiàng)目發(fā)言人。長期從事一線研發(fā)工作,具有豐富的車載嵌入式軟硬件協(xié)同開發(fā)經(jīng)驗(yàn),負(fù)責(zé)過上汽集團(tuán)多個(gè)嵌入式項(xiàng)目的基礎(chǔ)軟件開發(fā)和管理工作,對智能化時(shí)代的車載基礎(chǔ)軟件核心要素和發(fā)展趨勢有著深刻的認(rèn)識和見解。馬樹超,騰訊后臺開發(fā)工程師,曾就職百度從事接入接出網(wǎng)關(guān)研發(fā)運(yùn)營相關(guān)工作,目前從事高性能負(fù)載均衡網(wǎng)關(guān)設(shè)計(jì)和研發(fā)工作;具有豐富的系統(tǒng)網(wǎng)絡(luò)開發(fā)經(jīng)驗(yàn)。 當(dāng)前主要關(guān)注網(wǎng)絡(luò)轉(zhuǎn)發(fā)、網(wǎng)絡(luò)安全、加解密協(xié)議等領(lǐng)域。池艷廣,中興通訊專家級軟件開發(fā)工程師、高級TL、安全編碼專家、題庫設(shè)計(jì)專家、面試官,在TCP/IP協(xié)議、WiFi驅(qū)動、嵌入式Linux等領(lǐng)域有著豐富的實(shí)戰(zhàn)經(jīng)驗(yàn)。CSDN博客專家、Linux領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、CSDN C語言社區(qū)管理員、阿里云專家博主。公眾號:Linux探索者;CSDN博客:花神廟碼農(nóng)。剛鐸,畢業(yè)于大連理工大學(xué),碩士研究生,系統(tǒng)分析與集成專業(yè)。先后就職于華為、神州數(shù)碼,曾獲得多個(gè)廠商的高級技術(shù)認(rèn)證,F(xiàn)就職于電信數(shù)智科技有限公司,從事云網(wǎng)技術(shù)架構(gòu)與落地工作,關(guān)注網(wǎng)絡(luò)和安全、云計(jì)算和人工智能等方向。
1 UNIX系統(tǒng)概述 1
1.1 引言 1
1.2 UNIX系統(tǒng)架構(gòu) 1
1.3 登錄 2
1.4 文件和目錄 4
1.5 輸入和輸出 8
1.6 程序和進(jìn)程 11
1.7 錯(cuò)誤處理 14
1.8 用戶標(biāo)識 16
1.9 信號 18
1.10 時(shí)間值 20
1.11 系統(tǒng)調(diào)用和庫函數(shù) 21
1.12 小結(jié) 23
2 UNIX標(biāo)準(zhǔn)與實(shí)現(xiàn) 24
2.1 引言 24
2.2 UNIX標(biāo)準(zhǔn)化 24
2.2.1 ISO C 24
2.2.2 IEEE POSIX 26
2.2.3 Single UNIX Specification 31
2.2.4 FIPS 32
2.3 UNIX系統(tǒng)實(shí)現(xiàn) 33
2.3.1 SVR4 33
2.3.2 4.4BSD 34
2.3.3 FreeBSD 34
2.3.4 Linux 35
2.3.5 Mac OS X 35
2.3.6 Solaris 35
2.3.7 其他UNIX系統(tǒng) 36
2.4 UNIX標(biāo)準(zhǔn)和實(shí)現(xiàn)的關(guān)系 36
2.5 限制 36
2.5.1 ISO C限制 37
2.5.2 POSIX限制 39
2.5.3 XSI限制 41
2.5.4 sysconf、pathconf和fpathconf函數(shù) 42
2.5.5 不確定的運(yùn)行時(shí)限制 49
2.6 選項(xiàng) 53
2.7 功能測試宏 57
2.8 基本系統(tǒng)數(shù)據(jù)類型 58
2.9 標(biāo)準(zhǔn)之間的沖突 59
2.10 小結(jié) 60
3 文件I/O 61
3.1 引言 61
3.2 文件描述符 61
3.3 open和openat函數(shù) 62
3.4 create函數(shù) 66
3.5 close函數(shù) 66
3.6 lseek函數(shù) 67
3.7 read函數(shù) 71
3.8 write函數(shù) 72
3.9 I/O的效率 73
3.10 文件共享 75
3.11 原子操作 78
3.12 dup和dup2函數(shù) 80
3.13 sync、fsync和fdatasync函數(shù) 81
3.14 fcntl函數(shù) 82
3.15 ioctl函數(shù) 88
3.16 /dev/fd 89
3.17 小結(jié) 90
4 文件和目錄 92
4.1 引言 92
4.2 stat、fstat、fstatat和lstat函數(shù) 92
4.3 文件類型 94
4.4 設(shè)置用戶ID和設(shè)置組ID 97
4.5 文件訪問權(quán)限 98
4.6 新文件和目錄的所有權(quán) 100
4.7 access和faccessat函數(shù) 101
4.8 umask函數(shù) 103
4.9 chmod、fchmod和fchmodat函數(shù) 105
4.10 粘著位 108
4.11 chown、fchown、fchownat和lchown函數(shù) 109
4.12 文件長度 110
4.13 文件截?cái)?112
4.14 文件系統(tǒng) 112
4.15 link、linkat、unlink、unlinkat和remove函數(shù) 115
4.16 rename和renameat函數(shù) 118
4.17 符號鏈接 119
4.18 創(chuàng)建和讀取符號鏈接 123
4.19 文件的時(shí)間 123
4.20 futimens、utimensat和utimes函數(shù) 125
4.21 mkdir、mkdirat和rmdir函數(shù) 128
4.22 讀目錄 130
4.23 chdir、fchdir和getcwd函數(shù) 134
4.24 設(shè)備特殊文件 137
4.25 文件訪問權(quán)限位 139
4.26 小結(jié) 140
5 標(biāo)準(zhǔn)I/O庫 142
5.1 引言 142
5.2 流和FILE對象 142
5.3 標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤 144
5.4 緩沖 144
5.5 打開流 147
5.6 讀流和寫流 149
5.7 每次一行I/O 151
5.8 標(biāo)準(zhǔn)I/O的效率 153
5.9 二進(jìn)制I/O 155
5.10 定位流 156
5.11 格式化I/O 158
5.12 實(shí)現(xiàn)細(xì)節(jié) 162
5.13 臨時(shí)文件 166
5.14 內(nèi)存流 170
5.15 標(biāo)準(zhǔn)I/O的替代軟件 173
5.16 小結(jié) 173
6 系統(tǒng)數(shù)據(jù)文件和信息 175
6.1 序言 175
6.2 口令文件 175
6.3 陰影口令 179
6.4 組文件 180
6.5 補(bǔ)充組ID 182
6.6 各個(gè)實(shí)現(xiàn)的差異 183
6.7 其他數(shù)據(jù)文件 184
6.8 登錄記賬 185
6.9 系統(tǒng)標(biāo)識 186
6.10 時(shí)間和日期例程 187
6.11 小結(jié) 194
7 進(jìn)程環(huán)境 196
7.1 引言 196
7.2 main函數(shù) 196
7.3 進(jìn)程終止 197
7.4 命令行參數(shù) 201
7.5 環(huán)境列表 202
7.6 C程序的內(nèi)存布局 203
7.7 共享庫 205
7.8 內(nèi)存申請 205
7.9 環(huán)境變量 209
7.10 setjmp和longjmp函數(shù) 212
7.11 getrlimit和setrlimit函數(shù) 218
7.12 小結(jié) 223
8 進(jìn)程控制 225
8.1 引言 225
8.2 進(jìn)程標(biāo)識符 225
8.3 fork函數(shù) 226
8.4 vfork函數(shù) 232
8.5 exit函數(shù) 234
8.6 wait和waitpid函數(shù) 236
8.7 waitid函數(shù) 241
8.8 wait3和wait4函數(shù) 242
8.9 競態(tài)條件 243
8.10 exec函數(shù) 247
8.11 更改用戶ID和用戶組ID 253
8.12 解釋器腳本文件 258
8.13 system函數(shù) 262
8.14 進(jìn)程記賬 267
8.15 用戶標(biāo)識 273
8.16 進(jìn)程調(diào)度 274
8.17 進(jìn)程時(shí)間 277
8.18 小結(jié) 280
9 進(jìn)程關(guān)系 282
9.1 序言 282
9.2 終端登錄 282
9.3 網(wǎng)絡(luò)登錄 287
9.4 進(jìn)程組 290
9.5 會話 292
9.6 控制終端 293
9.7 tcgetpgrp、tcsetpgrp和tcgetsid函數(shù) 295
9.8 作業(yè)控制 296
9.9 shell執(zhí)行程序 300
9.10 孤兒進(jìn)程組 304
9.11 FreeBSD實(shí)現(xiàn) 306
9.12 小結(jié) 309
10 信號 310
10.1 序言 310
10.2 信號的概念 310
10.3 signal函數(shù) 320
10.4 不可靠信號 324
10.5 中斷的系統(tǒng)調(diào)用 325
10.6 可重入函數(shù) 328
10.7 SIGCLD語義 330
10.8 可靠信號的術(shù)語和語義 333
10.9 kill和raise函數(shù) 334
10.10 alarm和pause函數(shù) 335
10.11 信號集 341
10.12 sigprocmask函數(shù) 343
10.13 sigpending函數(shù) 345
10.14 sigaction函數(shù) 347
10.15 sigsetjmp和siglongjmp函數(shù) 353
10.16 sigsuspend函數(shù) 356
10.17 abort函數(shù) 363
10.18 system函數(shù) 365
10.19 sleep、nanosleep和clock_nanosleep函數(shù) 371
10.20 sigqueue函數(shù) 374
10.21 作業(yè)控制信號 375
10.22 信號名和編號 377
10.23 小結(jié) 379
11 線程 381
11.1 序言 381
11.2 線程的概念 381
11.3 線程標(biāo)識 382
11.4 線程創(chuàng)建 384
11.5 線程終止 386
11.6 線程同步 394
11.6.1 互斥量 397
11.6.2 避免死鎖 399
11.6.3 pthread_mutex_timedlock函數(shù) 405
11.6.4 讀寫鎖 406
11.6.5 帶有超時(shí)的讀寫鎖 410
11.6.6 條件變量 411
11.6.7 自旋鎖 414
11.6.8 屏障 416
11.7 小結(jié) 419
12 線程控制 421
12.1 引言 421
12.2 線程限制 421
12.3 線程屬性 422
12.4 同步屬性 426
12.4.1 互斥鎖屬性 426
12.4.2 讀寫鎖屬性 435
12.4.3 條件變量屬性 436
12.4.4 屏障屬性 437
12.5 重入 437
12.6 線程特定數(shù)據(jù) 442
12.7 取消選項(xiàng) 446
12.8 線程和信號 448
12.9 線程和fork 452
12.10 線程和I/O 456
12.11 小結(jié) 457
13 守護(hù)進(jìn)程 458
13.1 引言 458
13.2 守護(hù)進(jìn)程的特征 458
13.3 編碼規(guī)則 461
13.4 出錯(cuò)記錄 464
13.5 單示例守護(hù)進(jìn)程 468
13.6 守護(hù)進(jìn)程的慣例 469
13.7 客戶端-服務(wù)器模型 474
13.8 小結(jié) 475
14 高級I/O 476
14.1 引言 476
14.2 非阻塞I/O 476
14.3 記錄鎖 480
14.4 I/O多路復(fù)用 494
14.4.1 select和pselect函數(shù) 497
14.4.2 poll函數(shù) 501
14.5 異步I/O 503
14.5.1 System V異步I/O 504
14.5.2 BSD異步I/O 505
14.5.3 POSIX異步I/O 505
14.6 readv和writev函數(shù) 515
14.7 readn和writen函數(shù) 517
14.8 內(nèi)存映射I/O 519
14.9 小結(jié) 526
15 進(jìn)程間通信 528
15.1 引言 528
15.2 管道 529
15.3 poepn和pclose函數(shù) 536
15.4 協(xié)同進(jìn)程 543
15.5 FIFO 547
15.6 XSI IPC 551
15.6.1 標(biāo)識符和鍵 552
15.6.2 權(quán)限結(jié)構(gòu)體 553
15.6.3 可配置性限制 554
15.6.4 優(yōu)缺點(diǎn) 554
15.7 消息隊(duì)列 556
15.8 信號量 561
15.9 共享內(nèi)存 566
15.10 POSIX信號量 573
15.11 客戶端/服務(wù)器屬性 579
15.12 小結(jié) 581
16 網(wǎng)絡(luò)IPC:套接字 584
16.1 引言 584
16.2 套接字描述符 584
16.3 地址 588
16.3.1 字節(jié)序 588
16.3.2 地址格式 589
16.3.3 地址查詢 591
16.3.4 將套接字與地址關(guān)聯(lián) 599
16.4 建立連接 600
16.5 數(shù)據(jù)傳輸 604
16.6 套接字選項(xiàng) 617
16.7 帶外數(shù)據(jù) 620
16.8 非阻塞和異步I/O 621
16.9 小結(jié) 622
17 高級進(jìn)程間通信 623
17.1 引言 623
17.2 UNIX域套接字 623
17.2.1 命名UNIX域套接字 628
17.3 唯一連接 629
17.4 傳遞文件描述符 636
17.5 第1版open服務(wù)進(jìn)程 647
17.6 第2版open服務(wù)進(jìn)程 653
17.7 小結(jié) 663
18 終端I/O 665
18.1 引言 665
18.2 概述 665
18.3 特殊輸入字符 672
18.4 獲取和設(shè)置終端屬性 677
18.5 終端選項(xiàng)標(biāo)識 677
18.6 stty命令 686
18.7 波特率函數(shù) 686
18.8 行控制函數(shù) 687
18.9 終端標(biāo)識 688
18.10 規(guī)范模式 694
18.11 非規(guī)范模式 697
18.12 終端窗口大小 704
18.13 termcap、terminfo和curses 705
18.14 小結(jié) 706
19 偽終端 708
19.1 引言 708
19.2 概述 708
19.3 打開偽終端設(shè)備 715
19.4 pty_fork函數(shù) 719
19.5 pty程序 721
19.6 使用pty程序 726
19.7 高級特性 733
19.8 小結(jié) 734
20 數(shù)據(jù)庫函數(shù)庫 736
20.1 引言 736
20.2 歷史 736
20.3 函數(shù)庫 737
20.4 實(shí)現(xiàn)概述 739
20.5 采用集中式還是分散式 743
20.6 并發(fā) 744
20.7 構(gòu)建函數(shù)庫 745
20.8 源代碼 746
20.9 性能 773
20.10 小結(jié) 778
21 與網(wǎng)絡(luò)打印機(jī)通信 780
21.1 引言 780
21.2 網(wǎng)絡(luò)打印協(xié)議 780
21.3 超文本傳輸協(xié)議 783
21.4 打印機(jī)后臺處理技術(shù) 784
21.5 源代碼 786
21.6 小結(jié) 834
附錄A 函數(shù)原型 835
附錄B 其他源代碼 871