14.1.5 3种输入输出机制

    C++语言的输入输出机制包含3层,前两种是从传统的C语言继承而来的,分别是底层I/O和高层I/O,第3种是C++中增添的流类库,这是本章讨论的重点。

    1.底层I/O

    底层I/O依赖于操作系统来实现,调用操作系统的功能对文件进行输入输出处理,具有较高的速度。底层I/O将外部设备和磁盘文件都等同于逻辑文件,采用相同的方法进行处理,一般过程为打开文件、读写文件和关闭文件,这些是通过一组底层I/O函数来完成的,这些函数定义在头文件io.h中。

    注意

    如果要对串口进行读写操作,可以用底层I/O,也可以用即将介绍的高层I/O。

    因为底层I/O涉及很多硬件知识,需要程序员对要操作的设备有一定的了解,因此,本章不对底层I/O进行具体的讨论,感兴趣的读者可查阅相关资料。

    2.高层I/O

    高层I/O是在底层I/O的基础上扩展而来的,仍旧将外部设备和磁盘文件进行统一的处理,但处理的方式更为灵活,提供的一组处理函数定义在头文件stdio.h中,新的C++标准头文件为<cstdio>,提供的这些函数大体可分为两类,即一般文件函数(外部设备和磁盘文件)和标准I/O函数。

    一般文件函数的操作过程和底层I/O函数类似,分为打开文件、读写文件和关闭文件3个步骤,但标准I/O函数面向的是标准设备,如stdin(标准输出设备,一般是键盘)和stdout(标准输出设备,一般是显示器),不需要对这些设备进行打开和关闭操作,标准I/O文件函数有以下几类。

    ❑字符处理函数:“int getchar(void);”用于从标准输入设备(默认键盘)读取一个字符,并返回所读字符值,以及“int pubchar(int c);”用于向标准输出设备(默认显示器)输出一个字符c。

    ❑C风格字符串处理函数:“chargets(chars);”从标准输入设备读取字符,存储在指针s指向的字符数组中,直到读入换行符或文件末尾标记EOF,写入空字符'\0',并将换行符抛弃,如果写入了字符则返回s,否则返回NULL,以及“int puts(const char*s);”将以空字符结尾的串s输出到标准设备中,调用成功则返回非负值,否则返回EOF。

    ❑格式化处理函数:“int scanf(const charctl_string,……)”用于格式化输入,以及“int printf(const charctl_string,……)”用于格式化输出。

    底层I/O和高层I/O不具备扩展机制,不能输出自定义的类型,稍后会有关于高层I/O的详细介绍。

    3.流类库

    除了从C语言中继承了上述两种I/O机制外,C++还有一种输出机制,即流类库(iostream类库),这是C++所特有的,iostream类库为内置类型对象提供了输入输出支持,也支持文件的输入输出,另外类的设计者可以通过运算符重载机制对iostream库进行扩展,来支持自定义类型的输入输出操作。