Управляющая последовательность¶
Управляющая последовательность — это последовательность символов, используемая в компьютерных системах, телекоммуникациях и электронике для управления работой устройства, передачи команд или изменения режима обработки данных. В отличие от обычных данных (например, текста или изображений), управляющая последовательность интерпретируется принимающим устройством или программой как инструкция, а не как информационное содержимое. Управляющие последовательности широко применяются в протоколах передачи данных, терминалах, принтерах, а также в языках программирования (например, для форматирования вывода).
¶История
Истоки управляющих последовательностей восходят к телеграфии и телетайпам XIX — начала XX века. В телетайпных системах использовались специальные коды для управления устройством: возврат каретки, перевод строки, звонок. С развитием компьютерной техники в 1960-х годах возникла необходимость в универсальных способах управления терминалами и принтерами.
В 1970-х годах компания American National Standards Institute (ANSI) разработала стандарт ANSI X3.64, который определил набор управляющих последовательностей для текстовых терминалов. Эти последовательности, начинающиеся с символа ESC (Escape, код 27 в ASCII), получили название «escape-последовательности». Стандарт ANSI стал основой для управления VT100-терминалами (Digital Equipment Corporation) и впоследствии был принят в эмуляторах терминалов, таких как xterm, GNOME Terminal и Windows Terminal.
С распространением персональных компьютеров и операционных систем управляющие последовательности стали использоваться в драйверах принтеров (например, PCL — Printer Command Language от Hewlett-Packard), в протоколах передачи данных (например, в модемных командах Hayes) и в языках программирования (например, в C-строках для символов табуляции, перевода строки и т. д.).
¶Классификация
Управляющие последовательности можно классифицировать по нескольким признакам.
¶По способу кодирования
- ASCII-управляющие символы — одиночные символы из диапазона кодов 0–31 (и 127) в таблице ASCII. Примеры: NUL (0x00), BEL (0x07, звонок), CR (0x0D, возврат каретки), LF (0x0A, перевод строки). Каждый такой символ выполняет одну конкретную функцию.
- Escape-последовательности — последовательности, начинающиеся с символа ESC (0x1B) и содержащие один или несколько последующих символов. Пример: ESC[2J — очистка экрана терминала.
- Многосимвольные команды — последовательности, состоящие из нескольких символов, не обязательно начинающихся с ESC. Например, в протоколе PCL команды начинаются с символа ESC, но могут включать параметры, разделённые пробелами.
¶По области применения
- Терминальные управляющие последовательности — для управления текстовыми терминалами (перемещение курсора, изменение цвета, очистка экрана). Стандарт ANSI X3.64.
- Принтерные управляющие последовательности — для управления принтерами (выбор шрифта, формат страницы, режим печати). Примеры: PCL, PostScript, ESC/P (Epson).
- Модемные управляющие последовательности — для управления модемами (набор номера, переключение режимов). Пример: набор команд Hayes (AT-команды).
- Управляющие последовательности в языках программирования — для представления специальных символов в строковых литералах. Пример:
\n(перевод строки),\t(табуляция),\x1B(ESC). - Протокольные управляющие последовательности — для управления потоком данных в каналах связи (например, XON/XOFF, DLE STX/ETX).
¶Устройство и принцип работы
¶Структура escape-последовательности ANSI
Типичная escape-последовательность ANSI имеет следующий формат:
`` ESC [ <параметры> <команда> ``
Где:
ESC— символ с кодом 27 (0x1B).[— символ левой квадратной скобки (CSI — Control Sequence Introducer).<параметры>— необязательные числовые параметры, разделённые точкой с запятой (например,1;31).<команда>— буквенный символ, определяющий действие (например,mдля установки атрибутов текста,Hдля позиционирования курсора).
Пример: ESC[1;31m — установить жирный шрифт (1) и красный цвет (31). ESC[2J — очистить весь экран.
¶Управляющие символы ASCII
Каждый управляющий символ ASCII имеет фиксированное значение и назначение. Например:
0x00(NUL) — пустой символ, используется для заполнения.0x07(BEL) — звуковой сигнал.0x08(BS) — возврат на один символ назад.0x0A(LF) — перевод строки.0x0D(CR) — возврат каретки.0x1B(ESC) — начало escape-последовательности.
¶Принцип работы
Принимающее устройство (терминал, принтер, модем) непрерывно считывает входящие символы. Если символ является управляющим (например, ESC), устройство переходит в режим ожидания последующих символов, которые интерпретируются как параметры или команда. После завершения последовательности устройство выполняет соответствующее действие, например, перемещает курсор, изменяет цвет или печатает страницу.
¶Применение
¶Терминалы и эмуляторы
Управляющие последовательности ANSI используются в текстовых терминалах и их эмуляторах для:
- Перемещения курсора (ESC[<строка>;<столбец>H).
- Очистки экрана (ESC[2J).
- Изменения цвета текста и фона (ESC[<коды>m).
- Включения/выключения режимов (например, мерцания, подчёркивания).
¶Принтеры
В принтерах управляющие последовательности позволяют:
- Выбирать шрифт и размер символов.
- Устанавливать поля и ориентацию страницы.
- Переключать режимы печати (графический, текстовый).
- Управлять подачей бумаги.
¶Модемы
Команды Hayes (AT-команды) — это разновидность управляющих последовательностей, используемых для настройки и управления модемами. Пример: ATDT1234567 — набрать номер 1234567 в тоновом режиме.
¶Языки программирования
В языках программирования (C, C++, Python, Java) управляющие последовательности используются для представления специальных символов в строковых литералах. Например:
\n— перевод строки (LF).\t— табуляция.\r— возврат каретки (CR).\eили\x1B— символ ESC.
¶Сетевые протоколы
В протоколах передачи данных (например, Telnet, SSH) управляющие последовательности используются для согласования параметров соединения, управления терминалом и передачи команд.
¶Примеры
¶Пример 1: Управление цветом в терминале
Последовательность ESC[31m устанавливает красный цвет текста, ESC[0m сбрасывает все атрибуты. В эмуляторе терминала команда echo -e "\033[31mКрасный текст\033[0m" (в Linux) выведет слово «Красный текст» красным цветом.
¶Пример 2: Управление принтером PCL
Команда ESC&l1O в языке PCL устанавливает ориентацию страницы в альбомный режим. Команда ESC(s1p12h12v0s0b0T выбирает шрифт Courier New размером 12 пунктов.
¶Пример 3: Управление модемом
Команда ATZ сбрасывает модем к заводским настройкам. Команда ATH завершает текущее соединение.
¶Интересные факты
- Первая широко распространённая escape-последовательность была использована в телетайпах для управления звонком (BEL, код 7). Этот символ до сих пор используется в некоторых терминалах для подачи звукового сигнала.
- Стандарт ANSI X3.64 был разработан в 1979 году и до сих пор остаётся основой для большинства эмуляторов терминалов.
- В операционной системе Windows управляющие последовательности ANSI поддерживаются не во всех консолях; для их активации требуется включение режима виртуального терминала (с Windows 10 версии 1809).
- В языке PostScript, используемом в принтерах, управляющие последовательности отсутствуют — вместо этого используется полноценный язык программирования.
¶Критика
Управляющие последовательности имеют ряд недостатков:
- Несовместимость — разные производители устройств (терминалов, принтеров) могут использовать разные наборы команд, что приводит к проблемам при переносе программного обеспечения.
- Уязвимость к атакам — злоумышленник может внедрить управляющие последовательности в выводимые данные (например, в веб-страницу или лог-файл), что может привести к нежелательным действиям (например, к изменению настроек терминала или выполнению команд).
- Сложность отладки — управляющие последовательности могут быть трудно читаемы при анализе протоколов передачи данных.
¶Источники
- ANSI X3.64-1979, «Control Sequences for Video Terminals and Similar Devices».
- RFC 854 — Telnet Protocol Specification.
- Hewlett-Packard, «PCL 5 Printer Language Technical Reference Manual».
- Epson, «ESC/P Reference Manual».
- Tanenbaum, A. S., «Computer Networks», 5th ed.
- Стивенс, У. Р., «UNIX: взаимодействие процессов».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →


