编辑推荐
两卷本的《UNIX网络编程》是已故著名技术作家W. Richard Stevens的传世之作。卷2着重讨论如何让应用程序与在其他机器上的应用程序进行对话。
良好的进程间通信(IPC)机制是提高UNIX程序性能的关键。本书全面深入地讲解了各种进程间通信形式,包括消息传递、同步、共享内存及远程过程调用(RPC)。书中包含了大量经过优化的源代码,帮助读者加深理解。这些源代码可以从本书网站下载。
本书是网络研究和开发人员公认的权威参考书,无论网络编程的初学者还是网络专家都会大受裨益。
内容简介
本书是一部UNIX 网络编程的经典之作!进程间通信(IPC)几乎是所有Unix 程序性能的关键,理解IPC 也是理解如何开发不同主机间网络应用程序的必要条件。本书从对Posix IPC 和System V IPC 的内部结构开始讨论,全面深入地介绍了4 种IPC 形式:消息传递(管道、FIFO、消息队列)、同步(互斥锁、条件变量、读写锁、文件与记录锁、信号量)、共享内存(匿名共享内存、具名共享内存)及远程过程调用(Solaris门、Sun RPC)。附录中给出了测量各种IPC 形式性能的方法。
本书内容详尽且具权威性,几乎每章都提供精选的习题,并提供了部分习题的答案,是网络研究和开发人员理想的参考书。
目录
- 第一部分 简介
- 第1章 简介
- 1.1 概述
- 1.2 进程、线程与信息共享
- 1.3 IPC对象的持续性
- 1.4 名字空间
- 1.5 fork、exec和exit对IPC对象的影响
- 1.6 出错处理:包裹函数
- 1.7 Unix标准
- 1.8 书中IPC例子索引表
- 1.9 小结
- 习题
- 第2章 Posix IPC
- 2.1 概述
- 2.2 IPC名字
- 2.3 创建与打开IPC通道
- 2.4 IPC权限
- 2.5 小结
- 第3章 System V IPC
- 3.1 概述
- 3.2 key_t键和ftok函数
- 3.3 ipc_perm结构
- 3.4 创建与打开IPC通道
- 3.5 IPC权限
- 3.6 标识符重用
- 3.7 ipcs和ipcrm程序
- 3.8 内核限制
- 3.9 小结
- 第二部分 消息传递
- 第4章 管道和FIFO
- 4.1 概述
- 4.2 一个简单的客户—服务器例子
- 4.3 管道
- 4.4 全双工管道
- 4.5 popen和pclose函数
- 4.6 FIFO
- 4.7 管道和FIFO的额外属性
- 4.8 单个服务器,多个客户
- 4.9 对比迭代服务器与并发服务器
- 4.10 字节流与消息
- 4.11 管道和FIFO限制
- 4.12 小结
- 第5章 Posix消息队列
- 5.1 概述
- 5.2 mq_open、mq_close和mq_unlink函数
- 5.3 mq_getattr和mq_setattr函数
- 5.4 mq_send和mq_receive函数
- 5.5 消息队列限制
- 5.6 mq_notify函数
- 5.7 Posix实时信号
- 5.8 使用内存映射I/O实现Posix消息队列
- 5.9 小结
- 第6章 System V消息队列
- 6.1 概述
- 6.2 msgget函数
- 6.3 msgsnd函数
- 6.4 msgrcv函数
- 6.5 msgctl函数
- 6.6 简单的程序
- 6.7 客户—服务器例子
- 6.8 复用消息
- 6.9 消息队列上使用select和poll
- 6.10 消息队列限制
- 6.11 小结
- 第三部分 同步
- 第7章 互斥锁和条件变量
- 7.1 概述
- 7.2 互斥锁:上锁与解锁
- 7.3 生产者—消费者问题
- 7.4 对比上锁与等待
- 7.5 条件变量:等待与信号发送
- 7.6 条件变量:定时等待和广播
- 7.7 互斥锁和条件变量的属性
- 7.8 小结
- 第8章 读写锁
- 8.1 概述
- 8.2 获取与释放读写锁
- 8.3 读写锁属性
- 8.4 使用互斥锁和条件变量实现读写锁
- 8.5 线程取消
- 8.6 小结
- 第9章 记录上锁
- 9.1 概述
- 9.2 对比记录上锁与文件上锁
- 9.3 Posix fcntl记录上锁
- 9.4 劝告性上锁
- 9.5 强制性上锁
- 9.6 读出者和写入者的优先级
- 9.7 启动一个守护进程的唯一副本
- 9.8 文件作锁用
- 9.9 NFS上锁
- 9.10 小结
- 第10章 Posix信号量
- 10.1 概述
- 10.2 sem_open、sem_close和sem_unlink函数
- 10.3 sem_wait和sem_trywait函数
- 10.4 sem_post和sem_getvalue函数
- 10.5 简单的程序
- 10.6 生产者—消费者问题
- 10.7 文件上锁
- 10.8 sem_init和sem_destroy函数
- 10.9 多个生产者,单个消费者
- 10.10 多个生产者,多个消费者
- 10.11 多个缓冲区
- 10.12 进程间共享信号量
- 10.13 信号量限制
- 10.14 使用FIFO实现信号量
- 10.15 使用内存映射I/O实现信号量
- 10.16 使用System V信号量实现Posix信号量
- 10.17 小结
- 第11章 System V 信号量
- 11.1 概述
- 11.2 semget函数
- 11.3 semop函数
- 11.4 semctl函数
- 11.5 简单的程序
- 11.6 文件上锁
- 11.7 信号量限制
- 11.8 小结
- 第四部分 共享内存区
- 第12章 共享内存区介绍
- 12.1 概述
- 12.2 mmap、munmap和msync函数
- 12.3 在内存映射文件中给计数器持续加
- 12.4 4.4BSD匿名内存映射
- 12.5 SVR4/dev/zero内存映射
- 12.6 访问内存映射的对象
- 12.7 小结
- 第13章 Posix共享内存区
- 13.1 概述
- 13.2 shm_open和shm_unlink函数
- 13.3 ftruncate和fstat函数
- 13.4 简单的程序
- 13.5 给一个共享的计数器持续加1
- 13.6 向一个服务器发送消息
- 13.7 小结
- 第14章 System V共享内存区
- 14.1 概述
- 14.2 shmget函数
- 14.3 shmat函数
- 14.4 shmdt函数
- 14.5 shmctl函数
- 14.6 简单的程序
- 14.7 共享内存区限制
- 14.8 小结
- 第五部分 远程过程调用
- 第15章 门
- 15.1 概述
- 15.2 door_call函数
- 15.3 door_create函数
- 15.4 door_return函数
- 15.5 door_cred函数
- 15.6 door_info函数
- 15.7 例子
- 15.8 描述符传递
- 15.9 door_sever_create函数
- 15.10 door_bind、door_unbind和door_revoke函数
- 15.11 客户或服务器的过早终止
- 15.12 小结
- 第16章 Sun RPC
- 16.1 概述
- 16.2 多线程化
- 16.3 服务器捆绑
- 16.4 认证
- 16.5 超时和重传
- 16.6 调用语义
- 16.7 客户或服务器的过早终止
- 16.8 XDR:外部数据表示
- 16.9 RPC分组格式
- 16.10 小结
- 后记
- 附录A 性能测量
- 附录B 线程入门
- 附录C 杂凑的源代码
- 附录D 精选习题解答
- 参考文献
- 索引