69764

Термінальне введення-виведення в UNIX та Linux

Лекция

Информатика, кибернетика и программирование

Консоль Linux емулює спеціальний вид термінала, який називають Linux. Він надає доволі широкі можливості щодо керування відображенням інформації (підтримку кольору, керуючих клавіш, перевизначення символьної таблиці «на ходу»).

Украинкский

2014-10-09

40.5 KB

3 чел.

Тема 12. Термінальне введення-виведення в UNIX та Linux

Тут розглянемо особливості реалізації та використання термінального введення-виведення в UNIX-системах на прикладі Linux.

Файли термінальних пристроїв і консоль

Кожному терміналу в Linux (як і в інших UNIX-системах) відповідає файл символьного пристрою. Наприклад, файли /dev/ttyw (п = 1, 2,..., 63) відповідають терміналам віртуальної консолі (доступний набір таких терміналів, що дає можливість відкривати кілька паралельних сесій користувача; для перемикання між віртуальними консолями використовують комбінації клавіш Ctrl+Fn), файли /dev/ttySn -терміналам, пов'язаним із з'єднаннями через послідовний порт. Відкривши такий файл, можна працювати із відповідним терміналом.

tty2 = open("/dev/tty2". 0_RDWR, 0644);

write(tty2, "Виведення на другу віртуальну консоль\п", ...);

Консоль Linux емулює спеціальний вид термінала, який називають Linux. Він надає доволі широкі можливості щодо керування відображенням інформації (підтримку кольору, керуючих клавіш, перевизначення символьної таблиці «на ходу»). Поточну консоль відображають файлом /dev/console.

Псевдотермінали

Раніше вже йшлося про принцип роботи протоколу telnet. Виникає запитання: яким чином telnet-сервер перехоплює дані, що їх застосування відсилають на термінал? Для відповіді потрібно ознайомитися із концепцією псевдотерміналів.

Псевдотерміналом (pty) називають спеціальний пристрій, який створює і контролює процес режиму користувача (ведучий процес, pty master). Для всіх інших процесів (ведених процесів, pty slaves) цей пристрій має вигляд реального термінала. У результаті всі дані, якими ведені процеси обмінюються із псевдотерміналом, опиняються під повним контролем ведучого процесу. Зокрема, ведучим процесом у разі tel net є telnet-сервер, веденим - процес, який запускають у telnet-сесії. У результаті сервер має змогу перехоплювати всі дані, які будуть згене-ровані під час сесії, та відсилати їх мережею.

Псевдотермінал відображають двома спеціальними файлами пристроїв: файлом ведучого (pty master file) і файлом веденого (pty slave file). Із файлом ведучого працює ведучий процес, усі інші процеси працюють із файлом веденого. Усі дані, записані у файл веденого, можуть бути зчитані із файла ведучого і навпаки. У Linux є різні домовленості на імена для цих файлів, наприклад, файли ведучого можуть бути згенеровані за запитом у каталозі /dev/pts.

Є кілька цікавих застосувань псевдотерміналів. Так, є утиліта screen, що перехоплює весь ввід-вивід інтерактивної програми або сесії користувача і зберігає його у файлі. Для цього screen створює псевдотермінал і змушує програму обмінюватися даними не із консоллю, а із цим терміналом.

Керуючий термінал процесу

Процес в UNIX-системі може мати керуючий термінал (controlling terminal), з якого отримуватиме сигнали від клавіатури (SIGINT у разі натискання користувачем Ctrl+C, SIGQUITCtrl-D). Звичайно це термінал, із якого ввійшов у систему користувач, що створив такий процес. Для процесу доступний файл /dev/tty, що відповідає цьому терміналу. Далі в розділі ознайомимося із деякими додатковими особливостями взаємодії між процесами і керуючими терміналами.

Наперед визначені файлові дескриптори

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

