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

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

write(fd, buffer, bufffer_length);

close(fd);

<p>6.4. Аппаратные устройства</p>

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

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

УстройствоИмяСтарший номерМладший номер
Первый дисковод гибких дисков/dev/fd020
Второй дисковод гибких дисков/dev/fd121
Основной IDE-контроллер, главное устройство/dev/hda30
Основной IDE-контроллер, главное устройство, первый раздел/dev/hda131
Основной IDE-контроллер, подчиненное устройство/dev/hdb364
Основной IDE-контроллер, подчиненное устройство, первый раздел/dev/hdb1365
Дополнительный IDE-контроллер, главное устройство/dev/hdc220
Дополнительный IDE-контроллер, подчиненное устройство/dev/hdd2264
Первый SCSI-диск/dev/sda80
Первый SCSI-диск, первый раздел/dev/sda181
Второй SCSI диск/dev/sdb816
Второй SCSI-диск, первый раздел/dev/sdb1817
Первый SCSI-дисковод CD-ROM/dev/scd0110
Второй SCSI-дисковод CD-ROM/dev/scd1111

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

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

УстройствоИмяСтарший номерМладший номер
Параллельный порт 0/dev/lp0 или /dev/par060
Параллельный порт 1/dev/lp1 или /dev/par161
Первый последовательный порт/dev/ttyS0464
Второй последовательный порт/dev/ttyS1465
IDE-накопитель на магнитной ленте/dev/ht0370
Первый SCSI-накопитель на магнитной ленте/dev/st090
Второй SCSI-накопитель на магнитной ленте/dev/st191
Системная консоль/dev/console51
Первый виртуальный терминал/dev/tty141
Второй виртуальный терминал/dev/tty242
Текущее терминальное устройство процесса/dev/tty50
Звуковая плата/dev/audio144

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

Иногда требуется записывать данные непосредственно в символьные устройства. Рассмотрим примеры.

■ Терминальная программа напрямую обращается к модему через устройство последовательного порта. Данные, записываемые в устройство, передаются по модему на удаленный компьютер.

■ Программа резервного копирования записывает данные непосредственно на ленту. Такая программа может реализовывать свои собственные алгоритмы сжатия и проверки ошибок.

■ Программа обращается к первому виртуальному терминалу,[19] записывая данные в устройство /dev/tty1.

Терминальным окнам, работающим в графической среде, и окнам сеансов удаленной регистрации назначаются не виртуальные терминалы, а псевдотерминалы (о них говорится в разделе 6.6, "Псевдотерминалы")

Перейти на страницу:

Похожие книги