Скачиваний:
21
Добавлен:
09.05.2014
Размер:
354.82 Кб
Скачать

10.1.2.5 Ioctl

Системная функция ioctl является обобщением специфичных для терминала

функций stty (задать установки терминала) и gtty (получить установки терми-

нала), имевшихся в ранних версиях системы UNIX. Она выступает в качестве об-

щей точки входа для всех связанных с типом устройства команд и позволяет

процессам задавать аппаратные параметры, ассоциированные с устройством, и

программные параметры, ассоциированные с драйвером. Специальные действия,

выполняемые функцией ioctl для разных устройств различны и определяются ти-

пом драйвера. Программы, использующие вызов ioctl, должны должны знать, с

файлом какого типа они работают, так как они являются аппаратно-зависимыми.

Исключение из общего правила сделано для системы, которая не видит различий

между файлами разных типов. Более подробно использование функции ioctl для

терминалов рассмотрено в разделе 10.3.3.

Синтаксис командной строки, содержащей вызов системной функции:

Ioctl(fd,command,arg);

где fd - дескриптор файла, возвращаемый предварительно вызванной функцией

open, command - действие (команда), которое необходимо выполнить драйверу,

arg - параметр команды (может быть указателем на структуру). Команды специ-

фичны для различных драйверов; следовательно, каждый драйвер интерпретирует

команды в соответствии со своими внутренними спецификациями, от команды, в

свою очередь, зависит формат структуры данных, описываемой передаваемым па-

раметром. Драйверы могут считывать структуру данных arg из пространства за-

дачи в соответствии с предопределенным форматом или записывать установки ус-

тройства в пространство задачи по адресу указанной структуры. Например, на-

личие интерфейса, предоставляемого функцией ioctl, дает возможность пользо-

вателям устанавливать для терминала скорость передачи информации в бодах,

перематывать магнитную ленту, и, наконец, выполнять сетевые операции, зада-

вая номера виртуальных каналов и сетевые адреса.

10.1.2.6 Другие функции, имеющие отношение к файловой системе

Такие функции работы с файловой системой, как stat и chmod, выполняются

одинаково, как для обычных файлов, так и для устройств; они манипулируют с

индексом, не обращаясь к драйверу. Даже системная функция lseek работает для

устройств. Например, если процесс подводит головку на лентопротяжном устрой-

стве к указанному адресу смещения в байтах с помощью функции lseek, ядро

корректирует смещение в таблице файлов но не выполняет никаких действий,

специфичных для данного типа драйвера. Когда позднее процесс выполняет чте-

ние (read) или запись (write), ядро пересылает адрес смещения из таблицы

файлов в адресное пространство задачи, подобно тому, как это имеет место при

работе с файлами обычного типа, и устройство физически перемещает головку к

соответствующему смещению, указанному в пространстве задачи. Этот случай ил-

люстрируется на примере в разделе 10.3.

300

Периферийные Соединительная Вектор

устройства панель прерывания

+------------------+

| - |

tty00 -------------+ | - |

tty01 .... | | - |

... | +--+ +------------------+

tty07 -------------+-+ |------------| ttyintr 0 |

tty08 -------------+ +--+ +------------------+

tty09 .... +-+ |------------| ttyintr 1 |

... +--------+ +--+ +------------------+

tty15 ----+ +--------+ |------------| consintr |

консоль ------+ +--+ +------------------+

принтер00 -------------+-+ |------------| printintr 0 |

.... | +--+ +------------------+

принтер03 -------------+ | | | - |

| | | - |

+--+ +------------------+

Рисунок 10.6. Прерывания от устройств

Соседние файлы в папке материалы к собеседованию