Как перенаправить вывод printf обратно в код?

Я пишу небольшое приложение на C ++, чтобы обернуть вокруг обучающей функции opencv haar (а именно cvCreateTreeCascadeClassifier). Функция выдает на консоль целую нагрузку вывода, и я хочу проанализировать этот вывод, чтобы я мог заполнить различные переменные в своем коде.

Функция, которую я хочу использовать, не является частью самой библиотеки openCV; вместо этого он должен быть построен с моим кодом как часть проекта. Все выходные данные функции выполняются через printf.

Вопрос: Можно ли перехватить операторы printf до того, как они окажутся на консоли? Мне удалось перенаправить их с помощью freopen, но это кажется немного неуклюжим, поскольку затем мне нужно проанализировать файл, а затем удалить его после завершения вызова функции. Кроме того, функция, вероятно, будет работать в течение нескольких часов (а, возможно, даже недель!), Поэтому размер файла может быть проблемой, если он постоянно добавляется.

Требования: мне нужно, чтобы это приложение было c ++ и чтобы запускается как в Windows, так и в Linux (но при необходимости нет проблем с операторами условной компиляции). Я также хотел бы иметь возможность видеть мои сообщения cout и cerr на консоли (только не printf).

Мой поиск в Google лишил меня желания жить! Может ли кто-нибудь помочь с решением с помощью примера кода или указателей на места, где я должен искать ответ?

Спасибо

9
задан john 6 May 2011 в 12:04
поделиться