Скачиваний:
56
Добавлен:
08.01.2014
Размер:
2.6 Mб
Скачать

Определение структуры termios

Теперь изучим состав структуры termios. Определение структуры termios находится в файле linux и содержит следующие элементы:

termios = record

c_iflag, (* Режимы ввода *)

c_oflag, (* Режимы вывода *)

c_cflag, (* Управляющие режимы *)

c_lflag : Cardinal; (* Режимы дисциплины линии связи *)

c_line : char; (* Дисциплина линии связи *)

c_cc : array [0..NCCS-1] of char; (* Управляющие символы *)

end;

Проще всего рассматривать структуру, начав с ее последнего элемента с_сс.

Массив с_сс

Символы редактирования строки, которые рассматривались в разделе 9.2.4, находятся в массиве с_сс. Их позиции в этом массиве задаются константами, определенными в файле stdio. Все определенные в спецификации ХSI значения приведены в табл. 9.1. Размер массива определяется константой NCCS, определенной в файле linux.

Следующий фрагмент программы показывает, как можно изменить значение символа quit для терминала, связанного со стандартным вводом (дескриптор файла со значением 0):

var

tdes:termios;

(* Получить исходные настройки терминала *)

tcgetattr(0, tdes);

tdes.c_cc[VQUIT] := char(octal(031)); (* CTRL-Y *)

(* Изменить установки терминала *)

tcsetattr(0, TCSAFLUSH, tdes);

Таблица 9.1. Коды управляющих символов

Константа

Значение

VINTR

Клавиша прерывания (Interrupt key)

VQUIT

Клавиша завершения (Quit key)

VERASE

Символ стирания (Erase character)

VKILL

Символ удаления строки (Kill character)

VEOF

Символ конца файла (EOF character)

VEOL

Символ конца строки (End of line marker – необязательный)

VSTART

Символ продолжения передачи данных (Start character)

VSTOP

Символ остановки передачи данных (Stop character)

VSUSP

Символ временной приостановки выполнения (Suspend character)

Этот пример иллюстрирует наиболее безопасный способ изменения состояния терминала. Сначала нужно получить текущее состояние терминала. Далее следует изменить только нужные параметры, не трогая остальные. И, наконец, изменить состояние терминала при помощи модифицированной структуры termios. Как уже было упомянуто, сохранять исходные значения полезно также для восстановления состояния терминала перед завершением программы, иначе нестандартное состояние терминала может оказаться сюрпризом для остальных программ.

Поле c_cflag

Поле c_cflag содержит параметры, управляющие состоянием порта терминала. Обычно процессу не нужно изменять значения поля c_cflag своего управляющего терминала. Изменения этого поля могут понадобиться специальным коммуникационным приложениям, или программам, открывающим коммуникационные линии для дополнительного оборудования, например, для принтера. Значения поля c_cflag образуются объединением при помощи операции ИЛИ битовых констант, определенных в файле stdio. В общем случае каждая константа представляет бит поля c_cflag, который может быть установлен или сброшен. Не будем объяснять назначение всех битов этого поля (за полным описанием обратитесь к справочному руководству системы). Тем не менее есть четыре функции, которые позволяют опрашивать и устанавливать скорость ввода и вывода, закодированную в этом поле, не беспокоясь о правилах манипулирования битами.

Соседние файлы в папке Полищук, Семериков. Системное программирование в UNIX средствами Free Pascal