□ 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(+) |
START |
Возобновляет вывод после символа STOP, часто ASCII-символ XON |
Значения TIME и MIN
Значения TIMEи MINприменяются только в неканоническом режиме и действуют вместе для управления считыванием входных данных. Вместе они управляют действиями при попытке программы прочесть дескриптор файла, ассоциированный с терминалом.
Возможны четыре варианта.
□ MIN = 0и TIME = 0. В этом случае вызов readвсегда завершается сразу же. Если какие-то символы доступны, они будут возвращены, если нет, то readвернет ноль, и никакие символы не будут считаны.
□ MIN = 0и TIME > 0. В этом случае вызов readзавершится, когда все доступные символы будут считаны или когда пройдет TIMEдесятых долей секунды. Если нет прочитанных символов из-за превышения отпущенного времени, readвернет 0. В противном случае он вернет количество прочитанных символов.
□ MIN > 0и TIME = 0. В этом случае вызов readбудет ждать до тех пор, пока можно будет считать MINсимволов, и затем вернет это количество символов. В случае конца файла возвращается 0.
□ MIN > 0и TIME > 0. Это самый сложный случай. После вызова readждет получения символа. Когда первый символ получен, каждый раз при получении последующего символа запускается межсимвольный таймер (или перезапускается, если он уже был запущен). Вызов readзавершится, когда либо можно будет считать MINсимволов, либо межсимвольное время превысит TIMEдесятых долей секунды. Это может пригодиться для подсчета разницы между единственным нажатием клавиши и запуском функциональной клавиатурной escape-последовательности. Тем не менее следует знать, что сетевые соединения или высокая загрузка процессора могут полностью стереть такие полезные сведения о времени.
Установив неканонический режим и используя значения MINи TIME, программы могут выполнять посимвольную обработку ввода.
Доступ к режимам терминала из командной оболочки
Если вы хотите просмотреть параметры termios, находясь в командной оболочке, примените следующую команду для получения их списка:
$ stty -a
На установленных у авторов системах Linux, обладающих структурами termiosс некоторыми расширениями по сравнению со стандартными, получен следующий вывод:
Читать дальше