@Pudjak

Как в Си вывести в консоль без записи в буфер?

Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'. Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл? Знаю, что можно записать через fprintf этот текст в отдельный файл, а потом просто вывести его на экран, в итоге в file.log его не будет. Но это уже какие-то танци с бубном. Или иначе никак...

UPD...
В вопросе косяк, имелось в виду вот такое:
Команда обязательно должна быть такой ./a.out file1... 9.txt > file.log. То есть я открываю в программе разные файлы. Результат обработки любого из файлов должен выводиться в консоль при обычном запуске (запуске без > file.log). А с перенаправлением вывода, при обработке некоторых файлов (ну то есть когда в зависимости от содержимого файла в программе выполнится некоторое условие) записываться в лог ничего не должно. Запуск обработки всех файлов осуществляется в цикле bash скрипта, поэтому команда запуска для всех файлов одинаковая.
  • Вопрос задан
  • 329 просмотров
Пригласить эксперта
Ответы на вопрос 4
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Если я использую printf("asd"), то весь текст в кавычках будет выведен на экран и записан в лог файл. Вот такая команда: './a.out > file.log'.

Здесь несколько несуразностей: 1) printf в ./a.out > file.log не выведет ничего на экран, всё будет перенаправлено в файл. но 2) сам printf об этом ничего не знает. Он выводит данные в поток стандартного вывода, куда они перенаправляются потом -- не его дело. 3) оператор > перенаправляющий вывод -- это инструкция командной оболочке как запускать программу, к самой программе отношения не имеет.

Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?

Есть! ./a.out, без каких-либо изменений в коде.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Есть ли какая другая команда вывода, которая будет текст выводить только в терминал, без записи в файл?

Да есть. Ты можешь выводить в STDERR и тогда это будет печататься на экране но в лог файл не попадет по причине такого скрипта
./a.out > file.log'
Чтобы оба потока писались в лог - нужно делать так
./a.out 2>&1 > file.log'
Но кажется что ты борешся не с той проблемой и не так. Для логгирования в файлы - есть специальные библиотеки.
А работа с STDOUT/STDERR - это просто базовые абстракции любого Unix-процесса.
Ответ написан
Комментировать
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Можно выводить в stderr через fprintf. Тогда перенаправление в файл запишет туда только то, что выведено в stdout через printf.

А так /a.out > file.log просто перенаправляет stdout в файл и все, что будет туда выведено, будет записано в файл самой системой. Ваша программа не знает, куда там система будет содержимое потока выводить - в консоль или в файл. Никак на это повлиять вы не сможете. Остается только писать в другой поток, например stderr.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы