18—19-я линии Васильевского острова
- 1 year ago
- 0
- 0
Дисциплина линии ( англ. line discipline, ldisc ) — это слой абстракции подсистемы терминальных устройств (tty) UNIX-подобных операционных систем , необходимый для имитации соответствующих возможностей аппаратного терминала . Этот слой расположен между драйвером и драйвером UART .
Соединение с драйвером UART осуществляется через двунаправленный канал. Эта схема имеет несколько вариаций. Например, в качестве драйвера UART может выступать виртуальное устройство телетайпа /dev/tty — в этом случае с имеющимся виртуальным терминалом могут работать процессы на локальной машине. Если же работа осуществляется через физический UART, то такая схема обеспечивает связь с процессом на удалённой рабочей станции, то есть режим удалённого терминала.
Соединение с консолью осуществляется через два однонаправленных канала: канал ввода и канал вывода. Здесь тоже возможны вариации. Если в качестве консоли используется драйвер виртуального терминала UNIX, то, через такую виртуальную консоль пользователь может работать в UNIX-системе в полноэкранном текстовом режиме, переключаясь между консолями при помощи горячих клавиш . Вместо драйвера консоли, интерфейс ldisc может экспортироваться через файл устройства , такой, как, например, /dev/ttyS0. В этом случае, с ldisc может взаимодействовать коммуникационная программа, такая, как
Существует так же схема подключения ldisc, при которой файлами виртуальных устройств заменяется как консоль, так и UART. Такая схема получила название tmux , xterm или . Подчинённое (slave) устройство, такое, как /dev/ttyp1, заменяет UART и может использоваться любым пользовательским процессом.
. В этом случае ведущее устройство (master), такое, как /dev/ptyp1, заменяет консоль и используется специализированной программой, такой какМодуль дисциплины линии предоставляет буфер для приёма строки из канала вывода консоли, обрабатывает управляющие символы редактирования строки (не путать с управляющими последовательностями терминала), а также обеспечивает реализацию механизма эхо — отправляет принятые с консоли символы обратно, через канал ввода консоли. После обработки, строка из буфера отправляется в канал UART. Принятые из канала UART данные, после обработки, отправляются в канал ввода консоли.
Именно слой ldisc определяет работу таких системных вызовов , как read(2) и write(2) при работе с различными файлами устройств терминала. Управлять им можно с помощью системного вызова ioctl(2) (или же посредством библиотечной tcsetattr(3)), в том случае, если хотя бы один из сопряжённых с ним компонентов экспортируется через файл устройств. При этом, какой именно компонент экспортирован, значения не имеет — управление можно осуществлять как через устройство master, так и через slave. Например, используя файл-устройство /dev/tty (соответствует подчинённой стороне), можно управлять режимом эхо консоли, а, используя файл-устройство /dev/ttyS0 (соответствует ведущей стороне), можно управлять режимом эхо для самой коммуникационной программы: при включённом эхо, всё, записанное в /dev/ttyS0, можно будет сразу считать назад.
Если программа использует собственную обработку строк, например, при помощи библиотеки Ncurses или Readline , то механизм обработки строк, предоставляемый подсистемой терминальных устройств, можно отключить, переведя ldisc в режим raw. В этом режиме, данные, принимаемые из канала вывода консоли, отправляются в канал UART, а данные, принятые с UART, отправляются в канал ввода консоли. Никакой обработки данных в этом режиме не происходит.