Всем здравствуйте!
Программа на Си запускается из текстового режима Linux. Ей нужно различать случаи, когда она просто была запущена и когда она была запущена с перенаправлением вывода в файл:
./prg > filename
С помощью чего это можно реализовать?
Заранее благодарен всем, кто ответит.
Программа на Си - как определить, куда направлен её вывод? (На консоль или в файл?)
Модератор: Модераторы разделов
-
sergius
- Сообщения: 782
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Программа на Си - как определить, куда направлен её вывод?
Каким образом?
fstat(2, &buf), а потом зырять на st_dev и st_ino.
В каждом из нас спит гений... и с каждым днем все крепче...
-
AlexRat
- Сообщения: 88
Re: Программа на Си - как определить, куда направлен её вывод?
Скорее уж:
fstat(fileno(stdout))
Правда слабо представляю себе по каким признакам определить консоль.
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Программа на Си - как определить, куда направлен её вывод?
Там девайс какой-то хитрый. Точно сказать какой именно не могу
В каждом из нас спит гений... и с каждым днем все крепче...
-
Liaz
- Сообщения: 3
Re: Программа на Си - как определить, куда направлен её вывод?
Ага, так заработало! Если выводится на консоль, то fstat характеризует файл как Block device и Character device (не regular), а если в файл - то regular file (соответственно, не device).
Спасибо всем большое!
-
flook
- Сообщения: 585
- Статус: Просто flook
Re: Программа на Си - как определить, куда направлен её вывод?
Если я правильно понял, то это не совсем правильно
В каждом из нас спит гений... и с каждым днем все крепче...
-
JK_Darien
- Сообщения: 20
Re: Программа на Си - как определить, куда направлен её вывод?
можно использовать isatty() для определения вывод на терминал или нет.
-
Liaz
- Сообщения: 3
Re: Программа на Си - как определить, куда направлен её вывод?
Да, согласен. Для каждого файла (регулярного или device) st_ino принимает разные значения, но не ясно, какой диапазон в итоге соответствует выводу на консоль.
можно использовать isatty() для определения вывод на терминал или нет.
Изящно!