第1章 UNIX基础知识 1
1.1引言 1
1.2 UNIX体系结构 1
1.3登录 1
1.4文件和目录 3
1.5输入和输出 6
1.6程序和进程 8
1.7出错处理 11
1.8用户标识 13
1.9信号 14
1.10时间值 16
1.11系统调用和库函数 17
1.12小结 18
习题 18
第2章 UNIX标准及实现 20
2.1引言 20
2.2 UNIX标准化 20
2.2.1 ISO C 20
2.2.2 IEEE POSIX 21
2.2.3 Single UNIX Specification 25
2.2.4 FIPS 26
2.3 UNIX系统实现 26
2.3.1 SVR4 27
2.3.2 4.4BSD 27
2.3.3 FreeBSD 28
2.3.4 Linux 28
2.3.5 Mac OS X 28
2.3.6 Solaris 28
2.3.7其他UNIX系统 29
2.4标准和实现的关系 29
2.5限制 29
2.5.1 ISO C限制 30
2.5.2 POSIX限制 31
2.5.3 XSI限制 33
2.5.4函数sysconf、pathconf和fpathconf 33
2.5.5不确定的运行时限制 40
2.6选项 43
2.7功能测试宏 46
2.8基本系统数据类型 47
2.9标准之间的冲突 48
2.10小结 48
习题 48
第3章 文件I/O 49
3.1引言 49
3.2文件描述符 49
3.3函数open和openat 50
3.4函数creat 52
3.5函数close 53
3.6函数lseek 53
3.7函数read 57
3.8函数write 57
3.9 I/O的效率 58
3.10文件共享 59
3.11原子操作 62
3.12函数dup和dup2 63
3.13函数sync、fsync和fdatasync 65
3.14函数fcntl 65
3.15 函数ioctl 70
3.16 /dev/fd 71
3.17小结 72
习题 72
第4章 文件和目录 74
4.1引言 74
4.2函数stat、fstat、fstatat和lstat 74
4.3文件类型 75
4.4设置用户ID和设置组ID 78
4.5文件访问权限 79
4.6新文件和目录的所有权 80
4.7函数access和faccessat 81
4.8函数umask 83
4.9函数chmod、fchmod和fchmodat 84
4.10粘着位 87
4.11函数chown、fchown、fchownat和lchown 88
4.12文件长度 89
4.13文件截断 90
4.14文件系统 90
4.15函数link、linkat、unlink、unlinkat和remove 93
4.16函数rename和renameat 95
4.17符号链接 96
4.18创建和读取符号链接 99
4.19文件的时间 99
4.20函数futimens、utimensat和utimes 101
4.21函数mkdir、mkdirat和rmdir 103
4.22读目录 104
4.23函数chdir、fchdir和getcwd 108
4.24设备特殊文件 110
4.25文件访问权限位小结 112
4.26小结 113
习题 113
第5章 标准I/O库 115
5.1引言 115
5.2流和FILE对象 115
5.3标准输入、标准输出和标准错误 116
5.4缓冲 116
5.5打开流 118
5.6读和写流 120
5.7每次一行I/O 122
5.8标准I/O的效率 123
5.9二进制I/O 125
5.10定位流 126
5.11格式化I/O 127
5.12实现细节 131
5.13临时文件 134
5.14内存流 137
5.15标准I/O的替代软件 140
5.16小结 140
习题 140
第6章 系统数据文件和信息 142
6.1引言 142
6.2口令文件 142
6.3阴影口令 145
6.4组文件 146
6.5附属组ID 147
6.6实现区别 148
6.7其他数据文件 148
6.8登录账户记录 149
6.9系统标识 150
6.10时间和日期例程 151
6.11小结 157
习题 157
第7章 进程环境 158
7.1引言 158
7.2 main函数 158
7.3进程终止 158
7.4命令行参数 162
7.5环境表 163
7.6 C程序的存储空间布局 163
7.7共享库 165
7.8存储空间分配 165
7.9环境变量 168
7.10函数setjmp和longjmp 170
7.11函数getrlimit和setrlimit 175
7.12小结 180
习题 180
第8章 进程控制 181
8.1引言 181
8.2进程标识 181
8.3函数fork 182
8.4函数vfork 187
8.5函数exit 188
8.6函数wait和waitpid 190
8.7函数waitid 194
8.8函数wait3和wait 4 195
8.9竞争条件 196
8.10函数exec 199
8.11更改用户ID和更改组ID 204
8.12解释器文件 207
8.13函数system 211
8.14进程会计 215
8.15用户标识 220
8.16进程调度 221
8.17进程时间 224
8.18小结 226
习题 226
第9章 进程关系 228
9.1引言 228
9.2终端登录 228
9.3网络登录 231
9.4进程组 233
9.5会话 234
9.6控制终端 235
9.7函数tcgetpgrp、tcsetpgrp和tcgetsid 237
9.8作业控制 237
9.9 shell执行程序 240
9.10孤儿进程组 244
9.11 FreeBSD实现 246
9.12小结 248
习题 248
第10章 信号 249
10.1引言 249
10.2信号概念 249
10.3函数signal 256
10.4不可靠的信号 259
10.5中断的系统调用 260
10.6可重入函数 262
10.7 SIGCLD语义 264
10.8可靠信号术语和语义 266
10.9函数kill和raise 267
10.10 函数alarm和pause 268
10.11信号集 273
10.12函数sigprocmask 275
10.13函数sigpending 276
10.14函数sigaction 278
10.15函数sigsetjmp和siglongjmp 283
10.16函数sigsuspend 286
10.17函数abort 291
10.18函数system 293
10.19函数sleep、nanosleep和clock_nanosleep 298
10.20函数sigqueue 300
10.21作业控制信号 301
10.22信号名和编号 303
10.23小结 305
习题 305
第11章 线程 307
11.1引言 307
11.2线程概念 307
11.3线程标识 308
11.4线程创建 309
11.5线程终止 311
11.6线程同步 318
11.6.1互斥量 320
11.6.2避免死锁 322
11.6.3函数pthread_mutex_timedlock 327
11.6.4读写锁 328
11.6.5带有超时的读写锁 332
11.6.6条件变量 332
11.6.7自旋锁 335
11.6.8屏障 336
11.7小结 340
习题 340
第12章 线程控制 341
12.1引言 341
12.2线程限制 341
12.3线程属性 342
12.4同步属性 345
12.4.1互斥量属性 345
12.4.2读写锁属性 352
12.4.3条件变量属性 353
12.4.4屏障属性 354
12.5重入 354
12.6线程特定数据 358
12.7取消选项 362
12.8线程和信号 364
12.9线程和fork 367
12.10线程和I/O 370
12.11小结 371
习题 371
第13章 守护进程 372
13.1引言 372
13.2守护进程的特征 372
13.3编程规则 374
13.4出错记录 377
13.5单实例守护进程 380
13.6守护进程的惯例 381
13.7客户进程-服务器进程模型 386
13.8小结 386
习题 387
第14章 高级I/O 388
14.1引言 388
14.2非阻塞I/O 388
14.3记录锁 391
14.4 I/O多路转接 403
14.4.1函数select和pselect 404
14.4.2函数poll 408
14.5异步I/O 410
14.5.1 System V异步I/O 410
14.5.2 BSD异步I/O 411
14.5.3 POSIX异步I/O 411
14.6函数readv和writev 419
14.7函数readn和writen 421
14.8存储映射I/O 422
14.9小结 428
习题 428
第15章 进程间通信 429
15.1引言 429
15.2管道 430
15.3函数popen和pclose 436
15.4协同进程 441
15.5 FIFO 445
15.6 XSIIPC 448
15.6.1标识符和键 448
15.6.2权限结构 449
15.6.3结构限制 450
15.6.4优点和缺点 450
15.7消息队列 451
15.8信号量 455
15.9共享存储 459
15.10 POSIX信号量 465
15.11客户进程-服务器进程属性 470
15.12小结 472
习题 472
第16章 网络IPC:套接字 474
16.1引言 474
16.2套接字描述符 474
16.3寻址 477
16.3.1字节序 477
16.3.2地址格式 478
16.3.3地址查询 480
16.3.4将套接字与地址关联 486
16.4建立连接 487
16.5数据传输 491
16.6套接字选项 502
16.7带外数据 504
16.8非阻塞和异步I/O 505
16.9小结 506
习题 506
第17章 高级进程间通信 507
17.1引言 507
17.2 UNIX域套接字 507
17.3唯一连接 512
17.4传送文件描述符 518
17.5打开服务器进程第1版 527
17.6打开服务器进程第2版 533
17.7小结 542
习题 542
第18章 终端I/O 544
18.1引言 544
18.2概述 544
18.3特殊输入字符 549
18.4获得和设置终端属性 553
18.5终端选项标志 554
18.6stty命令 560
18.7波特率函数 560
18.8行控制函数 561
18.9终端标识 562
18.10规范模式 567
18.11非规范模式 570
18.12终端窗口大小 576
18.13 termcap、terminfo和curses 578
18.14小结 578
习题 579
第19章 伪终端 580
19.1引言 580
19.2概述 580
19.3打开伪终端设备 585
19.4函数pty_fork 588
19.5 pty程序 590
19.6使用pty程序 595
19.7高级特性 600
19.8小结 601
习题 601
第20章 数据库函数库 603
20.1引言 603
20.2历史 603
20.3函数库 604
20.4实现概述 605
20.5集中式或非集中式 608
20.6并发 610
20.7构造函数库 610
20.8源代码 611
20.9性能 635
20.10小结 639
习题 639
第21章 与网络打印机通信 640
21.1引言 640
21.2网络打印协议 640
21.3超文本传输协议HTTP 642
21.4打印假脱机技术 643
21.5源代码 644
21.6小结 684
习题 684
附录A 函数原型 685
附录B 其他源代码 721
附录C 部分习题答案 730
参考书目 763
索引 770