Ссылки на устройства напоминают обычные файлы. Их можно перемещать с помощью команды mv
rm
. Правда, если попытаться скопировать такую ссылку с помощью команды cp
, из устройства будут прочитаны данные (при условии что устройство поддерживает операцию чтения) и эти данные перенесутся в указанный файл. При попытке перезаписи ссылки в соответствующее устройство будут записаны данные.Ссылка на устройство создается с помощью команды mknod
man 1 mknod
) или функции mknod()
(документация вызывается так: man 2 mknod
). Создание ссылки не означает, что драйвер устройства или само устройство автоматически станут доступными. Ссылка является лишь своего рода порталом, через который происходит взаимодействие с драйвером. Создавать такие ссылки разрешается только процессам суперпользователя.Первый аргумент команды mknod
b
для блочного устройства и с
для символьного устройства. Старший и младший номера устройства задаются в третьем и четвертом аргументах соответственно. Например, следующая команда создает в текущем каталоге ссылку на символьное устройство lp0
. Старший номер устройства — 6, младший — 0. Эти номера соответствуют первому параллельному порту Linux.% mknod ./lp0 с 6 0
Помните, что лишь суперпользователю разрешено создавать ссылки на устройства, поэтому для успешного выполнения показанной команды необходимо зарегистрироваться в системе под именем root
Команда ls
-l
или -o
, то первый символ в каждой строке будет обозначать тип записи. Знак -
(дефис) соответствует обычному файлу, буква d
— каталогу, b
— блочному устройству, c
— символьному устройству. В последних двух случаях команда ls
вместо размера файла отображает старший и младший номера устройства. Давайте, к примеру, получим информацию о ссылке на символьное устройство, которую мы только что создали:% ls -l lp0
crw-r----- 1 root root 6, 0 Mar 7 17:03 lp0
В распоряжении программ имеется функция stat()
Удалить ссылку на устройство (не сам драйвер) можно с помощью команды rm
% rm ./lp0
6.3.1. Каталог /dev
В Linux имеется каталог /dev
Например, главное устройство, подключенное к основному контроллеру IDE, имеет старший и младший номера 3 и 0 соответственно, а его стандартное имя — /dev/hda
/dev/hda1
. Проверим это:% ls -l /dev/hda /dev/hda1
brw-rw---- 1 root disk 3, 0 May 5 1998 /dev/hda
brw-rw---- 1 root disk 3, 1 May 5 1998 /dev/hda1
Здесь же будет находиться и ссылка на параллельный порт, которую мы создали выше:
% ls -l /dev/lp0
crw-rw---- 1 root daemon 6, 0 May 5 1998 /dev/lp0
В большинстве случаев нет необходимости с помощью команды mknod
/dev
. У программ, не располагающих привилегиями суперпользователя, нет другого выбора, кроме как пользоваться имеющимися ссылками. Обычно новые ссылки создаются только системными администраторами и разработчиками драйверов. В Linux имеются специальные средства, упрощающие администраторам процесс создания ссылок с правильными именами.6.3.2. Доступ к устройству путем открытия файла
Как работать с аппаратными устройствами? В случае символьного устройства ответ прост: откройте ссылку на устройство как обычный файл и осуществляйте чтение-запись традиционным образом. Например, если к первому параллельному порту подключен принтер, то распечатать файл document.txt
/dev/lp0
:% cat document.txt > /dev/lp0
Чтобы эта команда завершилась успешно, необходимо иметь право записи в файл принтера. Во многих Linux-системах таким правом обладают лишь пользователь root
lpd
). Кроме того, результат работы принтера зависит от того, как он интерпретирует посылаемые ему данные. Одни принтеры распечатывают текстовые файлы,[18] другие — нет. PostScript-принтеры распечатывают файлы формата PostScript.