August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
如果没有数据,计算就毫无意义。我们需要将数据输入到程序中来进行一些有意义的计算,并将结果从程序中取出。在4.1节中我们曾经提及,数据的输入源和输出目标多种多样令人眼花缭乱。如果我们不注意输入源和输出目标的处理,就会写出只能从特定的源输入数据,将结果输出到特定设备的程序。这对于某些特定应用,比如数码相机或用于引擎燃料喷射器的传感器来说,是可以接受的(有时甚至是必需的)。但对于大多数应用,我们需要某种方法将程序的读写操作与实际进行输入输出的设备分离开。如果必须直接访问每种设备,那么当有新的显示器或磁盘产品面市时,我们就必须修改程序,或者将用户局限于程序所支持的设备,这是很荒谬的。
大多数现代操作系统都将I/O设备的处理细节放在设备驱动程序中,通过一个I/O库访问设备驱动程序,这就使不同设备源的输入输出尽可能地相似。一般地,设备驱动程序都位于操作系统较深的层次中,大多数用户是看不到它们的。I/O库给出了输入输出的一个抽象,从而令程序员不必关心具体的设备和设备驱动程序:
如果操作系统使用这样一个模型,则所有输入和输出都可以看作字节(字符)流,由输入输出库处理。更多复杂的I/O模式需要更专门的知识,已超出了本书的范围。因此,我们程序员的工作就变为:
1.创建指向恰当数据源和数据目的的I/O流。
2.从这些流中读取数据或将数据写入到这些流中。
数据在程序和设备间实际是如何传输的呢?这类细节都是由I/O库和驱动程序来处理的。在本章和下一章中,我们将介绍如何使用C++标准库来处理包含了格式化数据的I/O流。 ...