2015-07-18 3 views
2

У меня есть программа на C++, и я хочу определить, является ли родительский процесс терминалом или нет. Потому что, если это терминал, я могу использовать escape-коды для выделения вывода, иначе это будет отображаться с нечитаемыми символами. Решение должно запускаться в любой системе posix.Определите, является ли родительский процесс терминалом

Если кто-нибудь знает решение для Java, я бы тоже его интересовал.

+0

Я думаю, что есть что-то в POSIX, которое может это сделать, но я не могу вспомнить специфику. Возможно, 'fcntl()'? Я не видел ничего существенного в записи человека, хотя, возможно, это что-то еще. – celticminstrel

+0

@celticminstrel в соответствии с man-страницей 'fcntl' означает' file control' и, похоже, не то, что я хочу – msrd0

+0

Прошу прощения, но * родительский процесс - это терминал * - это просто не смысл. Вы имеете в виду, что * standard output - это терминальный *, * родительский процесс - это интерактивная оболочка * или что-то еще? –

ответ

6

Если я правильно понимаю вашу проблему, вы смотрите на нее с неправильным углом. Спросите не о том, что ваш родительский процесс, а скорее о возможностях stdout. И для этого в среде POSIX используйте isatty().

Для стандартного вывода isatty(STDOUT_FILENO) должен возвращать 1.

В Java System.console(), по-видимому, будет возвращать объект Console, если оба stdin и stdout являются терминалом, а null в противном случае. См. How can I check if a Java program's input/output streams are connected to a terminal? для более подробной информации.

Смежные вопросы