我正在编写一个程序,它是另一个程序的一部分。在主程序中,他们将默认方向cout重定向到LOG文件。对于我自己的程序的调试,我需要在linux中将输出cout重定向到控制台(终端)。我不能像保存在例子中描述的方法控制台rdbuf
:如何在Linux中将cout重定向到控制台?
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
有没有什么办法让手柄Linux在C++控制台对我的目的是什么?
我正在编写一个程序,它是另一个程序的一部分。在主程序中,他们将默认方向cout重定向到LOG文件。对于我自己的程序的调试,我需要在linux中将输出cout重定向到控制台(终端)。我不能像保存在例子中描述的方法控制台rdbuf
:如何在Linux中将cout重定向到控制台?
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
有没有什么办法让手柄Linux在C++控制台对我的目的是什么?
您需要定义“控制台”的含义以及“重定向”的含义。如果你在某些情况下运行某个程序,并将其输出重定向到其他地方,并且希望将其重定向到控制终端(当他们说'console'时,许多人意味着什么),则可以重定向到/ dev/tty,例如:
program >/dev/tty
当您运行该程序。以上可能是shell脚本中的一行,或者是作为参数传递给system(3)的字符串 - 这取决于您如何启动程序。
如果想要更改输出的程序中去,你可以打开一个新的流缓冲指你想要什么,用的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);
}
cout
根据定义转到stdout
,它是文件描述符1。
对不起,但我没有得到它。你能举一个例子代码吗? – Rasoul 2011-12-31 20:39:49
你想要完成什么? 'cout'已经默认进入控制台,所以我不确定。 – 2011-12-31 21:05:52
我无法编译克里斯的例子。 我知道“ - > open”没有在“console-> open”中声明。 我使用的KDevelop 4.5.2编译它,哪些做法是一段代码
ofstream console("/dev/tty"); //create stream
cout.rdbuf(console.rdbuf()); //redirects cout to the new stream
由多德的答案是正确的,但首先要确保你没有过于复杂的事情。处理您的问题的常用方法是从调试消息中分离出实际的输出。发送真正的输出到'cout'和其他任何'cerr'。这样,当程序的输出重定向时,调试信息仍然显示在终端上。您甚至可以将标准错误流和标准错误流重定向到不同的文件:'./yourprogram 1> output.txt 2> debug.txt' – 2011-12-31 22:28:27