Возможно, наиболее интересным элементом структуры 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;