Как перенаправить Cout на консоль в Linux? - PullRequest
0 голосов
/ 01 января 2012

Я пишу программу, которая является частью другой программы. В основной программе они перенаправляют направление по умолчанию cout в файл LOG. Для отладки моей собственной программы мне нужно перенаправить вывод cout на консоль (терминал) в Linux. Я не могу сохранить консоль rdbuf, как описано в примере по адресу:

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

Есть ли способ получить дескриптор консоли Linux в c ++ для моей цели?

Ответы [ 3 ]

1 голос
/ 01 января 2012

Вам нужно определить, что вы подразумеваете под «консолью» и что вы подразумеваете под «перенаправлением».Если вы запускаете программу в каком-то контексте, где ее вывод был перенаправлен куда-то еще, и вы хотите перенаправить ее на управляющий терминал (что многие люди имеют в виду, когда говорят «консоль»), вы можете перенаправить на / dev/ tty, например:

program >/dev/tty

при запуске программы.Вышеприведенное может быть строкой в ​​скрипте оболочки или строкой, передаваемой в качестве аргумента в 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 голос
/ 13 января 2016

Я не смог собрать пример Криса. Я понял, что "-> open" не было объявлено в "console-> open". Я использую kdevelop 4.5.2 для его компиляции, и то, что сработало, это кусок кода

ofstream console("/dev/tty"); //create stream
cout.rdbuf(console.rdbuf()); //redirects cout to the new stream
0 голосов
/ 01 января 2012

cout переходит к stdout, который является файловым дескриптором 1 по определению.

...