[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Управляющие символы
Управляющие символы, определенные в массиве c_cc[] имеют специальное
значение и могут быть изменены вызовом tcsetattr(). На следующей
странице в колонке индекс приведены символьные константы, определенные
в <termios.h>. Эти символьные константы могут быть использованы как
индексы в массиве c_cc[]. Значения по умолчанию для соответствующих
элементов перечислены в колонке c_cc[индекс]. Некоторые из этих
управляющих символов описаны ниже:
VINTR (<RUBOUT> или ASCII DEL) генерирует сигнал SIGINT, который
посылается всем процессам в основной группе, связанной с
этим терминалом. По умолчанию процесс при получении этого
сигнала будет завершен, но он может проигнорировать этот
сигнал или перехватить его при помощи функции обработки.
VQUIT (CTRL-\ или ASCII FS) генерирует сигнал SIGQUIT. Этот сигнал
обрабатывается так же, как и SIGINT, за тем исключением, что
если получающий процесс не перехватил и не проигнорировал
этот сигнал, он будет не только принудительно завершен, но
для него будет также создан в текущей директории core-файл.
VERASE (#) стирает предыдущий символ. Он не может стереть символ
перед началом строки, ограниченной символами NL, EOF, EOL
или EOL2.
VWERASE (CTRL-W или ASCII ETX) очищает предыдущее "слово". Он не
может стереть слово из предыдущей строки, ограниченной
символами NL, EOF, EOL или EOL2. Это функция расширения,
поэтому для ее использования необходимо установить флаг
IEXTEN.
VKILL (@) стирает всю строку, ограниченную символами NL, EOF, EOL
или EOL2.
VEOF (CTRL-D или ASCII EOT) может использоваться для обозначения
конца файла при вводе с терминала. Когда получен этот
символ, все символы, ожидающие считывания, будут немедленно
переданы программе, без ожидания символа новой строки, и
остаток строки игнорируется. Таким образом, если в очереди
не было символов, то есть EOF был послан в начале строки,
read получит ноль символов, что является стандартным
обозначением конца файла.
NL (ASCII LF) обычный ограничитель строки. Этого символа нет в
массиве c_cc[], так как он не может быть изменен.
НЕКОТОРЫЕ УПРАВЛЯЮЩИЕ СИМВОЛЫ В c_cc[]
индекс c_cc[индекс]
VINTR DEL
VQUIT FS (CTRL-|)
VERASE #
VWERASE ETX (CTRL-W)
VKILL @
VEOF EOT (CTRL-D)
VSTOP DC1 (CTRL-S)
VSTART DC3 (CTRL-Q)
VSUSP EM (CTRL-Z)
VDISCARD SI (CTRL-O)
VLNEXT SYN (CTRL-V)
VREPRINT DC2 (CTRL-R)
Примеры:
tty.c_cc[VERASE] = '\b';
tty.c_cc[VSTOP] = _POSIX_VDISABLE;
VSTOP (CTRL-S или ASCII DC3) может использоваться для временной
приостановки вывода. Это полезно на экранных терминалах,
чтобы вывод не исчезал с экрана, пока пользователь его не
прочитал. Если вывод уже приостановлен, вводимые СТОП-
символы игнорируются и не будут прочитаны.
VSTART (CTRL-Q или ASCII DC1) используется для возобновления
вывода, остановленного СТОП-символом. Если ввод не был
приостановлен, символы VSTART игнорируются и не читаются.
VSUSP (CTRL-Z или ASCII EM) генерирует сигнал SIGTSTP, который
приостанавливает все процессы в основной группе для этого
терминала. Например, этот символ используется для функций
управления заданиями в shell.
VDISCARD (CTRL-O или ASCII SI) приводит к тому, что весь вывод будет
игнорироваться, пока не будет послан еще один символ
DISCARD, программа не выведет новые символы или не сбросит
соответствующее условие. Это функция расширения, и
исполняется, только если установлен флаг IEXTEN.
VLNEXT (CTRL-V или ASCII SYN) игнорирует специальное значение
следующего символа. Это работает для всех специальных
символов из массива c_cc[]. Это позволяет вводить символы,
которые в ином случае были бы проинтерпретированы системой
(такие, как KILL, QUIT). Символы VERASE, VKILL и VEOF могут
также быть введены после символа обратной косой черты
(backslash, \). В этом случае они также не вызовут
исполнения специальной функции.
VREPRINT (CTRL-R или ASCII DC2) печатает символ новой строки и все
символы, которые ожидали в очереди ввода (как если бы это
была новая строка). Это считается функцией расширения,
поэтому работает, только если установлен IEXTEN.
Для изменения управляющего символа, необходимо получить текущие
терминальные атрибуты вызовом tcgetattr(2), присвоить требуемому
элементу массива c_cc[] новое значение и изменить атрибуты терминала
вызовом tcsetattr(2). Если значение управляющего символа будет
_POSIX_VDISABLE, то функция, ассоциированная с этим символом, будет
выключена.
НЕКОТОРЫЕ УПРАВЛЯЮЩИЕ СИМВОЛЫ В c_cc[] - ПОВТОРЕНИЕ
индекс c_cc[индекс]
VINTR DEL
VQUIT FS (CTRL-|)
VERASE #
VWERASE ETX (CTRL-W)
VKILL @
VEOF EOT (CTRL-D)
VSTOP DC1 (CTRL-S)
VSTART DC3 (CTRL-Q)
VSUSP EM (CTRL-Z)
VDISCARD SI (CTRL-O)
VLNEXT SYN (CTRL-V)
VREPRINT DC2 (CTRL-R)
Примеры:
tty.c_cc[VERASE] = '\b';
tty.c_cc[VSTOP] = _POSIX_VDISABLE;