2011-12-31 73 views
0

我正在编写一个程序,它是另一个程序的一部分。在主程序中,他们将默认方向cout重定向到LOG文件。对于我自己的程序的调试,我需要在linux中将输出cout重定向到控制台(终端)。我不能像保存在例子中描述的方法控制台rdbuf如何在Linux中将cout重定向到控制台?

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

有没有什么办法让手柄Linux在C++控制台对我的目的是什么?

+0

由多德的答案是正确的,但首先要确保你没有过于复杂的事情。处理您的问题的常用方法是从调试消息中分离出实际的输出。发送真正的输出到'cout'和其他任何'cerr'。这样,当程序的输出重定向时,调试信息仍然显示在终端上。您甚至可以将标准错误流和标准错误流重定向到不同的文件:'./yourprogram 1> output.txt 2> debug.txt' – 2011-12-31 22:28:27

回答

1

您需要定义“控制台”的含义以及“重定向”的含义。如果你在某些情况下运行某个程序,并将其输出重定向到其他地方,并且希望将其重定向到控制终端(当他们说'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); 
} 
+0

'console'表示'终端'和'重定向'表示我的程序是另一个将默认输出更改为LOG文件的程序的一部分。我想在终端上出现一些输出,用于调试我自己的代码。 – Rasoul 2011-12-31 21:45:30

+0

谢谢!但是当我编译你的建议代码时,它会抱怨没有匹配的函数来调用'rdbuf(std :: fstream *&)' – Rasoul 2011-12-31 21:54:36

+0

最后一行应该是'cout.ios :: rdbuf(console-> rdbuf() );' – 2011-12-31 22:23:36

0

cout根据定义转到stdout,它是文件描述符1。

+0

对不起,但我没有得到它。你能举一个例子代码吗? – Rasoul 2011-12-31 20:39:49

+0

你想要完成什么? 'cout'已经默认进入控制台,所以我不确定。 – 2011-12-31 21:05:52

1

我无法编译克里斯的例子。 我知道“ - > open”没有在“console-> open”中声明。 我使用的KDevelop 4.5.2编译它,哪些做法是一段代码

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