Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб_РС4.doc
Скачиваний:
2
Добавлен:
12.07.2019
Размер:
256.51 Кб
Скачать

Лабораторная работа N 4.

Устройства ввода и вывода информации.

Терминальный вывод.

27 Августа 2007 г.

Кафедра ТС и ВС

Содержание

  1. Цель работы 3

  2. Теоретическое введение 3

2.1 Терминалы 15

2.1.1 Команды терминала 16

2.1.2 Функции управления терминалом 18

2.2 Доступы к терминалам в Linux 18

2.2.1 Режимы работы терминала 19

2.2.2 Управление терминалом. Структура termios 20

  1. Требование к отчету о лабораторной работе 25

  2. Задание на лабораторную работу 25

  3. Контрольные вопросы

1 Цель работы

. Понять, как работает терминал и что такое эмуляция терминала. Рассмотреть принцип программного взаимодействия с клавиатурой и экраном (терминалом) в Linux.

2 Теоретическое введение

2.1 Терминалы

В дни универсальных ЭВМ с середины 1970-х до середины 1980-х терминал соединялся с компьютером кабелем (часто не напрямую). Он стал называться терминалом, так как был размещен на терминальном конце этого кабеля (оконечное оборудование).

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

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

Для текстового терминала идет двунаправленный поток информации (от терминала передается то, что вводится пользователем, к терминалу передается то, что надо вывести на экран). Этот поток является байтами ASCII (American Standart Code for Information Interchange), где каждый байт обычно соответствует символу. Байты, печатаемые на клавиатуре идут на компьютер, а большинство байтов от компьютера отображается на экране терминала. Специальные байты (или последовательности байтов) управляют тер­миналом, т.е. перемещаю курсор, двигают текст на экране, стирают текст и т.п.

Для передачи используется символы, закодированные с использованием кодовой та­блицы для используемого символьного набора. Кодовых таблиц на сегодняшней сущесву-ет много, например ASCII, KOI8, WINDOWS-1251 и т.п.

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

Операционная система Linux использует эмуляцию терминала для ввода и вывода информации. Совокупность монитора и клавиатуры называется консолью, а все взаи-модействие как бы эмулирует работу с физическим терминалом. Примером терминала может служить текстовый терминал Linux или графический терминал xterm. Такой под­ход позволил легко организовать сетевые взаимодействия между компьютерами.

В дальнейшем будет рассмотрена только эмуляция терминального доступа в опера­ционной системе Linux.

1.1.1 Команды терминала

Терминал управляется компьютером, который посылает терминалу текст не только для отображения на экране, но также и посылает команды, которые должны выполняться. Они называются управляющими кодами (байтами) и escape-последовательностями.

Например, управляющий код CR (возврат каретки) перемещает курсор на левый край экрана. Некоторая escape-последовательность (несколько байтов, где первый байт -управляющий код (символ) "Escape") может перемещать курсор в место на экране, опре­деленное параметрами, помещенными внутри escape-последовательности. Первые терми­налы имели только несколько таких команд, но современные терминалы, имеют их сотни.

Для описания всех возможных команд терминала и его возможностей была принята база данных, называемая "termcap" (теперь "terminfo"). Эта база данных находится в системе и содержит разделы (иногда отдельные файлы) для каждой модели терминала.

Прикладные программы могут использовать эту базу данных, вызывая некоторые функции С-библиотеки. Один большой набор таких программ (более чем 200) называется "ncurses" и перечислен на man-странице для ncurses.

Чтобы получить список доступных команд для текущего терминала можно использо­вать команду infocmp из библиотеки ncerses.

Например, если находясь в графическом терминале xterm, набрать команду infocmp, то получится следующий результат:

[vml5s22@rwpl vm!5s22]$ infocmp

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm

xtermIXI1 terminal emulator,

am, bee, km, mc5i, mir, msgr, xenl,

colors#8, cols#80, it#8, lines#24, pairs#64,

acsc=t taaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}} ,

