Может ли файл устройства в Linux указывать на несколько файлов?

Может ли файл устройства в Linux указывать на несколько файлов?

Оболочка в Linux (например: bash) имеет свои дескрипторы файлов stdinи stdoutи , stderrкоторые указывают на один и тот же файл устройства, например, ниже приведены дескрипторы файлов stdinи stdoutи stderrдля bash:

введите описание изображения здесь

Теперь /dev/tty1это не «настоящий» файл, который можно читать и в который можно записывать данные, это файл устройства, который указывает на файл, буфер в памяти или что-то еще.

Теперь у меня вопрос: /dev/tty1указывает ли он только на один файл или на два файла?

Я имею в виду, когда bashпроисходит чтение из /dev/tty1( stdin) и когда bashпроисходит запись в /dev/tty1( stdoutили stderr), происходит ли чтение из и запись втот же файл, или /dev/tty1указывает на два файла, один из которых используется при чтении из /dev/tty1, а другой — при записи в /dev/tty1?

решение1

Узел устройства указывает на одинустройство, который в Linux обрабатывается ядром. При bashчтении из /dev/tty1, он читает из драйвера устройства, управляющего первым терминалом; при записи в него он пишет в тот же драйвер устройства.

решение2

Файл устройства не «указывает на несколько файлов». Файл устройства даже не «указывает» на один файл. Файл устройства указывает на драйвер. Драйвер содержит код, который обрабатывает операции чтения и записи.

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

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

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