我正在写一个程序,这是另一个程序的一部分。 在主程序中,它们将cout的默认方向redirect到LOG文件。 为了debugging我自己的程序,我需要在linux中将cout的输出redirect到控制台(terminal)。 我不能保存控制台rdbuf
所示的方法:
http://www.cplusplus.com/reference/iostream/ios/rdbuf/
有没有什么办法让我的目的在c + +的Linux控制台的处理?
您需要定义“控制台”的含义以及“重定向”的含义。 如果你在其他地方运行一个程序,并且你想把它重定向到控制终端(当他们说'console'时有多少人意思),你可以重定向到/ 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); }
我无法编译克里斯的例子。 我得到了“ – > open”没有在“console-> open”中声明。 我正在使用kdevelop 4.5.2编译它,工作是一段代码
ofstream console("/dev/tty"); //create stream cout.rdbuf(console.rdbuf()); //redirects cout to the new stream
根据定义, cout
转到stdout
,即文件描述符1。