检查将什么输出写入标准输出
Check what output is written to standard output
我想检查在程序的某个部分是否将输出(通过cout)写入标准输出。
我发现的是一种通过改变输出的流buf来阻止任何输出的方法。(这里:c++:重定向STDOUT)。这很有趣,首先我想这可能会有帮助。我找到了下面的代码示例(来源:回答c++:重定向STDOUT)
// Redirect cout.
streambuf* oldCoutStreamBuf = cout.rdbuf();
ostringstream strCout;
cout.rdbuf( strCout.rdbuf() );
// This goes to the string stream.
cout << "Hello, World!" << endl;
// Restore old cout.
cout.rdbuf( oldCoutStreamBuf );
// Will output our Hello World! from above.
cout << strCout.str();
所以我可以检查strCout.str()是否是一个有1个或多个字符的字符串通过检查它的大小
但是如果我不想显著延迟输出呢?所以我不想把所有输出保存在我自己的ostringstream中,等到我检查了我的程序结束时是否有输出,然后在我的程序结束前不久打印所有输出。我只是想知道,在我的程序的某个部分是否有输出。
的例子:
main {
bool wasthereoutput=false;
function1();
function2();
startoutputcheckhere();
function3();
function4();
endoutputcheckhere();
therewasoutput=wasthereoutput();
if therewasoutput{
//do something
}
我不想更改function3或function4中的任何内容。我不想延迟这些函数生成的任何输出,直到我调用endoutputcheckhere()甚至wasthereoutput()。我只是想知道是否有任何通过cout输出到std的输出
您可以创建一个流缓冲区,它既收集以后写入的字符,也将它们转发到另一个流缓冲区,例如std::cout
使用的流缓冲区。这种方法的简单实现如下所示:
class savebuf:
public std::streambuf {
std::streambuf* sbuf;
std::string save;
int overflow(int c) {
if (!traits_type::eq_int_type(c, traits_type::eof()) {
save.push_back(traits_type::to_char_type(c);
return sbuf->sputc(c);
}
else {
return traits_type::not_eof(c);
}
}
int sync() { return sbuf->pubsync(); }
public:
savebuf(std::streambuf* sbuf): sbuf(sbuf) {}
std::string str() const { return save; }
};
int main() {
std::streambuf* coutbuf = std::cout.rdbuf();
savebuf sbuf(coutbuf);
std::cout.rdbuf(&sbuf);
std::cout << "Hello, worldn";
std::cout.rdbuf(coutbuf); // restore the original stream buffer
std::cout << "saved "" << sbuf.str() << ""n";
}
请注意,当std::cout
被破坏时,您应该恢复std::cout
的流缓冲区,因为流缓冲区被刷新(即pubsync()
被调用)。
相关文章:
- 如何从Windows应用程序输出到标准?
- 捕获标准输出以压缩并使用 CTRL-C 中断会给出损坏的 zip 文件
- 使用提升过程获取 shell 命令的标准输出
- 将标准输出重定向到ostream
- 使用 python 或 c ++ 中的 sql 根据输入数据输出输出示例
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 十进制到八进制递归C++.以标准::字符串格式输出
- 标准输入输出操作如何C++完成
- 将线程之间的标准输入/输出重定向
- 标准C++输入输出流必须如何处理intXX_t类型
- 如何在c++中将方法的cout输出输出到流文件中
- 标准输出输出不会显示在基于 Windows MFC 对话框的应用的控制台上
- C++文件输入/输出输出数字而不是字符
- C:atoi()对未符号字符的输出输出
- 文件输入输出输出文件的最后一行重复了无数次
- Pyclewn的标准输入/输出(vim的GDB前端)
- 用c++将输出输出到控制台窗口
- 使用c++从控制台应用程序收集标准输出输出
- 模板类的标准流输出
- 为什么cout输出输出反斜杠和数字当我再次使用它时