Russian Qt Forum

Qt => Общие вопросы => Тема начата: titan83 от Июль 28, 2015, 14:05



Название: Перенаправление стандартного вывода в консольном приложении
Отправлено: titan83 от Июль 28, 2015, 14:05
Здравствуйте.
Система - линукс.
Такая странная ситуация - пытаюсь сохранить вывод консольного приложения в файл: ./prog > prog.log.
Вывод на консоль делаю printf().
В результате файл создается, но он всегда пустой.
При этом для любых других программ все работает как и ожидается - вывод сохраняется.
В файле проекта есть строка CONFIG += console.
Почему может быть такое поведение?
Спасибо.


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Fregloin от Июль 28, 2015, 16:19
нужно делать flush().
Но для того что бы он работал, получите дескрипторы файлов-потоков ввода/вывода (на сколько я помню у них стандартные номера 1,2,3 для ввода, вывода и ошибок), далее
fprintf(stdout,"...");
fflush(stdout);

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


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Пантер от Июль 28, 2015, 16:21
А зачем вообще printf, если ты пишешь на плюсах? Есть же std::cout, где std::endl сбрасывает буфер.


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Bepec от Июль 28, 2015, 16:46
Не всегда сбрасывает, во всяком случае на старых окошках. Попадал в ситуацию, когда сбрасывает только flush.


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Old от Июль 28, 2015, 16:54
Не всегда сбрасывает, во всяком случае на старых окошках. Попадал в ситуацию, когда сбрасывает только flush.
Ну это вы передавайте привет компилятору, который лучше всех поддерживает стандарт. :)


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Bepec от Июль 28, 2015, 21:13
Old - не будем спорить. В тот раз я цитатами доказал, что поведение компилятора соответствует стандарту. Опять рыться изза фигни? увольте :D

PS подкалывать можно, но не в каждой же теме :D


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: Old от Июль 28, 2015, 21:21
В тот раз я цитатами доказал, что поведение компилятора соответствует стандарту.
:)

PS подкалывать можно, но не в каждой же теме :D
А я вас не подкалываю. Это еще одно подтверждение того, что самый строгий компилятор кладет на стандарты.


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: titan83 от Июль 29, 2015, 10:28
Всем спасибо.
Тоже вечером подумалось на счет флаша.
А пишу не я и не на плюсах - человек еще не освоил - хочет писать как умеет - на си.


Название: Re: Перенаправление стандартного вывода в консольном приложении
Отправлено: qate от Июль 31, 2015, 12:53
если писать в stderr, то файл будет пуст