c++刷新缓冲区
2015-09-10 08:47
281 查看
在c++中,io操作都是有io对象来实现的,每个io对象又管理一个缓冲区,用于存储程序读写的数据。
只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。
那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:
1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。
2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。
3.用操纵符显示地刷新缓冲区,如用endl。
4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。
5.可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区。
我们可以通过以下实例代码来加深一下理解:
[cpp]
// 操纵符
cout << "hi!" << flush; // flushes the buffer, adds no data
cout << "hi!" << ends; // inserts a null, then flushes the buffer
cout << "hi!" << endl; // inserts a newline, then flushes the buffer
// unitbuf操纵符
cout << unitbuf << "first" << " second" << nounitbuf;
// unitbuf会在每次执行完写操作后都刷新流
// 上条语句等价于
cout << "first" << flush << " second" << flush;
// nounitbuf将流恢复为正常的,由系统管理的缓冲区方式
// 将输入输出绑在一起
// 标准库已经将cin和cout绑定在一起
// 我们可以调用tie()来实现绑定
cin.tie(&cout); // 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(&cerr); // ties cin and cerr, not necessarily a good idea!
cin.tie(0); // break tie between cin and cerr
cin.tie(old_tie); // restablish normal tie between cin and cout
只有缓冲区被刷新的时候缓冲区中的内容才会写入真实的文件或输出设备上。
那么,什么情况下会刷新输出缓冲区呢,有如下五种情况:
1.程序正常结束。作为main返回工作的一部分,将清空所有的输出缓冲区。
2.在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。
3.用操纵符显示地刷新缓冲区,如用endl。
4.在每次输出操作执行完毕后,用unitbuf操纵符设置流的内部状态,从而清空缓冲区。
5.可将输出流与输入流关联起来,在读输入流时将刷新其关联的输出缓冲区。
我们可以通过以下实例代码来加深一下理解:
[cpp]
// 操纵符
cout << "hi!" << flush; // flushes the buffer, adds no data
cout << "hi!" << ends; // inserts a null, then flushes the buffer
cout << "hi!" << endl; // inserts a newline, then flushes the buffer
// unitbuf操纵符
cout << unitbuf << "first" << " second" << nounitbuf;
// unitbuf会在每次执行完写操作后都刷新流
// 上条语句等价于
cout << "first" << flush << " second" << flush;
// nounitbuf将流恢复为正常的,由系统管理的缓冲区方式
// 将输入输出绑在一起
// 标准库已经将cin和cout绑定在一起
// 我们可以调用tie()来实现绑定
cin.tie(&cout); // 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(&cerr); // ties cin and cerr, not necessarily a good idea!
cin.tie(0); // break tie between cin and cerr
cin.tie(old_tie); // restablish normal tie between cin and cout
相关文章推荐
- 浅析C++中的智能指针
- 浅析C++中的智能指针
- c语言与c++函数调用区别
- Item 24:用非成员函数来支持所有元的类型转换 Effective C++笔记
- C++ Primer : : 第十四章 : 重载运算符与类型转换之类型转换运算符和重载匹配
- C++ 一个程序获取另一个程序Edit控件的内容
- C++ <getline及atoi>
- C++/MFC如何启动另一个应用程序并获取其进程 ID
- 三种单例模式的C++实现
- 利用顺序表实现多项式相加
- 利用顺序表实现集合的并运算
- C++ 中switch 使用注意事项
- C++ 设计模式(四)----原型模式
- C++11中的std::function
- c语言通讯录的例子
- C++11中的std::bind
- 使用wxWidgets进行跨平台的C++开发
- 循环缓冲区C++的一种实现
- 万年历(C语言代码实现)
- 指针和C++的基本原理