[<<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;