2012-10-28 3 views
0

Я хочу перенаправить все stderr в файл, который также используется моим регистратором в течение всего времени работы приложения (игры).using std :: freopen to redirect stderr C++

Следующее перенаправляет его из консоли, но оно никогда не появляется в моем файле, и использование fclose после завершения игрового цикла фактически не делает ничего, где это обычно должно.

freopen(Logger::logFile.c_str(),"a",stderr); 

Любая помощь будет больше о том, как получить stderr для вывода в текстовый файл, в цикле игры.

+0

Вы проверили возвращаемое значение freopen? – user93353

+0

Да, в этом нет ничего плохого, он перенаправляется от консоли, он просто печатает его в файл. – Baraphor

ответ

0

Мы можем здесь играть с неопределенным поведением ... , потому что вы не должны использовать freopen для перенаправления различных вещей в один и тот же файл.

В приведенном ниже примере, в зависимости от того, какой файл вы закрываете, вы будете писать по-разному:

#include <stdio.h> 

int main() 
{ 
    freopen ("myfile.txt","w",stdout); 
    printf ("        This sentence is redirected to a file."); 
// fclose (stdout); 
    freopen ("myfile.txt","w",stderr); 
    fprintf (stderr, "This ERRORis redirected to a file."); 
    //fclose (stderr); 
    fclose (stdout); 
    return 0; 
} 

Здесь вы пишете ошибку до предложения:

This ERRORis redirected to a file.sentence is redirected to a file. 

Не хорошо. Я предлагаю вам позволить ОС сделать это перенаправление в тот же файл для вас, например. в Unix/Linux:

./myprog.sh 2>&1 
+0

Я даже не уверен, почему я задавал этот вопрос, поэтому я не могу быть уверен, правильно это или нет. Лучше ли отмечать, как разрешено или что? – Baraphor

+0

@Baraphor: Сделайте то, что считаете правильным. Я не должен надавливать на вас, чтобы помочь мне получить репутацию. –