□
CSTOPB
— устанавливает два стоповых бита вместо одного;
□
HUPCL
— выключает управление линиями модема при закрытии;
□
PARENB
— включает генерацию и проверку четности;
□
PARODD
— применяет контроль нечетности вместо контроля четности.
Примечание
Если драйвер терминала обнаруживает, что последний дескриптор файла, ссылающийся на терминал, закрыт и при этом флаг
HUPCL
установлен, он устанавливает линии управления модема в состояние останова (hang-up).
Режимы управления применяются в основном при подключении к модему последовательной линии связи, хотя их можно использовать и при диалоге с терминалом. Обычно легче изменить настройку терминала, чем изменять стандартное поведение линий связи с помощью режимов управления структуры
termios
.
Локальные режимы
Эти режимы управляют разнообразными характеристиками терминала. Вы можете задать локальный режим, устанавливая флаги элемента
c_iflag
структуры
termios
с помощью следующих макросов:
□
ECHO
— включает локальное отображение вводимых символов;
□
ECHOE
— выполняет комбинацию
Backspace
,
Space
,
Backspace
при получении символа
ERASE
(стереть);
□
ECHOK
— стирает строку при получении символа
KILL
;
□
ECHONL
— отображает символы перехода на новую строку;
□
ICANON
— включает стандартную обработку ввода (см. текст, следующий за данным перечнем);
□
IEXTEN
— включает функции, зависящие от реализации;
□
ISIG
— включает генерацию сигналов;
□
NOFLSH
— отключает немедленную запись очередей;
□
TOSTOP
— посылает сигнал фоновым процессам при попытке записи.
Два самых важных флага в этой группе —
ECHO
, позволяющий подавлять отображение вводимых символов, и
ICANON
, переключающий терминал в один из двух различных режимов обработки принимаемых символов. Если установлен флаг
ICANON
, говорится, что строка в каноническом режиме, если нет, то строка в неканоническом режиме.
Специальные управляющие символы
Специальные управляющие символы — это коллекция символов подобных символам от комбинации клавиш <Ctrl>+<C>, действующих особым образом, когда пользователь вводит их. В элементе
c_cc
структуры
termios
содержатся символы, отображенные на поддерживаемые функции. Позиция каждого символа (его номер в массиве) определяется макросом, других ограничений для управляющих символов не задано.
Массив
c_cc
используется двумя очень разными способами, зависящими от того, установлен для терминала канонический режим (т.е. установлен флаг
ICANON
в элементе
c_lflag
структуры
termios
) или нет.
Важно понять, что в двух разных режимах есть некоторое взаимное наложение при применении номеров элементов массива. По этой причине никогда не следует смешивать значения для этих двух режимов.
Для канонического режима применяются следующие индексы:
□
VEOF
— символ
EOF
;
□
VEOL
— дополнительный символ конца строки
EOL
;
□
VERASE
— символ
ERASE
;
□
VINTR
— символ прерывания
INTR
;
□
VKILL
— символ уничтожения
KILL
;
□
VQUIT
— символ завершения
QUIT
;
□
VSUSP
— символ приостанова
SUSP
;
□
VSTART
— символ запуска
START
;
□
VSTOP
— символ останова
STOP
.
Для канонического режима применяются следующие индексы:
□
VINTR
— символ
INTR
;
□
VMIN
— минимальное значение
MIN
;
□
VQUIT
— символ
QUIT
;
□
VSUSP
— символ
SUSP
;
□
VTIME
— время ожидания
TIME
;
□
VSTART
— символ
START
;
□
VSTOP
— символ
STOP
.
Символы
Поскольку для более сложной обработки вводимых символов специальные символы и неканонические значения очень важны, мы описываем их в табл. 5.1.
Таблица 5.1
Символ | Описание |
INTR
| Заставляет драйвер терминала отправить сигнал SIGINT процессам, подключенным к терминалу. Мы обсудим сигналы более подробно в главе 11 |
QUIT
| Заставляет драйвер терминала отправить сигнал SIGQUIT процессам, подключенным к терминалу |
ERASE
| Заставляет драйвер терминала удалить последний символ в строке |
KILL
| Заставляет драйвер терминала удалить всю строку |
EOF
| Заставляет драйвер терминала передать все символы строки во ввод, считываемый приложением. Если строка пустая, вызов read вернет ноль символов, как будто он встретил на конец файла |
EOL
| Действует как ограничитель строки в дополнение к более привычному символу перехода на новую строку |
SUSP
| Заставляет драйвер терминала послать сигнал SIGSUSP процессам, подключенным к терминалу. Если ваша система UNIX поддерживает управление заданиями, текущее приложение будет приостановлено |
STOP
| Действует как "прерыватель потока", т. е. прекращает дальнейший вывод на терминал. Применяется для поддержки управления потоком XON/XOFF и обычно задается как ASCII-символ XOFF (<Ctrl>+<S>) |
START
| Возобновляет вывод после символа STOP , часто ASCII-символ XON
|