□ 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