Поддельный тип выходного потока - PullRequest
4 голосов
/ 20 мая 2010

По умолчанию определенные программы форматируют свои выходные данные в соответствии с типом потока, в который они записывают. Например, выходные данные ls и ls > file выглядят по-разному. Я хотел бы знать, как это достигается программой. Кроме того, есть ли способ, с помощью которого мы можем обмануть такие программы, как если бы выходной поток был терминалом, где он фактически является файлом (особенно если у них нет опций, влияющих на форматирование вывода)?

Ответы [ 2 ]

5 голосов
/ 20 мая 2010

Через isatty:

if (!isatty(fileno(stdout))
{
    // redirected to a file or piped to a process
}

Один из способов обмануть - вместо перенаправления запустить script. Теперь все, что идет в 'tty' (включая то, что вы вводите в stdin и что отправляется на вывод) отправляется в файл с именем typcript.

2 голосов
/ 20 мая 2010

Эти программы используют isatty(fileno(stdout)), чтобы проверить, пишут ли они в TTY (терминал) или что-то еще (например, канал).

О фальсификации tty, отметьте Обманите приложение, думая, что его стандартный интерфейс интерактивный, а не труба

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...