《Unix环境高级编程》这本书深入探讨了Unix操作系统及其在不同版本中为应用程序提供的服务,尤其聚焦于Unix系统的基础知识、登录过程、shell程序、文件与目录管理等方面的关键知识点。
### Unix基础知识
Unix操作系统,作为现代操作系统发展的重要基石,为运行在其上的程序提供了广泛的服务,包括但不限于执行新程序、文件操作、内存分配、获取系统时间等。本书通过程序设计者的视角,以一种逐步深入的方式介绍Unix,避免了过早引入未解释的概念,这有助于读者理解Unix的核心概念和服务。
### 登录流程
- **登录名与密码**:登录Unix系统首先需要输入用户名和密码,系统会检查`/etc/passwd`文件中的记录,确认用户的合法性。此文件存储了用户的登录名、加密后的密码、用户ID(UID)、组ID(GID)、备注信息、家目录和默认shell等关键信息。
- **Shell程序**:登录成功后,系统会根据`/etc/passwd`中记录的shell字段启动相应的shell程序。常见的shell包括Bourne shell(`/bin/sh`)、C shell(`/bin/csh`)和Korn Shell(`/bin/ksh`)。这些shell负责解释用户输入的命令,执行相应的程序或脚本。其中,Bourne shell因其广泛的兼容性和便携性而成为最常用的shell,几乎每个Unix系统都会提供。C shell源于伯克利,具有类似C语言的控制结构,支持作业控制等功能。Korn Shell则是Bourne shell的改进版本,融合了C shell的部分特性,如作业控制和命令行编辑。
### 文件与目录管理
- **文件系统结构**:Unix的文件系统采用层次化的目录结构,以根目录`/`作为起点,形成了树状结构。每个目录实际上也是一个文件,其中包含了一系列目录项,每个目录项代表一个文件或子目录。
- **文件属性**:文件在Unix系统中具有丰富的属性,包括文件类型(如普通文件、目录、链接等)、文件大小、所有者、权限(如读、写、执行权限)以及最后修改时间等。通过`stat`和`fstat`函数可以获取文件的详细属性信息。
- **文件名与路径名**:在Unix中,文件名可以包含除斜杠`/`和空字符`\0`之外的所有字符,但为了便于管理和避免shell的特殊字符干扰,通常建议仅使用可打印字符。文件名与路径名通过斜杠`/`分隔,用于标识文件在目录树中的位置。
### 历史与实现
本书还穿插了对Unix历史的回顾和不同实现的比较,揭示了各种技术选择背后的历史渊源。例如,Bourne shell由Steve Bourne在贝尔实验室开发,其控制结构类似于Algol68;C shell由Bill Joy在伯克利开发,其控制结构接近C语言;Korn Shell由David Korn在贝尔实验室开发,旨在兼容Bourne shell并融入C shell的先进特性,如作业控制和命令行编辑。
通过对Unix环境高级编程的深入剖析,《Unix环境高级编程》不仅是一本技术手册,更是Unix系统及其编程哲学的导览,适合任何希望深入了解Unix系统内部工作原理和高效利用Unix资源的程序员阅读。