Чтение онлайн

на главную - закладки

Жанры

Программирование для 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
. Если данное устройство поддерживает разделы, то первый раздел (младший номер 1) будет называться
/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.

Послать устройству данные из программы несложно. В приведенном ниже фрагменте программы с помощью низкоуровневых функций ввода-вывода содержимое буфера направляется в устройство

/dev/lp0
:

18

Принтер может требовать, чтобы в конце каждой строки стоял символ возврата каретки (ASCII-код 14), а в конце каждой страницы — символ подачи листа (ASCII-код 12).

int fd = open("/dev/lp0", O_WRONLY);

write(fd, buffer, bufffer_length);

close(fd);

6.4. Аппаратные устройства

В табл. 6.1 перечислены распространенные блочные устройства. "Родственные" устройства именуются схожим образом (например, второй раздел первого SCSI-диска называется

/dev/sda2
). Эта информация будет полезна при анализе файла
/proc/mounts
на предмет того, какие файловые системы смонтированы в настоящий момент (об этом рассказывается в разделе 7.5, "Дисководы, точки монтирования и файловые системы").

Таблица 6.1. Распространенные блочные устройства

Устройство Имя Старший номер Младший номер
Первый дисковод гибких дисков
/dev/fd0
2 0
Второй дисковод гибких дисков
/dev/fd1
2 1
Основной IDE-контроллер, главное устройство
/dev/hda
3 0
Основной IDE-контроллер,
главное устройство, первый раздел
/dev/hda1
3 1
Основной IDE-контроллер, подчиненное устройство
/dev/hdb
3 64
Основной IDE-контроллер, подчиненное устройство, первый раздел
/dev/hdb1
3 65
Дополнительный IDE-контроллер, главное устройство
/dev/hdc
22 0
Дополнительный IDE-контроллер, подчиненное устройство
/dev/hdd
22 64
Первый SCSI-диск
/dev/sda
8 0
Первый SCSI-диск, первый раздел
/dev/sda1
8 1
Второй SCSI диск
/dev/sdb
8 16
Второй SCSI-диск, первый раздел
/dev/sdb1
8 17
Первый SCSI-дисковод CD-ROM
/dev/scd0
11 0
Второй SCSI-дисковод CD-ROM
/dev/scd1
11 1

В табл. 6.2 перечислены распространенные символьные устройства.

Таблица 6.2. Распространенные символьные устройства

Устройство Имя Старший номер Младший номер
Параллельный порт 0
/dev/lp0
или
/dev/par0
6 0
Параллельный порт 1
/dev/lp1
или
/dev/par1
6 1
Первый последовательный порт
/dev/ttyS0
4 64
Второй последовательный порт
/dev/ttyS1
4 65
IDE-накопитель на магнитной ленте
/dev/ht0
37 0
Первый SCSI-накопитель на магнитной ленте
/dev/st0
9 0
Второй SCSI-накопитель на магнитной ленте
/dev/st1
9 1
Системная консоль
/dev/console
5 1
Первый виртуальный терминал
/dev/tty1
4 1
Второй виртуальный терминал
/dev/tty2
4 2
Текущее терминальное устройство процесса
/dev/tty
5 0
Звуковая плата
/dev/audio
14 4

К некоторым аппаратным компонентам можно получить доступ сразу через несколько символьных устройств. Чаще всего этим устройствам соответствует разная семантика доступа. Например, если в системе есть ленточное IDE-устройство

/dev/ht0
, то Linux автоматически перематывает ленту в дисководе, когда программа закрывает дескриптор файла устройства. С помощью ссылки
/dev/nht0
можно обратиться к тому же ленточному накопителю, но режим автоматической перемотки в нем будет отключен. Иногда в системе есть ссылки наподобие
/dev/cua0
. Это старые интерфейсы последовательных портов, таких как
/dev/ttyS0
.

Поделиться:
Популярные книги

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Хозяйка дома в «Гиблых Пределах»

Нова Юлия
Любовные романы:
любовно-фантастические романы
5.75
рейтинг книги
Хозяйка дома в «Гиблых Пределах»

Фиктивный брак

Завгородняя Анна Александровна
Фантастика:
фэнтези
6.71
рейтинг книги
Фиктивный брак

На границе империй. Том 7. Часть 2

INDIGO
8. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
6.13
рейтинг книги
На границе империй. Том 7. Часть 2

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Флеш Рояль

Тоцка Тала
Детективы:
триллеры
7.11
рейтинг книги
Флеш Рояль

Драконий подарок

Суббота Светлана
1. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
7.30
рейтинг книги
Драконий подарок

Зауряд-врач

Дроздов Анатолий Федорович
1. Зауряд-врач
Фантастика:
альтернативная история
8.64
рейтинг книги
Зауряд-врач

По дороге на Оюту

Лунёва Мария
Фантастика:
космическая фантастика
8.67
рейтинг книги
По дороге на Оюту

Мастер 5

Чащин Валерий
5. Мастер
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Мастер 5

Не лечи мне мозги, МАГ!

Ордина Ирина
Фантастика:
городское фэнтези
попаданцы
фэнтези
5.00
рейтинг книги
Не лечи мне мозги, МАГ!

Измена. Право на семью

Арская Арина
Любовные романы:
современные любовные романы
5.20
рейтинг книги
Измена. Право на семью

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Неудержимый. Книга XXI

Боярский Андрей
21. Неудержимый
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Неудержимый. Книга XXI