Вот моя сессия 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
получать данные?
/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
этот драйвер записывает (очень упрощенно):
Это не написано для предоставления данных, записанных на ведомое устройство, обратно к операции чтения на ведомом устройстве, поэтому этого не происходит.