bel=~G, blink=\E[5m, bold=\E[lm, civis=\E[?251,

clear=\E[H\E[2J, cnorm=\E[?25h, cr=~M,

csr=\E[%i%pl%d;°/,p2%dr, cub=\E [%pl°/,dD, cubl=~H,

cud=\E[°/,pl%dB, cudl=~J, cuf=\E[°/,pl%dC, cufl=\E[C,

cup=\E[%i%pl%d;°/,p2%dH, cuu=\E [%рША, cuul=\E[A,

cvvis=\E[?25h, dch=\E [%pl°/,dP, dchl=\E[P, dl=\E[°/,pl%dM,

dll=\E[M, ech=\E[%pl%dX, ed=\E[J, el=\E[K, ell=\E[lK,

enacs=\E(B\E)0, flash=\E[?5h\E[?51, home=\E[H,

hpa=\E[%i°/,pl%dG, ht=~I, hts=\EH, ich=\E[°/,pl%d@,

il=\E[%pl%dL, ill=\E[L, ind=~J, invis=\E[8m,

is2=\E[!p\E[?3;41\E[41\E>, kal=\EOw, ka3=\EOu, kb2=\EOy,

kbeg=\EOE, kbs=\177, kcl=\EOq, kc3=\EOs, kcubl=\EOD,

kcudl=\EOB, kcufl=\EOC, kcuul=\EOA, kdchl=\E[3~,

kend=\E[4~, kent=\EOM, kfl=\EOP, kf10=\E[21~, kfll=\E[23~,

kf!2=\E[24~, kf!3=\E[25~, kf!4=\E[26~, kf15=\E[28~,

kf!6=\E[29~, kf!7=\E[31~, kf!8=\E[32~, kf!9=\E[33~,

kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf5=\E[15~,

kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,

khome=\E[l~, kichl=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,

mcO=\E[i, mc4=\E[4i, mc5=\E[5i, op=\E[39;49m, rc=\E8,

rev=\E[7m, ri=\EM, rmacs=~0, rmam=\E[?71,

rmcup=\E[?10471\E [710481, rmir=\E [41 , rmkx=\E[?ll\E>,

rmso=\E[27m, rmul=\E [24m , rsl=\Ec,

rs2=\E[!p\E[?3;41\E[41\E>, sc=\E7, setab=\E[4%pl%dm,

; m , ; m ,

setaf=\E[3%pl°/,dm,

setb=\E [4%?%pl%{l}%=%t4%e%pl%{3}%=%t6%e%pl%{4}%=%

setf =\E [3%?%pl%{l}%=%t4%e%pl%{3}%=%t6%e%pl%{4}%=

sgr=\E [0%?%pl%p6% I %t ; 1% ; %?%p2'/,t ; 4% ; %?%pl%p3% I %t ; 7% ; %?%p4'/,t ; 5% ;

%?%p7%t ; 8% ;m%?%p9%t\016%e\017% ; , sgrO=\E[m\017, smacs=~N, smam=\E[?7h, smcup=\E[?1048h\E[?1047h, smir=\E[4h, smkx=\E[?lh\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?l;2c, u9=\E[c, vpa=\E[%i°/,pl%dd, [vm!5s22@rwpl vm!5s22]$

здесь описаны все возможные команды, которые может выполнить терминал. Напри­мер, для очистки экрана (поле clear) необходимо терминалу послать последовательность из 7 символов (\Е (символ с кодом ASCII 27), [, Н, \Е, [, 2, J).

printf ("\033[H\033[2J");

Для детального описания синтаксиса базы termcap (или terminfo) обращайтесь к элек­тронному справочнику man.

Таблица 2: Список некоторых команд терминала xterm

Команда

Назначение

\E[H\E[2J

Очистка экрана

\Е[х;уН

Перемещение курсора в позицию х,у (целые положительные числа)

\хОЕ

Переключение терминала в режим вывода дополнительных символов (например псевдографики). В данном режиме сим­волы псевдографики располагаются на месте латинских букв. Соответствие знаков псевдографики и символам определяется из поля acsc. Например, для вывода символа "верхний левый угол "надо вывести символ "1".

\E[fg;bgm

Установка цвета фона и цвета символа. Цвет задается числом в диапазоне от 0 до 7. Для задания фона к цвету прибавляется число 40, для задания цвета текста прибавляется 30.

\E[7m

Установка инверсного режима.

\E[Om

Установка нормального режима.

\E[0;lm

Установка режима выделения жирным текстом.

\E[m\017

Снятие режима выделения жирным текстом.

\E[?251

Сделать курсор невидимым.

\E[?25h

Сделать курсор видимым.