Основы программирования в Linux
□
— устанавливает два стоповых бита вместо одного;CSTOPB□
— выключает управление линиями модема при закрытии;HUPCL□
— включает генерацию и проверку четности;PARENB□
— применяет контроль нечетности вместо контроля четности.PARODDПримечаниеЕсли драйвер терминала обнаруживает, что последний дескриптор файла, ссылающийся на терминал, закрыт и при этом флаг
установлен, он устанавливает линии управления модема в состояние останова (hang-up).HUPCLРежимы управления применяются в основном при подключении к модему последовательной линии связи, хотя их можно использовать и при диалоге с терминалом. Обычно легче изменить настройку терминала, чем изменять стандартное поведение линий связи с помощью режимов управления структуры
.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Заставляет драйвер терминала отправить сигнал процессам, подключенным к терминалу. Мы обсудим сигналы более подробно в главе 11SIGINTQUITЗаставляет драйвер терминала отправить сигнал процессам, подключенным к терминалуSIGQUITERASEЗаставляет драйвер терминала удалить последний символ в строке KILLЗаставляет драйвер терминала удалить всю строку EOFЗаставляет драйвер терминала передать все символы строки во ввод, считываемый приложением. Если строка пустая, вызов вернет ноль символов, как будто он встретил на конец файлаreadEOLДействует как ограничитель строки в дополнение к более привычному символу перехода на новую строку SUSPЗаставляет драйвер терминала послать сигнал процессам, подключенным к терминалу. Если ваша система UNIX поддерживает управление заданиями, текущее приложение будет приостановленоSIGSUSPSTOPДействует как "прерыватель потока", т. е. прекращает дальнейший вывод на терминал. Применяется для поддержки управления потоком XON/XOFF и обычно задается как ASCII-символ (<Ctrl>+<S>)XOFFSTARTВозобновляет вывод после символа , часто ASCII-символSTOPXON