第1章 UNIX基础知识 1
1.1 引言 1
1.2 UNIX体系结构 1
1.3 登录 2
1.4 文件和目录 4
1.5 输入和输出 8
1.6 程序和进程 10
1.7 出错处理 14
1.8 用户标识 16
1.9 信号 18
1.10 时间值 20
1.11 系统调用和库函数 21
1.12 小结 23
第2章 UNIX标准及实现 25
2.1 引言 25
2.2 UNIX标准化 25
2.2.1 ISO C 25
2.2.2 IEEE POSIX 26
2.2.3 Single UNIX Specification 30
2.2.4 FIPS 32
2.3 UNIX系统实现 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系统 35
2.4 标准和实现的关系 36
2.5 限制 36
2.5.1 ISO C限制 37
2.5.2 POSIX限制 38
2.5.3 XSI限制 41
2.5.4 函数sysconf、 pathconf和fpathconf 42
2.5.5 不确定的运行时限制 49
2.6 选项 53
2.7 功能测试宏 57
2.8 基本系统数据类型 58
2.9 标准之间的冲突 58
2.10 小结 60
第3章 文件I/O 61
3.1 引言 61
3.2 文件描述符 61
3.3 函数open和openat 62
3.4 函数creat 66
3.5 函数close 66
3.6 函数lseek 66
3.7 函数read 71
3.8 函数write 72
3.9 I/O的效率 72
3.10 文件共享 74
3.11 原子操作 77
3.12 函数dup和dup2 79
3.13 函数sync、 fsync和fdatasync 81
3.14 函数fcntl 82
3.15 函数ioctl 87
3.16 /dev/ fd 88
3.17 小结 90
第4章 文件和目录 93
4.1 引言 93
4.2 函数stat、fstat、fstatat和lstat 93
4.3 文件类型 95
4.4 设置用户ID和设置组ID 98
4.5 文件访问权限 99
4.6 新文件和目录的所有权 101
4.7 函数access和faccessat 102
4.8 函数umask 104
4.9 函数chmod、 fchmod和fchmodat 106
4.10 粘着位 108
4.11 函数chown、 f chown、fchownat和lchown 109
4.12 文件长度 111
4.13 文件截断 112
4.14 文件系统 113
4.15 函数link、 linkat、 unlink、unlinkat和remove 116
4.16 函数rename和renameat 119
4.17 符号链接 120
4.18 创建和读取符号链接 123
4.19 文件的时间 124
4.20 函数futimens、 utimensat和utimes 126
4.21 函数mkdir、 mkdirat和rmdir 129
4.22 读目录 130
4.23 函数chdir、 fchdir和getcwd 135
4.24 设备特殊文件 137
4.25 文件访问权限位小结 140
4.26 小结 140
第5章 标准I/O库 143
5.1 引言 143
5.2 流和FILE对象 143
5.3 标准输入、标准输出和标准错误 145
5.4 缓冲 145
5.5 打开流 148
5.6 读和写流 150
5.7 每次一行I/O 152
5.8 标准I/O的效率 153
5.9 二进制I/O 156
5.10 定位流 157
5.11 格式化I/O 159
5.12 实现细节 164
5.13 临时文件 167
5.14 内存流 171
5.15 标准I/O的替代软件 174
5.16 小结 175
第6章 系统数据文件和信息 177
6.1 引言 177
6.2 口令文件 177
6.3 阴影口令 181
6.4 组文件 182
6.5 附属组ID 183
6.6 实现区别 184
6.7 其他数据文件 185
6.8 登录账户记录 186
6.9 系统标识 187
6.10 时间和日期例程 189
6.11 小结 196
第7章 进程环境 197
7.1 引言 197
7.2 main函数 197
7.3 进程终止 198
7.4 命令行参数 203
7.5 环境表 203
7.6 C程序的存储空间布局 204
7.7 共享库 206
7.8 存储空间分配 207
7.9 环境变量 210
7.10 函数setjmp和longjmp 213
7.11 函数getrlimit和setrlimit 220
7.12 小结 225
第8章 进程控制 227
8.1 引言 227
8.2 进程标识 227
8.3 函数fork 229
8.4 函数vfork 234
8.5 函数exit 236
8.6 函数wait和waitpid 238
8.7 函数waitid 244
8.8 函数wait3和wait 4 245
8.9 竞争条件 245
8.10 函数exec 249
8.11 更改用户ID和更改组ID 255
8.12 解释器文件 260
8.13 函数system 264
8.14 进程记账 269
8.15 用户标识 275
8.16 进程调度 276
8.17 进程时间 280
8.18 小结 282
第9章 进程关系 285
9.1 引言 285
9.2 终端登录 285
9.3 网络登录 290
9.4 进程组 293
9.5 会话 295
9.6 控制终端 296
9.7 函数tcgetpgrp、 tcsetpgrp和tcgetsid 298
9.8 作业控制 299
9.9 shell执行程序 303
9.10 孤儿进程组 307
9.11 FreeBSD实现 310
9.12 小结 312
第10章 信号 313
10.1 引言 313
10.2 信号概念 313
10.3 函数signal 323
10.4 不可靠的信号 326
10.5 中断的系统调用 327
10.6 可重入函数 330
10.7 SIGCLD语义 332
10.8 可靠信号术语和语义 335
10.9 函数kill和raise 336
10.10 函数alarm和pause 338
10.11 信号集 344
10.12 函数sigprocmask 346
10.13 函数sigpending 347
10.14 函数 sigaction 349
10.15 函数sigsetjmp和siglongjmp 355
10.16 函数sigsuspend 359
10.17 函数abort 365
10.18 函数system 367
10.19 函数sleep、 nanosleep和clock_nanosleep 373
10.20 函数sigqueue 376
10.21 作业控制信号 377
10.22 信号名和编号 379
10.23 小结 381
第11章 线程 383
11.1 引言 383
11.2 线程概念 383
11.3 线程标识 384
11.4 线程创建 385
11.5 线程终止 388
11.6 线程同步 397
11.6.1 互斥量 399
11.6.2 避免死锁 402
11.6.3 函数pthread mutex timedlock 407
11.6.4 读写锁 409
11.6.5 带有超时的读写锁 413
11.6.6 条件变量 413
11.6.7 自旋锁 417
11.6.8 屏障 418
11.7 小结 422
第12章 线程控制 425
12.1 引言 425
12.2 线程限制 425
12.3 线程属性 426
12.4 同步属性 430
12.4.1 互斥量属性 430
12.4.2 读写锁属性 439
12.4.3 条件变量属性 440
12.4.4 屏障属性 441
12.5 重入 442
12.6 线程特定数据 446
12.7 取消选项 451
12.8 线程和信号 453
12.9 线程和fork 457
12.10 线程和I/O 461
12.11 小结 462
第13章 守护进程 463
13.1 引言 463
13.2 守护进程的特征 463
13.3 编程规则 466
13.4 出错记录 469
13.5 单实例守护进程 473
13.6 守护进程的惯例 474
13.7 客户进程-服务器进程模型 479
13.8 小结 480
第14章 高级I/O 481
14.1 引言 481
14.2 非阻塞I/O 481
14.3 记录锁 485
14.4 I/O多路转接 500
14.4.1 函数select和pselect 502
14.4.2 函数poll 506
14.5 异步I/O 509
14.5.1 System V异步I/O 510
14.5.2 BSD异步I/O 510
14.5.3 POSIX异步I/O 511
14.6 函数readv和writev 521
14.7 函数readn和writen 523
14.8 存储映射I/O 525
14.9 小结 531
第15章 进程间通信 533
15.1 引言 533
15.2 管道 534
15.3 函数popen和pclose 541
15.4 协同进程 548
15.5 FIFO 552
15.6 XSIIPC 556
15.6.1 标识符和键 556
15.6.2 权限结构 558
15.6.3 结构限制 559
15.6.4 优点和缺点 559
15.7 消息队列 561
15.8 信号量 565
15.9 共享存储 571
15.10 POSIX信号量 579
15.11 客户进程-服务器进程属性 585
15.12 小结 587
第16章 网络IPC:套接字 589
16.1 引言 589
16.2 套接字描述符 590
16.3 寻址 593
16.3.1 字节序 593
16.3.2 地址格式 595
16.3.3 地址查询 597
16.3.4 将套接字与地址关联 604
16.4 建立连接 605
16.5 数据传输 610
16.6 套接字选项 623
16.7 带外数据 626
16.8 非阻塞和异步I/O 627
16.9 小结 628
第17章 高级进程间通信 629
17.1 引言 629
17.2 UNIX域套接字 629
17.2.1 命名UNIX域套接字 634
17.3 唯一连接 635
17.4 传送文件描述符 642
17.5 open服务器进程第1版 653
17.6 open服务器进程第2版 659
17.7 小结 669
第18章 终端I/O 671
18.1 引言 671
18.2 概述 671
18.3 特殊输入字符 678
18.4 获得和设置终端属性 683
18.5 终端选项标志 683
18.6 stty命令 691
18.7 波特率函数 692
18.8 行控制函数 693
18.9 终端标识 694
18.10 规范模式 700
18.11 非规范模式 703
18.12 终端窗口大小 710
18.13 termcap、terminfo和curses 712
18.14 小结 713
第19章 伪终端 715
19.1 引言 715
19.2 概述 715
19.3 打开伪终端设备 722
19.4 函数pty_fork 726
19.5 pty程序 729
19.6 使用pty程序 733
19.7 高级特性 740
19.8 小结 741
第20章 数据库函数库 743
20.1 引言 743
20.2 历史 743
20.3 函数库 744
20.4 实现概述 746
20.5 集中式或非集中式 750
20.6 并发 752
20.7 构造函数库 753
20.8 源代码 753
20.9 性能 781
20.10 小结 786
第21章 与网络打印机通信 789
21.1 引言 789
21.2 网络打印协议 789
21.3 超文本传输协议HTTP 792
21.4 打印假脱机技术 793
21.5 源代码 795
21.6 小结 843
附录A函数原型 845
附录B其他源代码 895
B.1本书使用的头文件 895
B.2标准出错例程 898
附录C部分习题答案 905
参考书目 947