Interested Article - Дисциплина линии

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

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

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

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

Примечания

  1. IBM. . Дисциплины линии . IBM Knowledge Center . Дата обращения: 2 сентября 2016. 17 сентября 2016 года.
  2. . Дата обращения: 14 апреля 2013. 10 апреля 2013 года.

Ссылки

  • Alessandro Rubini. . Reading the console . the Linux Documentation Project . www.tldp.org. Дата обращения: 2 сентября 2016.
Источник —

Same as Дисциплина линии