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