Программа на Си - как определить, куда направлен её вывод? (На консоль или в файл?)

Модератор: Модераторы разделов

Liaz
Сообщения: 3

Программа на Си - как определить, куда направлен её вывод?

Сообщение Liaz »

Всем здравствуйте!

Программа на Си запускается из текстового режима Linux. Ей нужно различать случаи, когда она просто была запущена и когда она была запущена с перенаправлением вывода в файл:
./prg > filename
С помощью чего это можно реализовать?

Заранее благодарен всем, кто ответит.
Спасибо сказали:
Аватара пользователя
sergius
Сообщения: 782

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение sergius »

strtok() тебе должен помочь.
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение flook »

sergius писал(а):
19.12.2005 13:07
strtok() тебе должен помочь.

Каким образом?
fstat(2, &buf), а потом зырять на st_dev и st_ino.
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Аватара пользователя
AlexRat
Сообщения: 88

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение AlexRat »

sergius писал(а):
19.12.2005 13:07
strtok() тебе должен помочь.

Скорее уж:
fstat(fileno(stdout))
Правда слабо представляю себе по каким признакам определить консоль.
Мой блог
Ubuntu 7.04
Windows XP SP2
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение flook »

AlexRat писал(а):
19.12.2005 13:40
sergius писал(а):
19.12.2005 13:07

strtok() тебе должен помочь.

Скорее уж:
fstat(fileno(stdout))
Правда слабо представляю себе по каким признакам определить консоль.

Там девайс какой-то хитрый. Точно сказать какой именно не могу :)
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
Liaz
Сообщения: 3

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение Liaz »

AlexRat писал(а):
19.12.2005 13:40
Скорее уж:
fstat(fileno(stdout))
Правда слабо представляю себе по каким признакам определить консоль.


Ага, так заработало! Если выводится на консоль, то fstat характеризует файл как Block device и Character device (не regular), а если в файл - то regular file (соответственно, не device).
Спасибо всем большое! :rolleyes:
Спасибо сказали:
Аватара пользователя
flook
Сообщения: 585
Статус: Просто flook

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение flook »

Liaz писал(а):
19.12.2005 14:09
AlexRat писал(а):
19.12.2005 13:40

Скорее уж:
fstat(fileno(stdout))
Правда слабо представляю себе по каким признакам определить консоль.


Ага, так заработало! Если выводится на консоль, то fstat характеризует файл как Block device и Character device (не regular), а если в файл - то regular file (соответственно, не device).
Спасибо всем большое! :rolleyes:

Если я правильно понял, то это не совсем правильно :ph34r: Если заредиректить вывод в /dev/null, то девайс тоже Character окажется...
В каждом из нас спит гений... и с каждым днем все крепче...
Спасибо сказали:
JK_Darien
Сообщения: 20

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение JK_Darien »

можно использовать isatty() для определения вывод на терминал или нет.
Спасибо сказали:
Liaz
Сообщения: 3

Re: Программа на Си - как определить, куда направлен её вывод?

Сообщение Liaz »

flook писал(а):
19.12.2005 14:12
Если я правильно понял, то это не совсем правильно :ph34r: Если заредиректить вывод в /dev/null, то девайс тоже Character окажется...


Да, согласен. Для каждого файла (регулярного или device) st_ino принимает разные значения, но не ясно, какой диапазон в итоге соответствует выводу на консоль.

можно использовать isatty() для определения вывод на терминал или нет.


Изящно! :rolleyes: Спасибо!
Спасибо сказали: