第1章 程序和进程 1
1.1 导言 1
1.2 库函数 2
1.3 系统调用 3
1.4 链接目标码 4
1.5 管理失败 4
1.6 可执行文件格式 8
1.7 系统存储区 8
1.8 进程存储区 8
1.9 U存储区 9
1.10 进程存储区地址 9
1.11 创建一个进程 12
1.12 小结 14
第2章 进程环境 15
2.1 导言 15
2.2 进程ID 15
2.3 父进程ID 16
2.4 进程组ID 16
2.5 允许位 19
2.6 真实与有效的用户ID和组ID 21
2.7 文件系统信息 22
2.8 文件信息 23
2.9 进程资源限制 28
2.10 信号处理 32
2.11 命令行值 33
2.12 环境变量 36
2.13 小结 41
第3章 使用进程 42
3.1 导言 42
3.2 再论系统调用fork 42
3.3 exec的宠臣 44
3.3.1 execlp 46
3.3.2 execvp 48
3.4 同时使用fork和exec 50
3.5 结束一个进程 54
3.6 进程等待 57
3.7 小结 65
第4章 基本通信 66
4.1 导言 66
4.2 锁文件 66
4.3 锁定文件 73
4.4 再论信号 79
4.5 信号和信号管理调用 82
4.6 小结 92
第5章 管道 93
5.1 导言 93
5.2 未命名管道 96
5.3 命名管道 104
5.4 小结 111
第6章 消息队列 112
6.1 导言 112
6.2 IPC系统调用简介 113
6.3 创建一个消息队列 117
6.4 消息队列的控制 120
6.5 消息队列的操作 123
6.6 一个客户-服务器消息队列的例子 125
6.7 小结 131
第7章 信号量 132
7.1 导言 132
7.2 创建及访问信号量集合 132
7.3 信号量控制 137
7.3.1 信号量控制细节 137
7.4 信号量操作 142
7.4.1 信号量操作细节 143
7.5 小结 151
第8章 共享内存 153
8.1 导言 153
8.2 创建一个共享内存段 153
8.3 共享内存控制 157
8.4 共享内存操作 158
8.5 使用文件作为共享内存 172
8.6 小结 178
第9章 远程过程调用 179
9.1 导言 179
9.2 系统远程命令的执行 180
9.3 在C程序中执行远程命令 182
9.4 将本地函数调用转化为远程过程 183
9.5 调试RPC应用程序 196
9.6 使用RPCGEN产生模板和MAKEFILE 197
9.7 任意数据类型的编码和解码 206
9.8 利用广播寻找RPC设备 212
9.9 小结 216
第10章 套接字 217
10.1 导言 217
10.2 通信基础 218
10.2.1 网络地址 218
10.2.2 域——网络和通信 219
10.2.3 协议族 219
10.2.4 套接字类型 220
10.3 使用socketpair的进程间通信 221
10.4 套接字——面向连接的范例 225
10.4.1 一个UNIX域流套接字的例子 231
10.4.2 一个因特网域流套接字的例子 235
10.5 套接字——无连接的范例 245
10.5.1 一个UNIX域数据报套接字的例子 248
10.5.2 因特网域数据报套接字的例子 253
10.6 多路I/O选择技术 257
10.7 查看数据 263
10.8 带外消息 266
10.9 小结 271
第11章 线程 272
11.1 导言 272
11.2 创建一个线程 274
11.3 退出线程 275
11.4 基本线程管理 276
11.5 线程属性 280
11.6 调度线程 284
11.7 在线程中使用信号 287
11.8 线程同步 291
11.8.1 互斥锁变量 291
11.8.2 条件变量 304
11.8.3 读/写锁 311
11.8.4 多线程信号量 318
11.9 线程说明的数据 323
11.10 调试多线程程序 335
11.10.1 dbx 335
11.10.2 lock_lint实用程序 340
11.11 小结 343
附录A 使用UNIX联机手册页 345
A.1 手册页小节 345
A.2 联机手册页格式 346
A.3 标准C库系统调用/库函数 348
附录B UNIX错误信息 352
附录C RPC语法图 356
C.1 介绍 356
C.2 RPC定义 356
C.2.1 程序定义 357
C.2.2 常量定义 357
C.2.3 枚举定义 358
C.2.4 类型定义 358
C.2.5 结构定义 359
C.2.6 联合定义 359
C.3 RPC关键字 360
C.4 一些RPC实例 360