欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

C++ Primer 5th笔记(8)chapter8 类:IO库-流的缓冲区

发布时间:2025/3/21 c/c++ 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C++ Primer 5th笔记(8)chapter8 类:IO库-流的缓冲区 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. 介绍

• 每个输出流都管理一个缓冲区,用来保存程序读写的数据
• 操作系统就可以将程序的多个输出操作组合成单一的系统级写操作(提升性能,设备的写操作很耗时)
2. 缓冲区类型:全缓冲、行缓冲和不带缓冲。

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

3.缓冲区刷新
3.1 刷新情况

•导致缓冲刷新(即数据真正写到输出设备或文件中)的原因很多:
•程序正常结束
•缓冲区满
•主动使用操作符
endl完成换行并刷新缓冲区的工作;
flush刷新缓冲区,但不输出任何额外的字符;
ends向缓冲区插入一个空字符,然后刷新缓冲区。

3.2 unitbuf

矛:unitbuf; //所有输出操作后都会立即刷新缓冲区

eg. cout << unitbuf;

盾:cout << nounitbuf; //回到正常缓冲方式

3.3 注意

•如果程序崩溃的话,输出缓冲是不会被刷新的。

3.4 流的关联

•一个输出流可能被关联到另一个流。当读写被关联的流时,关联到的流的缓冲区会被刷新。

tie() ——返回指向输出流的指针 x.tie(&o) —— 将流x关联到输出流0cin.tie(&cout); // illustration only: the library ties cin and cout for us ostream *old_tie = cin.tie(); cin.tie(0); // break tie to cout, cout no longer flushed when cin is read cin.tie(old_tie); // restablish normal tie between cin and cout

(将outstream绑定到其他stream,比如将cout绑定到cin和cerr上,执行cin或cerr即可。)
IO库将cout绑定到了cin上,因此只要执行cin,cout一定会被刷新:
cin >> ival;
一般来说,交互式的系统都会将cin绑定到cout上,这样等待cin的时候,会提前将prompts刷新。

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的C++ Primer 5th笔记(8)chapter8 类:IO库-流的缓冲区的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。