cpp_IO_stream

类型

  1. 标准I/O:键盘->屏幕
  2. 文件I/O
  3. 字符串I/O:字符串数组作为存储空间

状态

  1. badbit 表示发生系统级的错误,如不可恢复的读写错误。通常情况下一旦 badbit 被置位,流就无法再使用了。
  2. failbit 表示发生可恢复的错误,如期望读取一个数值,却读出一个字符等错误。这种问题通常是可以修改的,流还可以继续使用。
  3. 当到达文件的结束位置时,eofbit 和 failbit 都会被置位。
  4. goodbit 被置位表示流未发生错误。如果badbit、 failbit 和eofbit 任何 一个被置位,则检查流状态的条件会失。
1
2
3
4
5
6
7
8
bool bad() const; //若流的badbit置位,则返回true;否则返回false
bool fail() const; //若流的failbit或badbit置位,则返回true;
bool eof() const; //若流的eofbit置位,则返回true;
bool good() const; //若流处于有效状态,则返回true;
iostate rdstate() const; //获取流的状态
void setstate(iostate state); //设置流的状态
//clear的无参版本会复位所有错误标志位*(重置流的状态)
void clear(std::ios_base::iostate state = std::ios_base::goodbit);

缓冲区

缓冲区就是一块内存区,它用在输入输出设备和 CPU 之间,用来缓存数据,使数据整存整取,减少IO次数,减少CPU占用,提高效率。

  • 全缓冲:在这种情况下,当填满标准 I/O 缓存后才进行实际 I/O 操作。全缓冲的典型代表是对磁盘文件的读写。
  • 行缓冲:在这种情况下,当在输入和输出中遇到换行符时,执行真正的 I/O 操
    作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的 I/O 操作。典型代表是键盘输入数据。
  • 不带缓冲:也就是不进行缓冲,标准出错情况 cerr/stderr 是典型代表,这使得出错信息可以直接尽快地显示出来。