Когда процесс записывает псевдотерминальное ведомое устройство, почему он не читает то, что он написал?

Вот моя сессия bash:

lrwx------ 1 stas stas 64 Mar  5 18:18 0 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar  5 18:18 1 -> /dev/pts/0
lrwx------ 1 stas stas 64 Mar  5 18:18 2 -> /dev/pts/0

Мы видим, что bash читает и записывает в / dev / pts / 0 . У меня вопрос: почему процесс не читает то, что только что написал? Что заставляет только главный pty получать данные?

0
задан 5 March 2021 в 22:27
1 ответ

/dev/pts/0 - это не обычный файл, а узел символьного устройства, как видно из первой колонки ls -lвывода:

v
crw--w---- 1 tilman tty  136, 0 Mär  6 20:25 /dev/pts/0

Как таковые, операции чтения и записи не обращаются к какому-то файлу на диске, а обрабатываются частью программного обеспечения, называемой драйвером устройства, который может делать практически все, что захочет его автор, от просто ничего (как в случае драйвера, стоящего за /dev/null) до детальных действий над каким-то оборудованием в вашем компьютере (как в случае реальных драйверов оборудования. )

В конкретном случае /dev/pts/0 этот драйвер записывает (очень упрощенно):

  • Если процесс записывает некоторые данные на ведомое устройство, предоставьте эти данные в качестве результата следующей операции чтения на ведущем устройстве.
  • Если процесс записывает некоторые данные на ведущее устройство, предоставьте эти данные в качестве результата для следующей операции чтения на ведомом устройстве.

Это не написано для предоставления данных, записанных на ведомое устройство, обратно к операции чтения на ведомом устройстве, поэтому этого не происходит.

1
ответ дан 24 April 2021 в 01:41

Теги

Похожие вопросы