Послать устройству данные из программы несложно. В приведенном ниже фрагменте программы с помощью низкоуровневых функций ввода-вывода содержимое буфера направляется в устройство /dev/lp0
:
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
.
Иногда требуется записывать данные непосредственно в символьные устройства. Рассмотрим примеры.
■ Терминальная программа напрямую обращается к модему через устройство последовательного порта. Данные, записываемые в устройство, передаются по модему на удаленный компьютер.
■ Программа резервного копирования записывает данные непосредственно на ленту. Такая программа может реализовывать свои собственные алгоритмы сжатия и проверки ошибок.
■ Программа обращается к первому виртуальному терминалу,[19] записывая данные в устройство /dev/tty1
.
Терминальным окнам, работающим в графической среде, и окнам сеансов удаленной регистрации назначаются не виртуальные терминалы, а псевдотерминалы (о них говорится в разделе 6.6, "Псевдотерминалы")