C++ 中的IO流
c语言中的输入输出
说到c++就不能不提c语言,在c语言中,依靠输入输出函数进行IO操作,在c语言中我们常用的函数有
scanf printf
pusts gets putc getc
getchar putchar
fwrite fread
...
这些IO函数通过一些缓冲区在设备和代码之间进行数据的输入和输出。缓冲区的读写速度较快,设备和代码都能很快的从其中复制数据和写入数据,从而完成IO操作。
---> 输入缓冲区 --->
设备 代码
<--- 输出缓冲区 <---
缓冲区的缓冲方式一般分为三种:
- 全缓冲:当缓冲区被写满时才进行刷新
- 行缓冲:当缓冲区遇到换行符时才进行刷新
- 无缓冲:写入的数据会立即刷新出来
什么是流
在向缓冲区中写入的和读出的数据我们称之为流,流我们可以认为是一个方向向另一个方向流动的数据流,是连续性的,具有方向性的。在c语言中流都是基于缓冲区实现的,他们的区别仅在于输出的方向,和对数据的操作方式不同。
流可以分为两种:
- 文本流:在缓冲区中读出和写入时是基于ASCII或者Unicode字符编码的。写入缓冲区的最大长度规定为254个字符。在文本文件结束时规定以一个回车符和换行符结尾,在写入缓冲区时,会将\n转换为回车换行符,在从缓冲区中读取出数据时,就会将回车换行符转换为换行符。
- 二进制流:二进制的流在向缓冲区中写入或读出文件时,不进行字符的转换,直接从设备或文件中读取,在这个过程中不发生任何改变,原先是什么样子,读取之后还是什么样子,它是基于二进制数字啊的。
在c语言中,每个运行时系统必须提供三个标准流 标准输入stdin 标准输出stdout 标准错误stderr
stdin为缺省时的输入设备,一般为键盘, stdout为缺省时的输出设备,一般对应屏幕,stderr为输出错误信息的,一般也对应到屏幕。当然这些都是默认缺省时的,我们可以自行通过重定向来改版输出输入的方向。