APUE全书精华:信号、线程、进程与文件系统深度解析

需积分: 10 1 下载量 141 浏览量 更新于2024-09-11 收藏 470KB PDF 举报
"APUE归纳总结,涵盖信号、线程、进程、文件系统、网络协议、文件操作等多个方面的内容。" 在《Advanced Programing in the UNIX Environment》(APUE)中,我们学习了一系列关于UNIX环境高级编程的重要概念。以下是根据提供的摘要内容对这些知识点的详细解释: 1. **/etc/passwd**:该文件包含用户账户信息,包括用户名、加密密码(通常现在密码不再存储在此,而是移到更安全的位置如`/etc/shadow`)、用户ID、组ID、用户信息、用户主目录和默认shell。密码不在`/etc/passwd`中是为了增加安全性,即使文件被读取,密码也不能直接获取。 2. **fork()**:`fork()`函数用于创建一个新的进程,新进程(子进程)会复制父进程的所有资源,包括程序计数器,使得调用`fork()`后执行流会被复制,因此在子进程中`fork()`返回0,在父进程中返回子进程ID,导致了执行两次的效果。 3. **错误处理**:在C语言中,错误通常通过全局变量`errno`表示,每个线程都有自己的错误变量实现是通过线程局部存储。非致命性错误处理可能涉及检查`errno`并采取适当的恢复措施。 4. **信号机制**:信号是进程间通信的一种方式,用于通知进程发生了某些事件。它们的内部实现依赖于操作系统,通常涉及中断处理和信号队列。 5. **时间类型**:时间类型包括墙上时钟时间(实际流逝的时间)、用户时间(进程执行用户代码的时间)和内核时间(进程执行内核代码的时间)。`time`命令可显示这些信息,文件的修改时间包括访问时间(st_atime)、修改时间(st_mtime)和改变时间(st_ctime)。 6. **目录结构**:目录是一个特殊的文件,包含一系列目录项,每个目录项包含文件名和指向文件inode的指针,通过文件名查找文件属性。 7. **HTTP与RTSP**:HTTP是无状态的,每次请求都是独立的,而RTSP(Real-Time Streaming Protocol)是面向连接的,保持客户端和服务器的状态,以支持如快进、快退等操作。通过使用cookies和session等技术,HTTP也可以模拟有状态的行为。 8. **文件的帧类型**:视频文件中包含不同类型的帧,如I帧(关键帧,解码时独立)、P帧(预测帧,基于前一帧解码)和B帧(双向预测帧,基于前后帧解码)。 9. **文件空洞**:在磁盘上,空洞不占用实际的磁盘空间,但文件长度仍包含空洞部分。空洞区域读取到的数据为0。 10. **内核读取文件**:对内核而言,无论读取文本、二进制或特殊文件,都视为数据流处理。 11. **文件共享**:父子进程共享文件表项以共同访问同一文件,但每个进程有自己的文件偏移量,以确保并发读写的安全。文件表中的标志字段用于控制如追加写等操作。 12. **lseek()**:该函数用于修改文件位置指针,但不实际读写数据。`open()`的第三个参数如`O_CREAT`用于指定创建新文件。 13. **文件同步与锁**:多个进程读文件不会冲突,但写文件需要同步,如使用锁避免数据不一致。`pread()`和`pwrite()`可以在指定位置读写,避免了文件位置指针的变动问题。 14. **文件描述符标志**:描述符标志影响进程的行为,如`O_NONBLOCK`设置非阻塞模式;文件表中的状态标志影响所有使用该描述符的进程,如打开文件的权限。 15. **描述符复制**:`dup()`、`fcntl(F_DUPFD)`和`dup2()`用于复制文件描述符,`fcntl()`可以修改描述符标志。 16. **FD_*宏**:这些宏在套接字编程中用于管理文件描述符集,例如选择哪些描述符准备读写。 17. **stat结构体**:`stat()`函数返回的结构体中,`st_atime`记录最近访问时间,`st_mtime`记录最近修改时间,`st_ctime`记录最近状态改变时间。 以上是APUE中涉及的几个核心概念,它们构成了UNIX环境高级编程的基础。理解和掌握这些知识对于开发高效、可靠的UNIX/Linux应用程序至关重要。