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

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

Жанры

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

Рис. 5.1 

В терминологии UNIX управляющий интерфейс устанавливает "порядок обслуживания линий", обеспечивающий программе ощутимую гибкость в задании поведения драйвера терминала.

К основным функциям, которыми вы можете управлять, относятся следующие:

редактирование строки — применение для редактирования клавиши <Backspace>;

буферизация — считывание символов сразу или

после настраиваемой задержки;

отображение — управление отображением так же, как при считывании паролей;

CR/LF — отображение для ввода и вывода: что происходит при выводе символа перевода строки (\n);

скорости передачи данных по линии — редко применяется для консоли ПК, эти скорости очень важны для модемов и терминалов на линиях последовательной передачи.

Аппаратная модель

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

Концептуальная схема (физическая модель на некоторых старых узлах UNIX подобна данной) включает машину с ОС UNIX, подключенную через последовательный порт с модемом и далее по телефонной линии с другим модемом к удаленному терминалу (рис. 5.2). На деле это просто вариант установки, применявшийся некоторыми малыми провайдерами интернет-услуг "на заре туманной юности" Интернета. Эта модель отдаленно напоминает организацию "клиент — сервер", при использовании которой программа выполняется на большом компьютере, а пользователи работают на терминалах ввода/вывода.

Рис. 5.2

Если вы работаете на ПК под управлением ОС Linux, эта модель может показаться чересчур сложной. Однако, поскольку у обоих авторов есть модемы, мы можем при желании использовать программу эмуляции терминала, например, minicom для запуска удаленного сеанса работы в системе на любой другой машине, подобной этой, с помощью пары модемов и телефонной линии связи. Конечно, сегодня быстрый широкополосный доступ вытеснил из потребления эту рабочую модель, но она до сих пор не лишена некоторых достоинств.

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

Структура типа termios

Тип

termios
— стандартный интерфейс, заданный стандартом POSIX и похожий на интерфейс
termio
системы System V. Интерфейс терминала управляется значениями в структуре типа
termios
и использует небольшой набор вызовов функций. И то и другое определено в заголовочном файле termios.h.

Примечание

Программы, применяющие вызовы функций,

определенных в файле termios.h, нуждаются в компоновке с соответствующей библиотекой функций. Ею может быть в зависимости от установленной у вас системы просто стандартная библиотека С или библиотека curses. При необходимости во время компиляции примеров этой главы добавьте аргумент
– lcurses
в конец строки команды компиляции. В некоторых более старых системах Linux библиотека curses представлена в версии, известной под названием "new curses". В этих случаях имя библиотеки и аргумент компоновки становятся
ncurses
и
– lncurses
соответственно.

Значения, которые можно изменять для управления терминалом, разделены на группы, относящиеся к следующим режимам:

ввод;

вывод;

управление;

локальный;

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

Минимальная структура типа

termios
обычно объявляется следующим образом (хотя в стандарте X/Open разрешено включение дополнительных полей):

#include <termios.h>

struct termios {

 tcflag_t c_iflag;

 tcflag_t c_oflag;

 tcflag_t c_cflag;

 tcflag_t c_lflag;

 cc_t c_cc[NCCS];

};

Имена элементов структуры соответствуют пяти типам параметров из предыдущего перечня.

Инициализировать структуру типа

termios
для терминала можно, вызвав функцию
tcgetattr
со следующим прототипом или описанием:

#include <termios.h>

int tcgetattr(int fd, struct termios *termios_p);

Этот вызов записывает текущие значения переменных интерфейса терминала в структуру, на которую указывает параметр

termios_p
. Если впоследствии эти значения будут изменены, вы сможете перенастроить интерфейс терминала с помощью функции
tcsetattr
следующим образом:

#include <termios.h>

int tcsetattr(int fd, int actions, const struct termios *termios_p);

Поле

actions
функции
tcsetattr
управляет способом внесения изменений. Есть три варианта:

TCSANOW
— изменяет значения сразу;

TSCADRAIN
— изменяет значения, когда текущий вывод завершен;

TCSAFLUSH
— изменяет значения, когда текущий вывод завершен, но отбрасывает любой ввод, доступный в текущий момент и все еще не возвращенный вызовом
read
.

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

Последний Герой. Том 3

Дамиров Рафаэль
3. Последний герой
Фантастика:
попаданцы
альтернативная история
фантастика: прочее
5.00
рейтинг книги
Последний Герой. Том 3

Белые погоны

Лисина Александра
3. Гибрид
Фантастика:
фэнтези
попаданцы
технофэнтези
аниме
5.00
рейтинг книги
Белые погоны

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

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

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

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Печать пожирателя 2

Соломенный Илья
2. Пожиратель
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
5.00
рейтинг книги
Печать пожирателя 2

Московское золото или нежная попа комсомолки. Часть Вторая

Хренов Алексей
2. Летчик Леха
Фантастика:
попаданцы
5.00
рейтинг книги
Московское золото или нежная попа комсомолки. Часть Вторая

Попаданка. Финал

Ахминеева Нина
4. Двойная звезда
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Попаданка. Финал

Древесный маг Орловского княжества 5

Павлов Игорь Васильевич
5. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 5

Сын Петра. Том 1. Бесенок

Ланцов Михаил Алексеевич
1. Сын Петра
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Сын Петра. Том 1. Бесенок

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

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

Дважды одаренный

Тарс Элиан
1. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Дважды одаренный

Шайтан Иван 4

Тен Эдуард
4. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
8.00
рейтинг книги
Шайтан Иван 4

Одинаковые. Том 3. Индокитай

Алмазный Петр
3. Братья Горские
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Одинаковые. Том 3. Индокитай