具体描述
《UNIX环境高级编程(第3版)》是被誉为UNIX编程“圣经”的Advanced Programming in the UNIX Environment一书的第3版。在本书第2版出版后的8年中,UNIX行业发生了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了众多应用实例,包括如何创建数据库函数库以及如何与网络打印机通信等。此外,还在附录中给出了函数原型和部分习题的答案。
《UNIX环境高级编程(第3版)》内容权威,概念清晰,阐述精辟,对于所有层次UNIX/Linux程序员都是一本不可或缺的参考书。
作者简介
W. Richard Stevens,国际知名的UNIX和网络专家,备受赞誉的技术作家。生前著有多部经典的传世之作,包括《UNIX网络编程》(两卷本)、《TCP/IP详解》(三卷本)和本书第1版。
Stephen A. Rago,资深UNIX程序员,目前任NEC美国实验室存储系统集团研究员。之前是贝尔实验室的UNIX系统V版本4的开发人员之一。著有《UNIX系统V网络编程》,并曾担任本书第1版的技术审校和第2版的共同作者。
戚正伟,博士,上海交通大学软件学院副教授,微软亚洲研究院(2008)和美国CMU大学(2011-2012)访问学者。研究方向为系统软件和程序分析,著有《New Blue Pill深入理解硬件虚拟机》和《嵌入式GIS开发及应用》等书。
张亚英,博士,同济大学电子与信息工程学院计算机系副教授,研究方向为分布与移动计算、嵌入式系统以及系统软件等。
尤晋元,上海交通大学计算机科学及工程系教授、博士生导师。在科研方面,主要从事操作系统和分布对象计算技术方面的研究。在教学方面,长期承担操作系统及分布计算等课程的教学工作。主编和翻译了多本操作系统教材和参考书,包括《UNIX操作系统教程》、《UNIX高级编程技术》、《UNIX环境高级编程》和《操作系统:设计与实现》等。
目录信息
1.1 引言
1.2 UNIX体系结构
1.3 登录
1.4 文件和目录
1.5 输入和输出
1.6 程序和进程
1.7 出错处理
1.8 用户标识
1.9 信号
1.10 时间值
1.11 系统调用和库函数
1.12 小结
习题
第2章 UNIX标准及实现
2.1 引言
2.2 UNIX标准化
2.2.1 ISO C
2.2.2 IEEE POSIX
2.2.3 Single UNIX Specification
2.2.4 FIPS
2.3 UNIX系统实现
2.3.1 SVR4
2.3.2 4.4BSD
2.3.3 FreeBSD
2.3.4 Linux
2.3.5 Mac OS X
2.3.6 Solaris
2.3.7 其他UNIX系统
2.4 标准和实现的关系
2.5 限制
2.5.1 ISO C限制
2.5.2 POSIX限制
2.5.3 XSI限制
2.5.4 函数sysconf、pathconf和fpathconf
2.5.5 不确定的运行时限制
2.6 选项
2.7 功能测试宏
2.8 基本系统数据类型
2.9 标准之间的冲突
2.10 小结
习题
第3章 文件I/O
3.1 引言
3.2 文件描述符
3.3 函数open和openat
3.4 函数creat
3.5 函数close
3.6 函数lseek
3.7 函数read
3.8 函数write
3.9 I/O的效率
3.10 文件共享
3.11 原子操作
3.12 函数dup和dup2
3.13 函数sync、fsync和fdatasync
3.14 函数fcntl
3.15 函数ioctl
3.16 /dev/fd
3.17 小结
习题
第4章 文件和目录
4.1 引言
4.2 函数stat、fstat、fstatat和lstat
4.3 文件类型
4.4 设置用户ID和设置组ID
4.5 文件访问权限
4.6 新文件和目录的所有权
4.7 函数access和faccessat
4.8 函数umask
4.9 函数chmod、fchmod和fchmodat
4.10 粘着位
4.11 函数chown、fchown、fchownat和lchown
4.12 文件长度
4.13 文件截断
4.14 文件系统
4.15 函数link、linkat、unlink、unlinkat和remove
4.16 函数rename和renameat
4.17 符号链接
4.18 创建和读取符号链接
4.19 文件的时间
4.20 函数futimens、utimensat和utimes
4.21 函数mkdir、mkdirat和rmdir
4.22 读目录
4.23 函数chdir、fchdir和getcwd
4.24 设备特殊文件
4.25 文件访问权限位小结
4.26 小结
习题
第5章 标准I/O库
5.1 引言
5.2 流和FILE对象
5.3 标准输入、标准输出和标准错误
5.4 缓冲
5.5 打开流
5.6 读和写流
5.7 每次一行I/O
5.8 标准I/O的效率
5.9 二进制I/O
5.10 定位流
5.11 格式化I/O
5.12 实现细节
5.13 临时文件
5.14 内存流
5.15 标准I/O的替代软件
5.16 小结
习题
第6章 系统数据文件和信息
6.1 引言
6.2 口令文件
6.3 阴影口令
6.4 组文件
6.5 附属组ID
6.6 实现区别
6.7 其他数据文件
6.8 登录账户记录
6.9 系统标识
6.10 时间和日期例程
6.11 小结
习题
第7章 进程环境
7.1 引言
7.2 main函数
7.3 进程终止
7.4 命令行参数
7.5 环境表
7.6 C程序的存储空间布局
7.7 共享库
7.8 存储空间分配
7.9 环境变量
7.10 函数setjmp和longjmp
7.11 函数getrlimit和setrlimit
7.12 小结
习题
第8章 进程控制
8.1 引言
8.2 进程标识
8.3 函数fork
8.4 函数vfork
8.5 函数exit
8.6 函数wait和waitpid
8.7 函数waitid
8.8 函数wait3和wait4
8.9 竞争条件
8.10 函数exec
8.11 更改用户ID和更改组ID
8.12 解释器文件
8.13 函数system
8.14 进程会计
8.15 用户标识
8.16 进程调度
8.17 进程时间
8.18 小结
习题
第9章 进程关系
9.1 引言
9.2 终端登录
9.3 网络登录
9.4 进程组
9.5 会话
9.6 控制终端
9.7 函数tcgetpgrp、tcsetpgrp和tcgetsid
9.8 作业控制
9.9 shell执行程序
9.10 孤儿进程组
9.11 FreeBSD实现
9.12 小结
习题
第10章 信号
10.1 引言
10.2 信号概念
10.3 函数signal
10.4 不可靠的信号
10.5 中断的系统调用
10.6 可重入函数
10.7 SIGCLD语义
10.8 可靠信号术语和语义
10.9 函数kill和raise
10.10 函数alarm和pause
10.11 信号集
10.12 函数sigprocmask
10.13 函数sigpending
10.14 函数sigaction
10.15 函数sigsetjmp和siglongjmp
10.16 函数sigsuspend
10.17 函数abort
10.18 函数system
10.19 函数sleep、nanosleep和clock_nanosleep
10.20 函数sigqueue
10.21 作业控制信号
10.22 信号名和编号
10.23 小结
习题
第11章 线程
11.1 引言
11.2 线程概念
11.3 线程标识
11.4 线程创建
11.5 线程终止
11.6 线程同步
11.6.1 互斥量
11.6.2 避免死锁
11.6.3 函数pthread_mutex_timedlock
11.6.4 读写锁
11.6.5 带有超时的读写锁
11.6.6 条件变量
11.6.7 自旋锁
11.6.8 屏障
11.7 小结
习题
第12章 线程控制
12.1 引言
12.2 线程限制
12.3 线程属性
12.4 同步属性
12.4.1 互斥量属性
12.4.2 读写锁属性
12.4.3 条件变量属性
12.4.4 屏障属性
12.5 重入
12.6 线程特定数据
12.7 取消选项
12.8 线程和信号
12.9 线程和fork
12.10 线程和I/O
12.11 小结
习题
第13章 守护进程
13.1 引言
13.2 守护进程的特征
13.3 编程规则
13.4 出错记录
13.5 单实例守护进程
13.6 守护进程的惯例
13.7 客户进程-服务器进程模型
13.8 小结
习题
第14章 高级I/O
14.1 引言
14.2 非阻塞I/O
14.3 记录锁
14.4 I/O多路转接
14.4.1 函数select和pselect
14.4.2 函数poll
14.5 异步I/O
14.5.1 System V异步I/O
14.5.2 BSD异步I/O
14.5.3 POSIX异步I/O
14.6 函数readv和writev
14.7 函数readn和writen
14.8 存储映射I/O
14.9 小结
· · · · · · (收起)
读后感
我着重看了一些TCP,UDP方面的细节。这本书写得非常好,第一写得很细,把所有可能的问题都提到了,当我看到有问题的地方时,接着就会发现,它后面就把我的问题给提出来并给出了解决办法和为什么这样。 其实技术本来没什么,怎么把它描述清楚才是需要人的智慧。就像男女之欢,本...
以前对socket 编程一点都不懂,Internet这一块一直是我的盲点, 最近狠下心来,啃读了第二部分,对socket api编程有了一些了解, 在看别人写的源代码时,遇到socket 这一部分,也能看懂了, 整个人都感觉好多了。
3.6 inet_aton, inet_addr, and inet_ntoa Functions inet_aton, inet_ntoa, and inet_addr convert an IPv4 address from a dotted-decimal string (e.g., "206.168.112.96") to its 32-bit network byte ordered binary value. You will probably encounter these functions ...
原文: Before delving into the design details of a protocol, high-level decisions must be made about which program is expected to initiate communication and when responses are expected. 本书翻译: 在深入设计一个协议的细节之前,应该决断通信由哪个程序发起以及...
这个封面很像Addison Wesley的原版封面,但是价格。。。呵呵,当然,原来机工的那个版本已经绝版了,pub重印价格太高了,这个还是不错的选择。如果只想学好UNIX网编的大可去图书馆借一本,但是如果是狂热的LINUX/UNIX编程爱好者,那买一本学习加收藏也是很不错的
用户评价
在我看来,学习任何一项技术,如果仅仅停留在“如何做”的层面,那么很容易变得僵化和机械。而《UNIX网络编程 卷1:套接字联网API(第3版)》这本书,最大的价值在于它教会了我“为什么这样做”。书中不仅仅罗列了一系列的API调用,更是深入地解释了每一个API背后的设计哲学和系统约束。比如,为什么要有connect()和bind(),为什么select()、poll()和epoll()会有所不同,这些问题在这本书中都得到了深入浅出的解答。作者还花了大量篇幅讲解了信号处理在网络编程中的作用,以及如何安全有效地处理中断,这对于编写健壮、稳定的网络服务至关重要。读完之后,我感觉自己对网络通信的理解不再是表面上的数据传输,而是上升到了对整个通信协议栈、操作系统调度以及资源管理的深刻认知。这种“知其所以然”的学习方式,极大地提升了我独立分析和解决网络编程问题的能力,让我在面对复杂的网络场景时,能够更加从容和自信。
这本书给我的感觉,与其说是一本技术教程,不如说是一部网络编程的“百科全书”。《UNIX网络编程 卷1:套接字联网API(第3版)》的编排结构非常合理,从基础概念到高级特性,层层递进,让我可以根据自己的需求选择阅读的深度。我尤其喜欢书中关于错误处理和调试的章节,作者列举了很多常见的网络编程错误,并提供了非常实用的调试方法,这对于提高开发效率非常有帮助。此外,书中对于网络安全的一些讨论,虽然不是本书的核心内容,但也为我打开了新的视野,让我意识到在网络编程中安全的重要性。这本书的优点在于它的全面性和深度,它几乎涵盖了UNIX环境下套接字编程的所有重要方面,而且讲解得非常透彻。即使在阅读过程中遇到一些不熟悉的术语,书中也通常会进行详细的解释,或者提供参考文献,方便读者进一步查阅。总而言之,这是一本我愿意反复翻阅、并在其中不断发现新知识的书。
对于一个在网络编程领域摸爬滚打多年的老兵来说,寻找一本能够持续带来新洞察的书籍并非易事。《UNIX网络编程 卷1:套接字联网API(第3版)》却做到了这一点。这本书的第三版在内容上进行了更新,加入了更多与现代网络环境相关的讨论,例如对IPv6的支持,以及一些在实际开发中经常遇到的性能优化技巧。我尤其欣赏作者对TCP的深入剖析,不仅仅是描述其工作机制,更是对其内部各个环节的细致分析,比如拥塞控制算法的演进,以及与之相关的参数调优。书中关于高性能网络服务器设计的章节,更是让我受益匪浅,书中提出的各种异步I/O模型和事件驱动框架的原理,为我理解和实践高性能网络服务提供了坚实的理论基础。而且,作者在书中还提及了一些网络协议栈的底层细节,这对于理解网络通信的效率和潜在瓶颈非常有帮助。总的来说,这本书不仅仅适合初学者,对于有经验的开发者来说,它也是一本能够不断挖掘出新知识、激发新思路的宝贵参考书。
这本书简直是打开了通往网络世界的大门!在遇到它之前,我对网络编程的理解还停留在一些零散的概念和模糊的印象中,总觉得它神秘而难以捉摸。但是,当我开始翻阅这本《UNIX网络编程 卷1:套接字联网API(第3版)》时,那种困惑感如同冰雪般消融。作者以一种循序渐进、由浅入深的方式,将原本复杂的套接字API展现在我面前。从最基础的TCP/IP模型讲起,到每一个具体的系统调用,再到各种选项和配置,都讲解得条理清晰,而且配有大量精心设计的示例代码,让我能够边学边练。更让我惊喜的是,书中并没有止步于API的罗列,而是深入探讨了背后的原理,比如TCP的可靠性是如何实现的,UDP的无连接特性又意味着什么。读完之后,我感觉自己不仅学会了如何使用套接字,更重要的是理解了网络通信的本质,这对于我日后独立开发和调试网络应用打下了坚实的基础。这本书不仅仅是技术手册,更是一本引人入胜的网络编程指南,强烈推荐给所有对网络技术感兴趣的开发者!
坦白说,我之前对网络编程有过一些尝试,但总是感觉抓不住重点,很多时候是“知其然不知其所以然”。直到我接触到《UNIX网络编程 卷1:套接字联网API(第3版)》,我才真正领略到深度和广度的魅力。这本书的内容深入到了操作系统的层面,解释了套接字在UNIX系统中的实现细节,比如文件描述符、系统调用的上下文切换等等。作者对于各种边缘情况的处理,比如连接中断、资源耗尽等,都进行了详尽的阐述,并提供了相应的处理策略,这对于写出健壮的网络程序至关重要。书中对于并发处理的讨论也给了我很大的启发,无论是多进程、多线程还是I/O复用模型,都进行了深入的分析和比较,让我能够根据不同的场景选择最合适的方案。虽然书中涉及的理论知识量很大,但作者的叙述方式却非常生动,常常会穿插一些实际的网络故障案例,让我能将理论与实践紧密结合。这本书的价值在于它提供了一个完整的知识体系,让我能够从宏观到微观,全面地理解UNIX网络编程的方方面面,真正做到“知其然,更知其所以然”。
非常详细,深入浅出~
很细节,算是工具书,适合用到的时候查阅。很佩服从头到尾拿来学习的,简直在骗自己。翻译挺差的。
只看完了1~7章,第11,12,14,16,24等章 《TCP/IP网络编程》也大概涵盖了这部分内容,但UNP细节更多。手册类的书读起来挺枯燥,感觉先看尹圣雨的书再有选择地看UNP更好
一本之前读了几次都中断的书,这次终于从头到尾读完了。本书网络编程相关知识点讲解的非常详细,翻译也很用心,译者对原书中谬误和新版作者的错误都做了修改。
很详细的参考书,想要入门还是看些其他入门读物比较好,然后再拿这本书做参考