Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

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

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

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

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

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

 

Процес в UNIX-системі може мати керуючий термінал (controlling terminal), з яко­го отримуватиме сигнали від клавіатури (SIGINT у разі натискання користувачем Ctrl+C, SIGQUIT - Ctri-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_FILENO:

 

int bytes_read; char buf[1024];

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

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

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

wrіte(STDOUT_FILENO, buf, Bytes_read):

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

 




Поделиться с друзьями:


Дата добавления: 2014-10-23; Просмотров: 330; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.