Системное программирование в UNIX средствами Free Pascal


Параметры MIN и TIME


Параметры MIN и TIME имеют значение только при выключенном флаге ICANON. Они предназначены для тонкой настройки управления вводом данных. Параметр MIN задает минимальное число символов, которое должен получить драйвер терминала для возврата из вызова fdread. Параметр TIME задает значение максимального интервала ожидания; этот параметр обеспечивает еще один уровень управления вводом с терминала. Время ожидания измеряется десятыми долями секунды.

Значения параметров MIN и МАХ находятся в массиве с_сс структуры termios, описывающей состояние терминала. Их индексы в массиве определяются постоянными VMIN и VTIME из файла stdio. Следующий фрагмент программы показывает, как можно задать их значения:

uses stdio, linux;

var

  tdes:termios;

  ttyfd:longint;

 

(* Получает текущее состояние *)

tcgetattr(ttyfd, tdes);

 

tdes.c_lflag := tdes.c_lflag and (not ICANON); (* Отключает канонический режим *)

tdes.c_cc[VMIN] := 64;   (* В символах *)

tdes.c_cc[VTIME] := 2;   (* В десятых долях секунды *)

 

tcsetattr(0, TCSAFLUSH, &tdes);

Константы VMIN и VTIME обычно имеют те же самые значения, что и постоянные VEOF и VEOL. Это означает, что параметры MIN и TIME занимают то же положение, что и символы eof и еоl. Следовательно, при переключении из канонического в неканонический режим нужно обязательно задавать значения параметров MIN и TIME, иначе может наблюдаться странное поведение терминала. (В частности, если символу eof

соответствует комбинация клавиш Ctrl+D,

то программа будет читать ввод блоками по четыре символа.) Аналогичная опасность возникает при возврате в канонический режим.

Существуют четыре возможных комбинации параметров MIN и TIME:

–        оба параметра MIN и TIME равны нулю. При этом возврат из вызова fdread обычно происходит немедленно. Если в очереди ввода терминала присутствуют символы (напомним, что попытка ввода может быть осуществлена в любой момент времени), то они будут помещены в буфер процесса. Поэтому, если программа переводит свой управляющий терминал в режим прямого доступа при помощи сброса флага ICANON и оба параметра MIN и TIME равны нулю, то вызов




- Начало -  - Назад -  - Вперед -



Книжный магазин