我正在编写一个程序,它是另一个程序的一部分。在主程序中,它们将 cout 的默认方向重定向到LOG文件。为了调试我自己的程序,我需要将 cout 的输出重定向到linux中的console(终端)。我无法像以下示例中描述的方法一样保存控制台rdbuf
:
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
为了我的目的,有没有办法在c ++中获取linux控制台的句柄?
答案 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。