Читаем Основы программирования в Linux полностью

int tcsetattr(int fd, int actions, const struct termios *termios_p);

Поле actions функции tcsetattr управляет способом внесения изменений. Есть три варианта:

TCSANOW — изменяет значения сразу;

TSCADRAIN — изменяет значения, когда текущий вывод завершен;

TCSAFLUSH — изменяет значения, когда текущий вывод завершен, но отбрасывает любой ввод, доступный в текущий момент и все еще не возвращенный вызовом read.

Примечание

Учтите, что для программ очень важно восстановить настройки терминала, действующие до начала выполнения программы. За первоначальное сохранение значений и их восстановление после завершения выполнения всегда отвечает программа.

Теперь рассмотрим более подробно режимы и связанные с ними вызовы функций. Некоторые характеристики режимов довольно специализированные и редко применяются, поэтому мы остановимся только на основных. Если вы хотите знать больше, просмотрите страницы интерактивного справочного руководства вашей системы либо скопируйте стандарт POSIX или X/Open.

Наиболее важный режим, который следует принять во внимание при первом прочтении, — локальный (local). Канонический и неканонический режимы — решение второй проблемы в вашем первом приложении: пользователь должен нажимать клавишу или для чтения программой входных данных. Вам следует заставить программу ждать всю строку ввода или набрасываться на ввод, как только он набран на клавиатуре.

<p>Режимы ввода</p>

Режимы ввода управляют тем, как обрабатывается ввод (символы, полученные драйвером терминала от последовательного порта или клавиатуры) до передачи его в программу. Вы управляете вводом, устанавливая флаги в элементе c_iflag структуры termios. Все флаги определены как макросы и могут комбинироваться с помощью поразрядной операции OR. Это свойственно всем режимам терминала.

В элементе c_iflag могут применяться следующие макросы:

□ BRKINT — генерирует прерывание, когда в линии связи обнаруживается разрыв (потеря соединения);

□ IGNBRK — игнорирует разрывы соединения в линии связи;

□ ICRNL — преобразует полученный символ возврата каретки в символ перехода на новую строку;

□ IGNCR — игнорирует полученные символы возврата каретки;

□ INLCR — преобразует полученные символы перехода на новую строку в символы возврата каретки;

□ IGNPAR — игнорирует символы с ошибками четности;

□ INCPK — выполняет контроль четности у полученных символов;

□ PARMRK — помечает ошибки четности;

□ ISTRIP — обрезает (до семи битов) все входные символы;

□ IXOFF — включает программное управление потоком при вводе;

□ IXON — включает программное управление потоком при выводе.

Примечание

Если флаги BRKINT и IGNBRK не установлены, сбой на линии связи считывается как символ NULL (0x00).

Вам не придется часто изменять режимы ввода, поскольку обычно стандартные значения — наиболее подходящие, и поэтому мы больше не будем их обсуждать.

<p>Режимы вывода</p>

Эти режимы управляют способом обработки выводимых символов, т.е. тем, как символы, полученные от программы, обрабатываются перед передачей на последовательный порт или экран. Как и следовало ожидать, многие из них — оборотная сторона режимов ввода. Есть несколько дополнительных флагов, которые связаны в основном с разрешениями для медленных терминалов, которым требуется время для обработки таких символов, как возвраты каретки. Почти все они либо избыточны (поскольку терминалы стали быстрее) или лучше обрабатываются с помощью базы данных характеристик терминала terminfo, которую вы примените позже в этой главе.

Вы управляете режимами вывода, устанавливая флаги элемента c_oflag структуры типа termios. В элементе c_oflag могут применяться следующие макросы:

□ OPOST — включает обработку вывода;

□ ONLCR — преобразует в символ перевода строки пару символов возврат каретки/перевод строки;

□ OCRNL — преобразует любой символ возврата каретки в выводе в символ перевода строки;

□ ONOCR — не выводит символ возврата каретки в столбце 0;

□ ONLRET — символ перехода на новую строку выполняет возврат каретки;

□ OFILL — посылает символы заполнения для формирования задержки;

□ OFDEL — применяет символ DEL как заполнитель вместо символа NULL;

□ NLDLY — выбор задержки для символа перехода на новую строку;

□ CRDLY — выбор задержки для символа возврата каретки;

□ TABDLY — выбор задержки для символа табуляции;

□ BSDLY — выбор задержки для символа Backspace;

Перейти на страницу:

Похожие книги

Полное руководство по Microsoft Windows XP
Полное руководство по Microsoft Windows XP

В книге известного американского автора описывается среда ОС Windows XP и принципы ее функционирования, приведен сравнительный анализ Windows XP с предшествующими версиями операционной системы Windows. Рассматриваются вопросы применения и модификации нового интерфейса с целью получения прямого доступа ко всем функциям Windows XP обсуждаются варианты подключения к компьютерным сетям. Несколько разделов посвящены работе с реестром и конфигурационными файлами, мультимедийным функциям и разнообразным системным службам, а также методам решения проблем с программным обеспечением и оборудованием. Особое внимание уделено обеспечению безопасности операционной системы.Издание адресовано пользователям и сетевым администраторам, желающим активно применять возможности операционной системы Windows XP (в том числе и недокументированные).

Джон Поль Мюллер , Питер Нортон

ОС и Сети / Книги по IT