Является ли стандартный ввод, консоль и ввод с клавиатуры одинаковыми

Является ли стандартный ввод, консоль и ввод с клавиатуры одинаковыми в C?


person Mishthi    schedule 27.12.2010    source источник


Ответы (3)


Со страницы руководства isatty(3):

Функция isatty() проверяет, является ли fd дескриптором открытого файла, ссылающимся на терминал.

   #include <unistd.h>

   int isatty(int fd);

isatty() возвращает 1, если fd является дескриптором открытого файла, ссылающимся на терминал; в противном случае возвращается 0, а для обозначения ошибки устанавливается errno.

Таким образом, isatty(stdin) вернет ненулевое значение, если оно было введено, и ноль, если оно было перенаправлено.

person amphetamachine    schedule 27.12.2010
comment
Это означает, что стандартный ввод и консоль — это не одно и то же. - person mouviciel; 27.12.2010
comment
isatty() подходит близко, хотя терминал не обязательно управляется клавиатурой или пользовательским вводом, однако ситуации, когда он управляется программно, - это те, где ожидается, что программа будет вести себя так, как если бы она получала ввод с клавиатуры. - person Chris Stratton; 27.12.2010

Да, это правильно. По сути, у вас может быть системный вызов read() для приема ввода со стандартного ввода.

person atx    schedule 27.12.2010

Не обязательно. stdin можно перенаправить из файла (например, executable < input) или другого неинтерактивного устройства.

ответ амфетамашины дает вам инструмент, чтобы определить разницу.

person John Bode    schedule 27.12.2010