Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2015, 14:43   #1
Shinsoo
 
Регистрация: 18.01.2012
Сообщений: 6
По умолчанию Перенаправление stdout/stderr

Библиотека помещает свой отладочный вывод в stderr. Мне необходимо перенаправить этот вывод в файл в коде C++ (не средствами bash/cmd). Каким образом это возможно? Исходный код библиотеки имеется, но менять его крайне нежелательно.
Shinsoo вне форума Ответить с цитированием
Старый 24.07.2015, 14:57   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

В приложении, которое использует библиотеку перенаправьте stderr в файл.
Для Linux: dup2()
Для Windows: SetStdHandle()
waleri вне форума Ответить с цитированием
Старый 24.07.2015, 14:59   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
stderr=fopen("Файлик","w+");
не?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.07.2015, 16:05   #4
Shinsoo
 
Регистрация: 18.01.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
В приложении, которое использует библиотеку перенаправьте stderr в файл.
Для Linux: dup2()
Для Windows: SetStdHandle()
SetStdHandle не работает. Win7 x64. MS VS 2012.
Код:
HANDLE fileHandle = CreateFileA("123.txt", GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetStdHandle(STD_OUTPUT_HANDLE, fileHandle);
fprintf(stdout, "блаблабла\n");
CloseHandle(fileHandle);
Программа с таким кодом создает файл 123.txt, но он пустой. С stderr то же самое.
Цитата:
Сообщение от Stilet Посмотреть сообщение
Код:
stderr=fopen("Файлик","w+");
не?
Не компилируется, stderr не есть l-value.
Shinsoo вне форума Ответить с цитированием
Старый 24.07.2015, 16:25   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

о http://www.cplusplus.com/reference/cstdio/freopen/ никто не слышал?
p51x вне форума Ответить с цитированием
Старый 24.07.2015, 20:43   #6
Shinsoo
 
Регистрация: 18.01.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Да, спасибо, это то что нужно. Только выводится в файл почему-то только после завершения программы. Но это уже совсем другая история...
Shinsoo вне форума Ответить с цитированием
Старый 24.07.2015, 21:17   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Либо отключайте буферизацию, либо ффлуште, либо закрывайте... иного не дано.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StdOut dim5 C++ Builder 2 31.05.2014 11:14
Ошибка при использовании vfprintf в dll при stdout CHERTS Visual C++ 1 25.10.2013 15:18
перенаправление Card1nal Общие вопросы C/C++ 0 19.05.2010 17:00
STDIN и STDOUT VovanZ Общие вопросы Delphi 2 07.04.2010 20:15