如何在cout中将cout重定向到控制台?

时间:2011-12-31 20:27:10

标签: linux redirect console cout

我正在编写一个程序,它是另一个程序的一部分。在主程序中,它们将 cout 的默认方向重定向到LOG文件。为了调试我自己的程序,我需要将 cout 的输出重定向到linux中的console(终端)。我无法像以下示例中描述的方法一样保存控制台rdbuf

http://www.cplusplus.com/reference/iostream/ios/rdbuf/

为了我的目的,有没有办法在c ++中获取linux控制台的句柄?

3 个答案:

答案 0 :(得分:1)

您需要定义“控制台”的含义以及“重定向”的含义。如果您正在某个上下文中运行程序,其输出已被重定向到其他位置,并且您想将其重新定向到控制终端(当他们说'控制台'时很多人的意思),您可以重定向到/ dev / tty,例如:

program >/dev/tty

运行程序时。上面的内容可能是shell脚本中的一行,或者是作为参数传递给system(3)的字符串 - 它取决于你如何启动程序。

如果你想改变输出在程序中的位置,你可以打开一个新的streambuf引用你想要的东西,并使用ios :: rdbuf重定向到它:

filebuf *console = new filebuf();
console->open("/dev/tty");
if (!console->is_open()) {
    cerr << "Can't open console" << endl;
} else {
    cout.ios::rdbuf(console);
}

答案 1 :(得分:1)

我无法编译Chris示例。 我得到了&#34; - &gt;打开&#34;未在&#34; console-&gt; open&#34;中声明。 我使用kdevelop 4.5.2编译它,有效的是代码片段

ofstream console("/dev/tty"); //create stream
cout.rdbuf(console.rdbuf()); //redirects cout to the new stream

答案 2 :(得分:0)

根据定义,

cout转到stdout,即文件描述符1。