isatty(3)
- это библиотечная функция (вы ничего не найдете в ядре linux), которая обычно реализуется путем вызова tcgetattr(3)
и проверки возвращаемого значения.
Например, в библиотеке GNU C (glibc):
/* Return 1 if FD is a terminal, 0 if not. */
int
__isatty (int fd)
{
struct termios term;
return __tcgetattr (fd, &term) == 0;
}
tcgetattr(3)
само разрешится в некоторый ioctl, такой как TCGETA
или TCGETS
.
Обратите внимание, что isatty(3)
также вернет true для главной стороны псевдотерминала, что на самом деле не tty - большинство операций, связанных с tty, выполняемых на нем, на самом деле применяются к его подчиненной стороне.
В linux isatty(3)
также возвращает true для /dev/console
, что опять-таки не является действительным tty (его нельзя сделать контролирующим tty процесса).
В linux вы можете получить список всех драйверов tty в вашей системе с их старшими и младшими номерами через cat /proc/tty/drivers
. Конечно, это отражает только те модули, которые были загружены.