Как внутри программы определить куда вывод идет в терминал или в файл?

Здравствуйте.
Если написать в терминале ls то выведет например что то такое:
Makefile ft_ls libft output2.txt
author inc output.txt src


Если написать в терминале ls > out.txt то выведет например что то такое:
Makefile
author
ft_ls
inc
libft
output.txt
output2.txt
src


То есть во втором случае вставляет только перенос строки, в первом же еще и пробелы.
Может кто знает, как она определяет куда пишет в файл или терминал, чтобы действовать по разному?
  • Вопрос задан
  • 214 просмотров
Решения вопроса 1
@lil_Toady
Автор заметил что вывод разный, то что он сам направил вывод в файл он в курсе :)

Узнать пишем ли мы в терминал можно так:
isatty(fileno(stdout));

istty находится в io.h, а fileno в stdio.h

И ls, действительно смотрит если вывод в терминал - то в одну строку, иначе - в несколько:
https://github.com/coreutils/coreutils/blob/master...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@feanor7
Системный администратор
Она не определяет ничего. Это Вы определяете куда пойдет вывод, cmd > file Вы написали)))
В обычно случае команда выплюнет все в стандартный вывод.
Ответ написан
Комментировать
irishmann
@irishmann
Научись пользоваться дебаггером
Так ты же сам даешь ей понять что перенаправляешь вывод символом ">"
Перенаправление ввода/вывода в Linux
Ответ написан
Комментировать
@dmtrrr
Backend developer
man ls
-1 (The numeric digit ``one''.) Force output to be one entry per line. This is the default when output is not to a terminal
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы