Книга: Разработка приложений в среде Linux. Второе издание
16.5.7. Управляющие символы
16.5.7. Управляющие символы
Управляющие символы — это символы со специальными значениями, которые могут отличаться в зависимости от того, находится ли терминал в каноническом или неформатируемом режиме ввода, и в зависимости от установок различных управляющих флагов. Каждое смещение (кроме VMIN
и VTIME
) в массиве с_сс
обозначает действие и содержит код символа, предназначенный для этого действия. Например, установите символ прерывания на Control-C с помощью следующего кода:
ts.с_сс[VINTR] = CTRLCHAR('С');
Макрос CTRLCHAR()
определен как
#define CTRLCHAR(ch) ((ch)&0x1F)
Некоторые системы имеют макрос CTRL()
, определенный в <termios.h>
, но не поддерживаемый во всех системах, поэтому определение нашей собственной версии будет более надежным. Мы используем запись ^C для обозначения Control-C.
Расположения символов, не определенные POSIX, активны только в случае установки локального управляющего флага IEXTEN(c_lflag)
.
Управляющие символы, которые вы видите как индексы массива с_сс
, перечислены ниже.
VINTR |
Смещение VINTR обычно устанавливается в ^C . Оно обычно сбрасывает на диск очереди ввода-вывода и передает SIGINT элементам группы процесса переднего плана, ассоциированным с tty. Процессы, неявно обрабатывающие SIGINT , немедленно завершаются. |
VQUIT |
Смещение VQUIT обычно устанавливается в ^ . Оно обычно сбрасывает на диск очереди ввода-вывода и передает SIGQUIT элементам группы процесса переднего плана, ассоциированным с tty. Процессы, неявно обрабатывающие SIGQUIT , завершаются, при возможности сброса дампа ядра (см. главу 10). |
VERASE |
Смещение VERASE обычно устанавливается в ^H или ^? . В каноническом режиме оно обычно стирает предыдущий символ в строке. В неформатируемом режиме это несущественно. |
VKILL |
Смещение VKILL обычно установлено в ^U . В каноническом режиме оно обычно стирает всю строку. В неформатируемом режиме это несущественно. |
VEOF |
Смещение VEOF обычно установлено в ^D . В каноническом режиме оно заставляет read() на файловом дескрипторе возвращать 0, сигнализируя о состоянии конца файла. На некоторых системах оно может делить пространство с символом VMIN , активным лишь в неформатируемом режиме. (Это не проблема, если вы сохраните struct termios с каноническими установками режима для восстановления действий в неформатируемом режиме, что все равно присуще практике программирования с применением termios .) |
VSTOP |
Смещение VSTOP обычно установлено в ^S . Оно заставляет tty приостановить передачу выходных данных до получения символа VSTART , или, в случае установки IXANY , до получения любого символа. |
VSTART |
Смещение VSTART обычно установлено в ^Q . Оно запускает приостановленный вывод tty. |
VSUSP |
Смещение VSUSP обычно установлено в ^Z . Оно вызывает передачу SIGTSTP текущей группе процессов переднего плана; более подробно об этом рассказывается в главе 15. |
VEOL и VEOL2 |
В каноническом режиме эти символы, а также символ новой строки ('n' ), сигнализируют о состоянии конца строки. Это вызывает передачу скомпонованного буфера и запуск нового буфера. На некоторых системах VEOL может делить пространство с символом VTIME , активным лишь в неформатируемом режиме, так же, как VEOF может делить пространство с VMIN . Символ VEOL2 в POSIX не определен. |
VREPRINT |
Смещение VREPRINT обычно установлено в ^R . В каноническом режиме в случае установки флага ECHO оно вызывает локальное отражение символа VREPRINT , новой строки (и возврата каретки, если это допустимо), а также перепечатку всего текущего буфера. Этот символ в POSIX не определен. |
VWERASE |
Смещение WERASE обычно установлено в ^W . В каноническом режиме оно стирает все пробелы в конце буфера, затем все остальные символы, что дает эффект стирания предыдущего слова в строке. Этот символ в POSIX не определен. |
VLNEXT |
Смещение VLNEXT обычно установлено в ^V . Само оно не вводится в буфер, но вызывает литеральное помещение в буфер следующего символа, даже если это один из управляющих символов. Для того чтобы ввести один литеральный символ VLNEXT , введите его дважды. Этот символ в POSIX не определен. |
Для отключения любой позиции управляющего символа установите его значение в _POSIX_VDISABLE
. Это работает только в случае определения _POSIX_VDISABLE
как значения, не равного -1. _POSIX_VDISABLE
работает в Linux, но переносимая программа, к сожалению, не сможет зависеть от отключения расположений управляющих символов во всех системах.
- Международные символы
- 21.3.4. Составные управляющие последовательности
- 16.5.6. Управляющие флаги
- 21.3.1. Управляющие символы
- Специальные управляющие символы
- Управляющие символы
- 13.4.3. Языки
- 13.8.1 Набор символов N1VT
- Модуль PT4TaskMakerNET: форматирование текста заданий
- Вступление
- CHAR(n), алиас для CHARACTER(n)
- Язык программирования Perl