考虑到下面的C++程序,应该插入什么来代替//*****,以确保100%干净关机

Considering the C++ program below, what should be inserted in place of //***** to ensure a 100% clean shutdown?

本文关键字:确保 关机 100% 什么 C++ 程序 考虑到 插入      更新时间:2023-10-16

这是一道考试题:

考虑到下面的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)

我对这段代码中logclog的使用感到相当困惑。为什么我们不能创建一个文件并写下我们需要的一切?如有任何解释,不胜感激。

clog_buf指向在使用rdbuf重置之前阻塞所指向的流缓冲区。通过使用C(clog.rdbuf( clog_buf );)将阻塞的流缓冲区重置为以前的缓冲区,可以实现干净的关闭。

代码将标准clog流(最初在STDERR上工作)交换为文件流。这意味着程序中任何地方流到clog的代码现在实际上都将流到文件中。这是一种很好的本地化重定向日志输出的方法,不需要搜索/替换源代码中文本clog的1000万个语句。

答案是C,它将clog流恢复到隐式return 0启动之前的状态,程序正常结束,包括正常的文件流销毁。

exit()是一种不正常的关闭,它不会正确关闭文件流。

此代码似乎不是异常安全的。因此,面对例外情况,没有一个答案能确保100%干净的关闭。