Loading...

前言

C的IO库对我来说是一个谜一样存在,它经过了很多层的封装,让程序员调用方式变得简单快捷,但也让程序员无法轻易看透IO库的运行方式。在编写mkDB的时候,要用到文件读写,于是打算加深对C的IO库的认知。

简介

IO库也就是Input/Output即输入/输出库,C++在设计输入输出的时候采用了流式思想。所谓流式思想,就是把输入和输出看成一个整体,也就是把输入和输出的内容都保存到一个长串里,然后对这个长串作其他处理。抽象的概念很难让人产生直观的印象,所以建议通过实践去体会理论的精妙处。

组成部分

基础类

基础类只有一个,命名为ios_base。ios_base是所有I/O流类的基类,提供了I/O操作的基础功能,如格式化、错误处理等。它定义了I/O流的状态、格式和位置。IO流库的所有类都基于ios_base类

输入流

  • istream

这是输入流的基类,提供了从流中读取数据的方法。istream从ios_base继承而来。

  • cin

预定义的标准输入流对象,通常用于从标准输入(键盘)读取数据。

输出流

  • ostream

这是输出流的基类,提供了向流中写入数据的方法。ostream也从ios_base继承而来。

  • cout

预定义的标准输出流对象,通常用于向标准输出(屏幕)写入数据。

  • cerr

预定义的标准错误流对象,通常用于输出错误信息到标准错误输出。

输入/输出流

  • iostream

这是一个同时支持输入和输出的流类,从istream和ostream继承而来。

  • stringstream

这是一个支持字符串输入输出的流类,允许将字符串当作流来处理。

文件流

  • ifstream

用于从文件读取数据的输入文件流类。

  • ofstream

用于向文件写入数据的输出文件流类。

  • fstream

同时支持文件输入和输出的流类。

格式化操作

setw、setfill、setprecision 等函数用于控制输出格式,如设置字段宽度、填充字符和精度。

操作符重载

插入操作符<<和提取操作符>>被重载用于简化流的输入输出操作。

流操作函数

如endl、flush、ws等,用于控制流的行为,如插入换行、刷新缓冲区和忽略空白。

流 manipulators

这些是改变流状态的函数,如boolalpha、uppercase等,它们可以改变流的格式化行为。

异常处理

IO流库支持异常处理,可以在I/O操作失败时抛出异常。

定位和迭代

流库支持流定位和迭代,允许在流中随机访问和遍历。

模板支持:

IO流库是模板化的,支持多种数据类型的输入输出。

这些组件共同构成了C的IO流库,提供了一种统一和灵活的方式来处理各种I/O操作。通过这个库,C程序可以轻松地与外部世界进行数据交换。