非阻塞I/O与高级UNIX编程:32章详解

需积分: 8 0 下载量 45 浏览量 更新于2024-08-02 收藏 1.28MB PDF 举报
"UNIX环境高级编程是一本详尽的IT专业书籍,分为32个章节,深入探讨了高级I/O操作和系统编程技巧。第12章聚焦于非阻塞I/O,这是本书的重要概念,因为许多后续章节的进程间通信示例都将依赖于此。非阻塞I/O允许程序在I/O操作可能阻塞时避免长时间等待,而是立即返回错误,表明操作会阻塞。 在非阻塞I/O中,系统调用被划分为两类:低速系统调用和非阻塞系统调用。低速系统调用如读取文件、写入文件、打开带有特定锁的文件等,可能导致进程永久阻塞。相比之下,非阻塞I/O操作如open、read和write在没有数据可用时不会阻塞,而是立即返回错误,提高了程序的响应性和效率。 实现非阻塞I/O的方法有两种: 1. 在调用open时,通过设置O_NONBLOCK标志来创建非阻塞描述符。 2. 对已打开的描述符,使用fcntl函数来修改其文件状态标志,将其设为非阻塞模式。 早期的系统V版本使用O_DELAY标志,但在一些情况下可能会与文件结束的判断混淆。为了消除这种混乱,POSIX.1标准引入了专门的非阻塞标志,其名称和行为与O_DELAY不同,确保了非阻塞I/O操作的明确性。 第12章不仅是学习如何高效处理I/O操作的关键章节,而且在整个编程过程中扮演着基础架构的角色,因为它提供了实现并发和提高程序性能的基础。后续章节中频繁使用的I/O多路复用(select和poll函数)、readv和writev函数以及存储映射I/O(mmap)都是建立在这一概念之上。掌握这些技术对于理解UNIX环境下的高级编程至关重要。"