考虑到下面的C++程序,应该插入什么来代替//*****,以确保100%干净关机
Considering the C++ program below, what should be inserted in place of //***** to ensure a 100% clean shutdown?
这是一道考试题:
考虑到下面的C++程序,应该插入什么来代替
//*****
以确保100%干净关机?#include <iostream> #include <fstream> int main(int argc, char* argv[]) { using namespace std; fstream log("log.txt", ios::out); streambuf* clog_buf = clog.rdbuf(log.rdbuf()); clog << "Test the logger" << endl; //***** }
- A。什么都不缺
- B。exit()
- C。clog.rdbuf(clog_buf)
- D。阻塞.rdbuf(0)
- E。log.rdbuf(0)
我对这段代码中log
和clog
的使用感到相当困惑。为什么我们不能创建一个文件并写下我们需要的一切?如有任何解释,不胜感激。
clog_buf
指向在使用rdbuf
重置之前阻塞所指向的流缓冲区。通过使用C(clog.rdbuf( clog_buf );
)将阻塞的流缓冲区重置为以前的缓冲区,可以实现干净的关闭。
代码将标准clog
流(最初在STDERR上工作)交换为文件流。这意味着程序中任何地方流到clog
的代码现在实际上都将流到文件中。这是一种很好的本地化重定向日志输出的方法,不需要搜索/替换源代码中文本clog
的1000万个语句。
答案是C,它将clog
流恢复到隐式return 0
启动之前的状态,程序正常结束,包括正常的文件流销毁。
exit()
是一种不正常的关闭,它不会正确关闭文件流。
此代码似乎不是异常安全的。因此,面对例外情况,没有一个答案能确保100%干净的关闭。
相关文章:
- 如何确保C++函数在定义之前声明(如override关键字)
- 如何确保在使用基于布尔值的两个方法之一调用方法时避免分支预测错误
- 使用Unique_ptr确保工厂中的对象唯一
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- C++需要帮助从用户那里获得一个整数,并确保它在另外两个整数之间
- 确保流程关闭
- 如何确保接受的C++模板类型使运算符重载?
- 确保编译时的特定 std::array 位置
- C++ 确保子类为常量提供自定义值
- 确保内存映射页位于内存中
- 确保套装新鲜度的有效方法
- C ++类型特征:确保子类实现方法
- 是否确保 2 个连续的 std::chrono::steady_clock::now() 不相等?
- 如何确保用户在一行上提示输入一次时输入名字和姓氏?
- 确保无变体的型号安全
- 确保特征将 AVX 矢量化用于特定操作
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 如何确保 Visual C++ 不允许作用域枚举访问?
- 如何确保调用显式构造函数并允许大括号初始化?
- 考虑到下面的C++程序,应该插入什么来代替//*****,以确保100%干净关机