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


         

Поле с_lflag


Возможно, наиболее интересным элементом структуры termios для программиста является поле c_lflag. Оно используется текущей дисциплиной линии связи для управления функциями терминала. Это поле содержит следующие флаги:

ICANON

Канонический построчный ввод

ISIG

Разрешить обработку прерываний

IEXTEN

Разрешить дополнительную (зависящую от реализации) обработку вводимых символов

ECHO

Разрешить отображение вводимых символов на экране

ЕСНОЕ

Отображать символ удаления как возврат-пробел-возврат

ЕСНОК

Отображать новую строку после удаления строки

ECHONL

Отображать перевод строки

NOFLSH

Отменить очистку буфера ввода после прерывания

TOSTOP

Посылать сигнал SIGTTOU при попытке вывода фонового процесса

Если установлен флаг ICANON, то включается канонический режим работы терминала. Как уже было видно выше, это позволяет использовать символы редактирования строки в процессе построчного ввода. Если флаг ICANON не установлен, то терминал находится в режиме прямого доступа (raw mode), который чаще всего используется полноэкранными программами и коммуникационными пакетами. Вызовы read будут при этом получать данные непосредственно из очереди ввода. Другими словами, основной единицей ввода будет одиночный символ, а не логическая строка. Программа при этом может считывать данные по одному символу (что обязательно для экранных редакторов) или большими блоками фиксированного размера (что удобно для коммуникационных программ). Но для того чтобы полностью управлять поведением вызова fdread, программист должен задать еще два дополнительных параметра. Это параметр VMIN, наименьшее число символов, которые должны быть приняты до возврата из вызова read, и параметр VTIME, максимальное время ожидания для вызова fdread. Оба параметра записываются в массиве с_сс. Это важная тема, которая будет подробно изучена в следующем разделе. А пока просто обратим внимание на то, как в следующем примере сбрасывается флаг ICANON.

uses stdio, linux;



Содержание  Назад  Вперед