Имена устройств UNIX
Подключенные к системе UNIX периферийные устройства (диски, терминале) принтеры, дисковые массивы и так далее) доступны при помощи их имен в файловой системе. Эти файлы называются файлами устройств (device files). Соответствующие файловым системам разделы дисков также относятся к классу объектов, представленных этими специальными файлами.
В отличие от обычных дисковых файлов, чтение и запись в файлы устройств приводит к пересылке данных напрямую между системой и соответствующим периферийным устройством.
Обычно эти специальные файлы находятся в каталоге /dev. Поэтому, например, имена
/dev/tty00
/dev/console
/dev/pts/as (псевдотерминал для сетевого доступа)
могут соответствовать трем портам терминалов системы, а имена
/dev/lp
/dev/rmt0
/dev/rmt/0cbn
могут обозначать матричный принтер и два накопителя на магнитной ленте. Имена разделов диска могут иметь разнообразный формат, например:
/dev/dsk/c0b0t0d0s3
/dev/dsk/hd0d
В командах оболочки и в программах файлы устройств могут использоваться так же, как и обычные файлы, например, команды
$ cat fred > /dev/lp
$ cat fred > /dev/rmt0
выведут файл fred на принтер и накопитель на магнитной ленте соответственно (если это позволяют права доступа). Очевидно, что пытаться таким образом оперировать разделами диска с файловыми системами – огромный риск. Одна неосторожная команда может привести к случайной потере большого объема ценных данных. Кроме того, если бы права доступа к таким файлам устройств были бы не очень строгими, то продвинутые пользователи могли бы обойти ограничения прав доступа, наложенные на файлы в файловой системе. Поэтому системные администраторы должны задавать для файлов дисковых разделов соответствующие права доступа, чтобы иметь уверенность в том, что такие действия невозможны.
Для доступа к файлам устройств в программе могут использоваться вызовы fdopen, fdclose, fdread и fdwrite, например, программа
uses linux;
var
i,fd:integer;
begin
fd := fdopen ('/dev/tty', Open_WRONLY);
for i := 1 to 100 do
fdwrite(fd, 'x', 1);
fdclose(fd);
end.
приведет к выводу 100 символов х на порт терминала tty00. Конечно, работа с терминалом является отдельной важной темой, поэтому она подробнее будет рассмотрена в главе 9.