Книга: Разработка приложений в среде Linux. Второе издание

21.3.1. Управляющие символы

21.3.1. Управляющие символы

Консоль считывает управляющие символы незамедлительно, действует в соответствии с ними и затем продолжает считывать символы в нормальном режиме.

В файлах и документации termcap и terminfo управляющие символы изображаются символом ^c. Мы будем часто в данной книге использовать это условное обозначение, поскольку оно более универсально и удобно для вас, чем восьмеричные управляющие последовательности С. Для отыскания числового значения управляющего символа в некоторых системах предусмотрен макрос CTRL() в <termios.h>, но он не является стандартным для всех систем.

В качестве замены мы предлагаем нашу собственную версию CTRLCHAR().

#define CTRLCHAR(ch) ((ch)&0x1F)

Она используется так:

if (с == CTRLCHAR('С')) {
 /* был нажат символ Control-C */
}

Управляющие символы, воспринимаемые консолью Linux, описаны в табл. 21.1. Символ ^? фактически представляет собой '?'+0100, а не '?'-0100, поэтому это не настоящий управляющий знак вопроса, но в любом случае стандартное обозначение для него ^?. Его значение есть 0177 (восьмеричное), 127 (десятичное), 7F (шестнадцатеричное). Вы не сможете использовать макрос CTRL, описанный только что, для проверки. Вместо этого придется применять числовое значение 127.

Таблица 21.1. Символы управления консолью

Управляющий символ Имя ASCII Описание
^G BEL Выдает тональный сигнал.
BS Курсор перемещается к предыдущему символу, не перезаписывая его (если только курсор не находится в первой колонке).
^I НТ Горизонтальная табуляция; курсор перемещается к следующей точке табуляции.
^J LF Новая строка; курсор перемещается на следующую строку; если курсор уже находился в самой нижней точке области прокручивания, то она продвигается вверх.
^K VT Вертикальная табуляция; интерпретируется так же, как новая строка.
^L FF Подача страницы; интерпретируется так же, как новая строка.
CR Возврат каретки; курсор перемещается в начало текущей строки.
^N SO Сдвиг; используется альтернативный (G1) символ, установленный для отображения глифов; изображаются глифы для управляющих символов.
^O SI Сдвиг; используется стандартный (G0) символ, установленный для отображения глифов; не изображаются глифы для управляющих символов.
^X CAN Отменяется любая действующая управляющая последовательность.
^Z SUB Отменяется любая действующая управляющая последовательность.
^[ ESC ESCape; начало управляющей последовательности.
^? DEL Игнорируется.
ALT-^[ - Вводится последовательность команд, которая будет описана далее.

Обратите внимание на то, что результат некоторых из данных кодов зависит от настроек tty. Хотя сама консоль описана здесь абсолютно точно, настройки tty могут изменять передаваемые символы. Например, передача ^J (LF) обычно вынуждает уровень tty также передавать ^M (CR), а символ ^? (DEL) может быть настроен на передачу (BS).

Символ ALT-^[ вообще не является символом ASCII. Это восьмибитовый символ ESC, тогда как ASCII определяет только семибитовые символы. Вы можете применять этот символ в качестве комбинации быстрого вызова для ввода последовательности CSI. Однако мы рекомендуем избегать этого, так как при этом понадобится чистый восьмибитовый канал связи, который может помешать удаленной работе вашей программы на другой подключенной системе Linux, возможно, из-за последовательного канала, передающего только семь битов из каждого байта.

Для получения более подробной информации о символах ASCII обратитесь к man-странице ascii(7). Кроме того, на man-странице iso_8859_1(7) рассматривается набор восьмибитовых знаков ISO Latin 1 (точнее говоря, ISO 8859 Latin Alphabet number 1); этот более новый стандарт стал фактической заменой ASCII и сейчас официально называется ISO 646-IRV.

Оглавление книги


Генерация: 0.145. Запросов К БД/Cache: 0 / 2
поделиться
Вверх Вниз