Пример использования предоставления файлового API для терминала/консоли

Пример использования предоставления файлового API для терминала/консоли

Это было объяснено вэта ветка Stack Overflowчто каждый логический терминал имеет «псевдотерминал», и что запись в один из них:

$ cat some-file.txt > /dev/ttys002

приведет к появлению данных в этом окне терминала. В чем причина предоставления API-интерфейса, похожего на файл, для окон терминала? Есть ли какой-либо вариант использования, где это полезно?

До сих порскопировано дословно.

Не ограничиваясь псевдотерминалами, он доступен/dev/tty*также.

решение1

Большинство аппаратных устройств предлагают API, похожий на файл. Это делается потому, что это упрощает как дизайн операционной системы, так и дизайн приложений. ОС должна иметь только файловый API, а не отдельный API терминала, отдельный API диска, отдельный API звука и т. д. Приложения, которые не используют функции, специфичные для определенного типа оборудования, могут использовать файловый API, не заботясь о том, обращаются ли они к обычному файлу или к аппаратному устройству.

У многих аппаратных средств есть возможности, которые специфичны для определенного типа устройства. Приложения могут вызывать эти возможности черезioctl. Некоторое оборудование не отображается как файлы, потому что вы не можете просто прочитать или записать поток байтов в него. Например, Linux не отображает сетевые интерфейсы как файлы устройств, потому что сетевые интерфейсы работают с пакетами, а не с отдельными байтами.

Исторически терминалы были аппаратными устройствами. В настоящее время большинство терминалов предоставляются эмуляторами, либо в графической среде, либо по сети. Тем не менее, даже псевдотерминалы выглядят как аппаратные устройства, поскольку ядро ​​содержит специальную обработку для отслеживания того, какие процессы запущены на каком терминале.

В каждом варианте Unix,/dev/ttyозначает «текущий терминал для этого процесса». Другими словами, всякий раз, когда процесс открывает этот файл, он обозначает процессуправляющий терминал). Это позволяет процессу взаимодействовать через свой терминал, даже если его стандартные дескрипторы ввода и вывода были перенаправлены.

Каждый терминал имеет связанный файл устройства, который является либо аппаратным терминалом (tty, например /dev/tty1, , /dev/tty2, … для виртуальных консолей текстового режима в Linux или /dev/ttyS0, … для последовательных портов в Linux), либо эмулированным терминалом (pty, сокращение от псевдотерминала; /dev/pts/NUMBERв Linux). Это файл, через который процессы обмениваются данными с драйвером терминала или эмулятором.

Это потому, что терминалы — это файлы, вы можете запускать приложения и отображать их вывод на терминале. Когда вы запускаете программу в командной строке, по умолчанию ее вывод отправляется на терминал, но вы можете перенаправить его в файл.

Связанный контент