《UNIX环境高级编程》第四章主要探讨了文件和目录的相关操作,包括`stat`、`fstat`和`lstat`函数的使用,文件类型,以及文件和目录的各种属性。以下是对这些知识点的详细说明:
1. **stat、fstat和lstat函数**:
这三个函数用于获取文件或已打开文件描述符的相关信息。`stat`函数接收一个路径名,返回该文件的详细信息;`fstat`函数通过文件描述符获取信息;`lstat`函数与`stat`类似,但在处理符号链接时,它返回链接本身的信息而非链接指向的文件。返回值为0表示成功,-1表示失败。它们返回的信息存储在一个`struct stat`结构体中,包含了文件的各种属性。
2. **struct stat结构体**:
`struct stat`结构体包含多个成员,如文件权限、大小、创建时间等。这些信息对理解文件的属性和状态至关重要。尽管具体实现可能会有所不同,但基本的成员通常包括文件类型、权限模式、文件大小、时间戳等。`ls -l`命令就是利用`stat`函数获取这些信息来显示文件的详细列表。
3. **文件类型**:
- **普通文件(Regular File)**:最常见的文件类型,包含任意数据,由处理它的应用程序解释。
- **目录文件(Directory File)**:包含其他文件名和指向相关信息的指针,仅内核能写入。
- **字符特殊文件(Character Special File)**:用于特定设备,如终端设备。
- **块特殊文件(Block Special File)**:常用于磁盘设备。
- **FIFO(命名管道)**:用于进程间通信。
- **套接口(Socket)**:用于网络或同一主机上的进程间通信。
- **符号连接(Symbolic Link)**:指向另一个文件的链接。
文件类型由`st_mode`成员的位模式决定,可以通过表4-1中的宏(如`S_ISREG()`)来检查文件类型。
4. **文件系统结构**:
本章还涉及了UNIX文件系统的结构,包括如何处理符号链接、目录操作以及如何遍历目录层次结构。符号链接是文件系统的一个重要特性,允许创建指向其他文件或目录的软链接。
5. **目录操作**:
章节讲解了与目录相关的函数,比如创建、删除、读取目录条目等。并开发了一个函数来反向遍历目录树,这对于理解文件系统操作非常有帮助。
这一章深入介绍了UNIX/Linux系统中与文件和目录相关的高级编程概念,对于开发者来说是理解和操作文件系统的基础。熟悉这些知识点对于编写涉及文件I/O和系统调用的程序至关重要。