Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

Режимы управления применяются в основном при подключении к модему последовательной линии связи, хотя их можно использовать и при диалоге с терминалом. Обычно легче изменить настройку терминала, чем изменять стандартное поведение линий связи с помощью режимов управления структуры

termios
.

Локальные режимы

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

c_iflag
структуры
termios
с помощью следующих макросов:

 

ECHO
— включает локальное отображение вводимых символов;

 

ECHOE
— выполняет комбинацию
Backspace
,
Space
,
Backspace
при получении символа
ERASE
(стереть);

 

ECHOK
— стирает строку при получении символа
KILL
;

 

ECHONL
— отображает символы перехода на новую строку;

 

ICANON
— включает стандартную обработку ввода (см. текст, следующий за данным перечнем);

 

IEXTEN
— включает функции, зависящие от реализации;

 

ISIG
— включает генерацию сигналов;

 

NOFLSH
— отключает немедленную запись очередей;

 

TOSTOP
— посылает сигнал фоновым процессам при попытке записи.

Два самых важных флага в этой группе —

ECHO
, позволяющий подавлять отображение вводимых символов, и
ICANON
, переключающий терминал в один из двух различных режимов обработки принимаемых символов. Если установлен флаг
ICANON
, говорится, что строка в каноническом режиме, если нет, то строка в неканоническом режиме.

Специальные управляющие символы

Специальные управляющие символы — это коллекция символов подобных символам от комбинации клавиш <Ctrl>+<C>, действующих особым образом, когда пользователь вводит их. В элементе

c_cc
структуры
termios
содержатся символы, отображенные на поддерживаемые функции. Позиция каждого символа (его номер в массиве) определяется макросом, других ограничений для управляющих символов не задано.

Массив

c_cc
используется двумя очень разными способами, зависящими от того, установлен для терминала канонический режим (т.е. установлен флаг
ICANON
в элементе
c_lflag
структуры
termios
) или нет.

Важно понять, что в двух разных режимах есть некоторое взаимное наложение при применении номеров элементов массива. По этой причине никогда не следует смешивать значения для этих двух режимов.

Для канонического режима применяются следующие индексы:

 

VEOF
— символ
EOF
;

 

VEOL
— дополнительный символ конца строки
EOL
;

 

VERASE
— символ
ERASE
;

 

VINTR
— символ прерывания
INTR
;

 

VKILL
— символ уничтожения
KILL
;

 

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
(<Ctrl>+<S>)
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.

Поделиться:
Популярные книги

Я все еще барон

Дрейк Сириус
4. Дорогой барон!
Фантастика:
боевая фантастика
5.00
рейтинг книги
Я все еще барон

Первый среди равных. Книга VII

Бор Жорж
7. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга VII

Бастард Бога (Дилогия)

Матвеев Владимир
Фантастика:
альтернативная история
5.11
рейтинг книги
Бастард Бога (Дилогия)

Кодекс Охотника. Книга XVI

Винокуров Юрий
16. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVI

Идеальный мир для Лекаря 12

Сапфир Олег
12. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 12

Сильнейший Столп Империи. Книга 1

Ермоленков Алексей
1. Сильнейший Столп Империи
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сильнейший Столп Империи. Книга 1

Вперед в прошлое 4

Ратманов Денис
4. Вперед в прошлое
Фантастика:
попаданцы
5.00
рейтинг книги
Вперед в прошлое 4

Кодекс Охотника. Книга XXIV

Винокуров Юрий
24. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXIV

Клан

Русич Антон
2. Долгий путь домой
Фантастика:
боевая фантастика
космическая фантастика
5.60
рейтинг книги
Клан

Гримуар темного лорда V

Грехов Тимофей
5. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Гримуар темного лорда V

Вперед в прошлое 11

Ратманов Денис
11. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 11

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Чехов

Гоблин (MeXXanik)
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
5.00
рейтинг книги
Чехов

Как я строил магическую империю 4

Зубов Константин
4. Как я строил магическую империю
Фантастика:
боевая фантастика
постапокалипсис
аниме
фантастика: прочее
фэнтези
5.00
рейтинг книги
Как я строил магическую империю 4