Під час створення нового процесу у його таблиці файлових дескрипторів fd заздалегідь створюють три елементи, котрі використовують як наперед визначені файлові дескриптори. Вони відповідають трьом заздалегідь відкритим файлам, доступним для кожного процесу і за замовчуванням пов'язаних із керуючим терміналом користувача, що створив цей процес:

stdin — файл стандартного вводу (йому відповідає дескриптор fd[0]);

stdout — файл стандартного виводу (йому відповідає fd[l]);

stderr — файл повідомлень про помилки (йому відповідає fd[2]).

Виклик write(1, ...) або write(2, ...) означає виведення на відповідний термінал, read(0, ...) — введення із клавіатури, пов'язаної із цим терміналом. Таку концепцію сьогодні використовують і в інших ОС, які підтримують термінальне введення-виведення. Для можливості перенесення, замість чисел 0, 1 і 2, рекомендують вживати константи STDIN_FILENO, STD0UT_FILEN0 і STDERR_FILEN0:

int bytes_read: char buf[1024]:

// зчитати дані з файла стандартного вводу

bytes_read = read(STDIN_FILENO, buf, sizeof(buf));

// вивести їх же у файл стандартного виводу

write(STD0UT_FILENO, buf, bytes_read);

Є багато прикладних і системних програм, які розраховані на отримання даних з файла стандартного вводу і відображення результатів у файл стандартного виводу. Такі програми називають фільтрами. Серед найвідоміших фільтрів можна виділити sort (сортування файла стандартного вводу, записування результату на стандартний вивід) і grep (пошук заданого підрядка у стандартному вводі, записування рядків, де знайдено цей підрядок, на стандартний вивід).

Програмне керування терміналом

Стандарт POSIX визначає набір системних викликів для керування режимами роботи із терміналом. Для задання атрибутів режиму термінального введення-ви-ведення використовують системний виклик tcsetattr(), а для отримання поточних атрибутів режиму – tcgetattr(). Обидва ці виклики приймають параметром покажчик на структуру termios, яка містить зокрема поле сі flag — маску прапорців режимів, що керують поведінкою термінала (прапорець ECHO означає роботу в режимі луни):

int tcgetattrdnt tfd, struct termios *modes);

int tcsetattrdnt tfd. int actions, struct termios *modes);

де: tfd — дескриптор файла, що відповідає терміналу;

actions — час встановлення режиму (TCSAN0W — негайно).

Наведемо приклади використання цих викликів для відключення режиму луни і відновлення попереднього режиму.

#linclude <termios.h>

#include <sys/types.h>

struct termios newjnode. old_mode:

// одержання поточного режиму

tcgetattr(STDIN_FILENO.&old_mode);

newjrode = oldjrode;

// відключення режиму луни

newjnode.cjf 1 ag &= (-ECHO).;

tcsetattr(STDIN_FILENO.TCSANOW.&new_mode);

// ... введення-виведення з використанням STDIN_FILENO без луни

// відновлення попереднього режиму

tcsetattr(STDIN_FILENO,TCSANOW.&oldjnode);

Контрольні питання:

1. Файли термінальних пристроїв і консоль

2. Псевдотермінали.

3. Керуючий термінал процесу.

4. Наперед визначені файлові дескриптори.

5. Програмне керування терміналом.


 

А также другие работы, которые могут Вас заинтересовать

45525. Операторы описания данных в SQL 42 KB
  Check Условие это значение должно быть истинным чтобы компьютер признал все изменения правильными; Unique список полей все значения в комбинации полей должны быть уникальными; Primry key список полей указывается на уровне таблицы если первичный ключ состоит из нескольких полей; References имя_поля1 from имя_таблицы1 поле1 в нашей таблице имя_поля1 берется из таблицы1 поля1. Restrict указывает каким образом поддерживается On delete cscde...
