second edition 中的新内容。
second edition 出版于 2005年,因为“the first edition of this book was published before Linux and the several open-source renditions of the Unix interface that stemmed from the Berkeley CSRG became widespread, and also at a time when many people's networking consisted of a serial modem.”
书中对针对新的标准化的接口的实现做了改进。
Chapter 1. UNIX System Overview unix 系统概述
1.7. Error Handling
目标:会使用 errno, perr(), strerr()获取错误编号和错误描述。
Chapter 2. UNIX Standardization and Implementations unix 标准和实现
跨平台的问题,编译时错误。这一章的知识正是为这些难题准备的。应该全部浏览一遍,这样才能在遇到问题的时候知道究竟是什么问题。
目标:了解 unix 的 两个流派: v系列和 bsd系列的流变。了解 hu-ux、 sunos、 aix、 linux 各属于哪个流派。
了解 ansiC 标准、 posix.1标准、ISO 1999标准。了解怎样获取编译/运行时的系统限制。
Chapter 3. File I/O
理解全章的内容。
这是系统最底层的 读写操作。具有简单、效率低、通用性好、安全等特点。
文件的打开、关闭、读写、加锁、属性设置。chapter 13.5 中的进程锁便是这些函数的应用。设置 socket属性时也会用到这些功能。
在信号处理函数中,有时候要用到这些读写操作。因为它们是安全的、可重入的。
目标:能对文件进行打开、关闭、读写、加锁、释放。会使用 fcntl()、ioctl()对文件属性进行操作。
chapter 4和 chapter 5中,的内容。我们现在一般使用 c++ 中的 流对象来完成这些操作。现在不需要太关注这些细节了。
需要注意的是,流操作不是在所有的系统
目标:会使用 snprintf()、sprintf()函数进行字串操作。会使用 chdir()、 fchdir()、getcwd()来获取、操作进程目录属性。
会使用 fileno()获取流文件的描述符。
Chapter 6. System Data Files and Information
6.10. Time and Date Routines 介绍了怎样获取系统时间。
目标:能够获取系统当前日期、时间.精确到微秒.
Chapter 7. Process Environment
原理性的东东。讲得比较基础。简单通读一下。
7.4. Command-Line Arguments 我们接口程序主控进程使用了Command-Line Arguments 来实现启动(start)、停止(stop)和状态查询(query)。
7.9. Environment Variables 获取进程的环境变量
目标:理解 c程序的内存布局。会使用命令行参数实现程序的流程控制。
Chapter 8. Process Control
8.2. Process Identifiers 描述了怎样获得进程的 进程 id ,进程组 id,用户 id等信息。 对进程发送信号时,需要这些背景知识。
8.3. fork Function fork()是unix 下几乎唯一的创建新进程的方法。其“一次调用,两次返回”会让初学者不知所云。使用fork()特别要理解父子进程间堆栈、文件句柄、文件描述符、信号钩子、信号集方面的共享情况。
8.5. exit Functions 我们没有用。但这是很重要的函数。用于在程序退出时释放资源。
目标:fork()、atexit(), getuid() ,getuid(),getppid() 的使用。会使用 fork()创建新进程。能够获得程序的pid,进程组id.会使用 ateixt()函数在程序退出前安全释放全局对象使用的资源(如数据库连接、网络连接等).
Chapter 9. Process Relationships
9.4. Process Groups 进程组。用来识别一组进程,从而实现合适的进程集的控制。发送信号时要用到这方面的知识。
9.5. Sessions 会话期。创建精灵进程时会涉及这个概念。
目标:了解进程组、会话期的概念。了解孤儿进程(精灵进程)的进程组属性、会话期属性、终端属性。
Chapter 10. Signals
10.2. Signal Concepts 对信号的解释。即使用 kill -l 命令列出的那些信号。
10.9. kill and raise Functions 向进程发送信号
10.10. alarm and pause Functions 定时唤醒进程。阻塞模式下,一定要使用此函数对程序定时唤醒。
10.14. sigaction Function 信号钩子。
其实本章节 1-11节的内容都非常重要。因为使用信号时常常会遇到莫名其妙的问题,如捕捉不到信号,捕捉到很多信号,信号函数执行时发生异常等。这需要对信号的机制有深入的了解。
目标:理解可靠信号、重入、中断系统调用,理解信号的处理流程。会使用 kill() 和 raise()向进程发送信号。会使用 sigaction捕捉信号并进行处理、传递。会使用alarm()、pause()、 sleep()、对进程进行定时、超时控制。
Chapter 11. Threads Chapter 12. Thread Control
这两章是第二版中新加的,我还没看。
Chapter 13. Daemon Processes
13.5. Single-Instance Daemons 提供了使用文件锁来保证程序只启动一个实例。ocs接口程序实现了此应用的 c++版本。这种文件锁叫做“建议锁(协商锁,Advisory
locks)”。
14.5. I/O Multiplexing
14.5.1. select and pselect Functions
select(),叫做“多路转接”或“多路复用”(Multiplexing)。我们的socket接口程序使用的是"阻塞(block)+ 多路转接"。
目标:掌握 select()的使用。
Chapter 15. Interprocess Communication 进程间通信
Section 15.8. Semaphores 信号量。对共享内存中的数据访问时,需要用信号量实现互斥操作。
Section 15.9. Shared Memory 共享内存。进程间共享数据最有效的方式。多纯种模式下,
目标:申请、挂接、读写、脱离、释放信号量和共享内存。
Chapter 16. Network IPC: Sockets
第 1-6节,读得越仔细越好。我们就是靠这个吃饭的。
目标: 理解 字节序(big-endian/little-endian )的概念和 网络字节序、本地字节序的转换。识别本机的字节序。
Chapter 17. Advanced IPC
17.4.Passing File Descriptors 介绍了怎样在不同的进程间传递文件描述符。17.4.1用于支流 stream 的 unix系统, 17.4.2用于不支持 stream的unix 系统/liunx系统。在多路复用技术中,要用到此知识。
目标:理解、运用书中实现的 send_fd 和 recv_fd