C ++ Redirect Output - PullRequest
       14

C ++ Redirect Output

5 голосов
/ 19 ноября 2009

Есть ли способ перенаправить вывод с ++ внутри кода? Ситуация такова, я использую некоторые внешние файлы .cpp и .h, которые используют printf для вывода предупреждений на консоль. Я хочу перенаправить "только" эти выходные данные (не мои) в файл "без" изменения их кода.

Итак, в моей программе я могу перенаправить выходной файл в файл, и когда я снова помещу некоторый выходной редирект в консоль по умолчанию, после этого снова в файл, и так далее ...

Возможно ли это?

Ответы [ 2 ]

7 голосов
/ 19 ноября 2009

Вы можете использовать freopen () в stdout для перенаправления stdout в файл.

1 голос
/ 19 ноября 2009

printf будет печатать в дескриптор файла 1, вы можете закрыть его и открыть файл, это даст вам еще один fd, возможно, 1, потому что это самый низкий из доступных fd, если вы не были достаточно быстры

Если вы просто close(1);, а затем int fd = open(file); fd должно быть 1, если никто не открыл что-то между закрытием и открытием. В этот момент любой, кто выводит на fd номер 1, напечатает ваш файл.

Это потому, что система должна дать вам lowest available file descriptor number, поэтому она даст вам 1, именно то, что пишет printf.

Как уже упоминалось @roe, вы можете предпочесть сделать dup () более 1, чтобы получить еще один номер fd, который можно распечатать на стандартный вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...