Немножко о файловой системе /dev часть 3

В Linux если запустить команду mount без аргументов, то будет выдан список всех смонтированных файловых систем. Одна из строк выглядит вот так:

none on /dev/pts type devpts (rw,gid=5,mode=620)

Она указывает на то что файловая система специального типа devpts смонтирована в каталоге /dev/pts. Эта файловая система не связана ни с каким аппаратным устройством, т.е. является виртуальной файловой системой создаваемой ядром Linux. Каталог /dev/pts содержит ссылки на устройства - псевдотерминалы. Наполнение каталога меняется, динамически отражая состояние работающей системы т.е. Linux создает псевдотерминал для каждого открываемого терминального окна и помещает ссылку на него в каталог /dev/pts. Псевдотерминалы ведут себя аналогично терминальным устройствам: они принимают данные с клавиатуры и отображают текст, передаваемый им программами. Номер псевдотерминала является именем его записи в каталоге /dev/pts. Теперь поясню по подробней :) для того чтобы узнать какое терминальное устройство закреплено за процессом можно узнать с помощью команды ps с опцией -o:

[root@localhost ~]# ps -o pid,tty,cmd pid tty cmd

10011 pts/1 bash

10021 pts/1 ps -o pid,tty,cmd

[root@localhost ~]#

В данном случае моему терминальному окну соответствует псевдотерминал 1 т.е. /dev/pts/1

[root@localhost ~]# ls -l /dev/pts/1

crw--w---- 1 root ..... /dev/pts/1

Обратите внимание на то, что псевдотерминал - это символьное устройство, а его владельцем является владелец процесса, для которого был создан псевдотерминал. С псевдотерминалом можно обмениваться информацией - обычно при чтении символы перехватываются вводимые с клавиатуры, а при записи данные отображаотся на псевдотерминал час все ето поясню :) Попробуйте открыть новое терминальное окно и определите номер псевдотерминала выполнив команду ps -o pid,tty,cmd допустим 2 (/dev/pts/2) теперь перейдите в другое окно и направте какие-нибудь данные на псевдотерминал 2 из 1 (в моем случае):

[root@localhost ~]# echo 'hello wold !!!' > /dev/pts/2

данная строка отабразится в терминальном окне 2. Когда терминальное окно будет закрыто то и запись 2 исчезнет из каталога /dev/pts/ На счет считавания что ввыводится на экран пользователем по сложнее будет но всеже можно перехватить теоритически написав прогу на с или perl типа того:

.... open ( F, '+</dev/pts/1' ); while ( sysread( F, $buf, 1 ) ) { syswrite(F,$buf); } close(F1); ....

т.е. читать надо побайтно, и озадачится тем сколько надо от туда читать.... :) или можно еще отктыть ~/.bash_history если тупо нужны команды пользователя ... :) :)