Есть ли способ узнать, выводит ли stderr файл или терминал в программе C / C ++? Мне нужно вывести другое сообщение об ошибке в зависимости от того, вызывается ли программа как:
. / Программа
или как:
. / Программа 2 >> файл
Попробуйте использовать isatty() в дескрипторе файла:
isatty()
Функция isatty() определяет, дескриптор файла fd относится к допустимое устройство типа терминала. Функция fileno() проверяет поток аргументов и возвращает его целочисленный дескриптор.
Функция isatty() определяет, дескриптор файла fd относится к допустимое устройство типа терминала.
fd
Функция fileno() проверяет поток аргументов и возвращает его целочисленный дескриптор.
fileno()
Обратите внимание, что stderr всегда присутствует в файловом дескрипторе 2, поэтому вам не нужно fileno() в этом конкретном случае.
stderr
Да, вы можете использовать isatty(3), чтобы определить, относится ли дескриптор файла к терминалу или к чему-то еще (файлу, каналу и т. Д.). Дескриптор файла 0 - stdin, 1 - stdout, а 2 - stderr.
isatty(3)
stdin
stdout
if(isatty(2)) // stderr is a terminal