Является ли стандартный ввод, консоль и ввод с клавиатуры одинаковыми в C?
Является ли стандартный ввод, консоль и ввод с клавиатуры одинаковыми
Ответы (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
Это означает, что стандартный ввод и консоль — это не одно и то же.
- person mouviciel; 27.12.2010
isatty() подходит близко, хотя терминал не обязательно управляется клавиатурой или пользовательским вводом, однако ситуации, когда он управляется программно, - это те, где ожидается, что программа будет вести себя так, как если бы она получала ввод с клавиатуры.
- person Chris Stratton; 27.12.2010
Да, это правильно. По сути, у вас может быть системный вызов read() для приема ввода со стандартного ввода.
person
atx
schedule
27.12.2010
Не обязательно. stdin
можно перенаправить из файла (например, executable < input
) или другого неинтерактивного устройства.
ответ амфетамашины дает вам инструмент, чтобы определить разницу.
person
John Bode
schedule
27.12.2010