45526. Технологии «клиент-сервер» 45.5 KB
  Имеют место следующие операторы: Prepre имя_оператора from строка Select Insert Delete Updte Execute имя_оператора позволяет выполнить запомненный на сервере оператор; Drop имя_оператора позволяет удалит оператор; Эти операторы передаются в интерактивном режиме а если хотим записать в рамках какойто программы то например на Паскале это будет выглядеть так: Exec sql âsql операторâ. Описание курсора на SQL: Declre имя_курсора [scroll] cursor for подзапрос [for updte]. Операции с курсором: Open имя_курсора позволяет...
45527. В-дерево. Добавление и удаление элементо 27.5 KB
  Вдерево это сбалансированное дерево. Основной недостаток индексов в том что трудно вносить изменения а дерево упрощает внесение изменений а сбалансированность позволяет ускорить поиск. В основе Вдерева лежат следующие аксиомы: Вдерево порядка n содержит 2n ключей 2n1 ссылку; В дерево растет от листьев к корню; Путь от корня к листу содержит одно и тоже количество шагов; Каждый узел заполняется не менее чем на половину кроме корня.
45528. Специфика деятельности ПР-службы в государственном секторе: структура, функции, содержание деятельности 32.5 KB
  Важнейшее звено политического ПР. Политический ПР связан с реализацией общих и процессуальных функций политики встроен в осуществление политического руководства. В современном обществе система политического ПР диверсифицируется еще дальше можно фиксировать возникновение отдельных структур и технологий направленный например на поддержание и реализацию гос.проектов системы лоббирования формирования персонального политического ПР и т.
45529. Функции службы по связям с общественностью в политическом секторе 42.5 KB
  Вторжение государственного сектора в традиционные сферы политического ПР. Конкретные направления деятельности служб по связям с общественностью в органах государственного и муниципального управления: Установление поддержание расширение контактов с гражданами и организациями; Информирование общественности о существе принимаемых решений; Анализ общественной реакции на действия должностных лиц и органов власти; Прогнозирование социальнополитического процесса обеспечение органов власти прогнозами аналитическими...
45530. Специфика ПР-службы в некоммерческом секторе: структура, функции, содержаниедеятельности 42 KB
  Паблик рилейшнз в социальной некоммерческой сфере решает задачи продвижения не коммерческих проектов идей организаций отдельных персон чья деятельность направлена на реализацию этих проектов. Патронаж таких проектов может осуществляться государством или государствами влиятельными общественными деятелями или их союзами. К задачам некоммерческого PR относятся следующие: формирование имиджей некоммерческих структур популяризация и продвижение их деятельности как социально значимой и общественно необходимой; преодоление...
45531. Специфика деятельности ПР-службы в коммерческом секторе: структура, функции, содержание деятельности 38.5 KB
  БизнесПР наиболее динамичный и перспективный отраслевой сегмент СО. В России тенденции развития бизнесПР сейчас определяют общие тенденции ПР. Следовательно характерные черты бизнес ПР: Динамизм в развитии. Стабильное увеличение финансовой емкости рынка бизнесПР.
45532. Структура и направления деятельности PR-отдела 55 KB
  Структура отдела и функции персонала Структура отдела определяется взглядом вверх и вниз по иерархической лестнице. Мы понимаем что наилучшим вариантом для руководителя ПРотдела является его включенность в команду высших управленцев. Питер Грин формулирует это следующим образом: Независимо то размера организации или размера создаваемого ПРотдела необходимо иметь прямую связь от ПР к руководству для эффективности необходимо иметь руководителя ПР в числе самого высшего руководства даже если ПР будет только частью его ее обязанностей .
45533. Сущностные характеристики PR-деятельности и профессиограмма специалиста по PR 31 KB
  Специфика РRдеятельности выражается в следующем: пиармены подчинены целям и задачам своего субъекта и символизируют собой его идеологию; профессиональная ориентация пиарменов выражена преимущественно в обслуживании субъекта они становятся выразителями интересов ограниченной конкретной социальной группы; профессионализм пиармена определяется также и с внешним согласием с общественной политикой своего субъекта лояльностью к нему умением идентифицировать себя с ней. Содержание и структура ПРдеятельности: Творческая поиск...