WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Дисциплина линии[1] (англ. line discipline, ldisc) — это слой абстракции подсистемы терминальных устройств (tty) UNIX-подобных операционных систем, необходимый для имитации соответствующих возможностей аппаратного терминала. Этот слой расположен между драйвером консоли и драйвером UART[2].

Соединение с драйвером UART осуществляется через двунаправленный канал. Эта схема имеет несколько вариаций. Например, в качестве драйвера UART может выступать виртуальное устройство телетайпа /dev/tty — в этом случае с имеющимся виртуальным терминалом могут работать процессы на локальной машине. Если же работа осуществляется через физический UART, то такая схема обеспечивает связь с процессом на удалённой рабочей станции, то есть режим удалённого терминала.

Соединение с консолью осуществляется через два однонаправленных канала: канал ввода и канал вывода. Здесь тоже возможны вариации. Если в качестве консоли используется драйвер виртуального терминала UNIX, то, через такую виртуальную консоль пользователь может работать в UNIX-системе в полноэкранном текстовом режиме, переключаясь между консолями при помощи горячих клавиш. Вместо драйвера консоли, интерфейс ldisc может экспортироваться через файл устройства, такой, как, например, /dev/ttyS0. В этом случае, с ldisc может взаимодействовать коммуникационная программа, такая, как minicom (англ.)

Существует так же схема подключения ldisc, при которой файлами виртуальных устройств заменяется как консоль, так и UART. Такая схема получила название псевдо-терминала (англ.). В этом случае ведущее устройство (master), такое, как /dev/ptyp1, заменяет консоль и используется специализированной программой, такой как tmux, xterm или socat. Подчинённое (slave) устройство, такое, как /dev/ttyp1, заменяет UART и может использоваться любым пользовательским процессом.

Модуль дисциплины линии предоставляет буфер для приёма строки из канала вывода консоли, обрабатывает команды редактирования строки и некоторые другие управляющие последовательности, а также обеспечивает реализацию механизма эхо — отправляет принятые с консоли символы обратно, через канал ввода консоли. После обработки, строка из буфера отправляется в канал UART. Принятые из канала UART данные, после обработки, отправляются в канал ввода консоли.

Именно слой ldisc определяет работу таких системных вызовов, как read(2) и write(2) при работе с различными файлами устройств терминала. Управлять им можно с помощью системного вызова ioctl(2) (или же посредством библиотечной функции-обёртки tcsetattr(3)), в том случае, если хотя бы один из сопряжённых с ним компонентов экспортируется через файл устройств. При этом, какой именно компонент экспортирован, значения не имеет — управление можно осуществлять как через устройство master, так и через slave. Например, используя файл-устройство /dev/tty (соответствует подчинённой стороне), можно управлять режимом эхо консоли, а, используя файл-устройство /dev/ttyS0 (соответствует ведущей стороне), можно управлять режимом эхо для самой коммуникационной программы: при включённом эхо, всё, записанное в /dev/ttyS0, можно будет сразу считать назад.

Если программа использует собственную обработку строк, например, при помощи библиотеки Ncurses или Readline, то механизм обработки строк, предоставляемый подсистемой терминальных устройств, можно отключить, переведя его в режим raw. В этом режиме, данные, принимаемые из канала вывода консоли, отправляются в канал UART, а данные, принятые с UART, отправляются в канал ввода консоли. Никакой обработки данных в этом режиме не происходит.

Примечания

  1. IBM. Подсистема tty. Дисциплины линии. IBM Knowledge Center.
  2. The TTY demystified

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.ru - проект по пересортировке и дополнению контента Википедии