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. Програмне керування терміналом.


 

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

29014. Глубинное уплотнение грунтов с помощью песчаных и грунтовых свай. Область применения указанных методов 51.5 KB
  Песчаные сваи применяют для уплотнения сильно сжимаемых пылеватоглинистых грунтов рыхлых песков и заторфованных грунтов на глубину до 18. Песчаные сваи изготовляют следующим образом. Вокруг песчаной сваи грунт также находится в уплотнённом состоянии рис. Уплотнение грунта песчаными сваями обычно производится под всем сооружением Сваи располагаются в шахматном порядке как это показано на рис.
29015. Уплотнение грунтов основания водопонижением. Ускорение процесса уплотнения с помощью электроосмоса 33.5 KB
  Площадь основания где намечено уплотнение грунтов окружается иглофильтрами или колодцами из которых производится откачка воды водопонизительными установками рис. Понижение уровня подземных вод приводит к тому что в пределах зоны водопонижения снимается взвешивающее действие воды на скелет грунта. При пропускании через грунт постоянного электрического тока происходит передвижение воды к иглофильтрукатоду и эффективный коэффициент фильтрации увеличивается в 10.
29016. Закрепление грунтов инъекциями цементных или силикатных растворов, битума, синтетических смол. Область применения указанных методов 34 KB
  Закрепление грунтов инъекциями цементных или силикатных растворов битума синтетических смол. Закрепление грунтов заключается в искусственном преобразовании строительных свойств грунтов в условиях их естественного залегания разнообразными физикохимическими методами. Это обеспечивает увеличение прочности грунтов снижение их сжимаемости уменьшение водопроницаемости и чувствительности к изменению внешней среды особенно влажности. Цементация грунтов.
29017. Термическое закрепление грунтов. Область применения и методы контроля качества работ 33.5 KB
  В результате этого образуются прочные водостойкие структурные связи между частицами и агрегатами грунта. Отметим что температура газов которыми производится обработка грунта не должна превышать 750.12 суток в результате чего получается упрочнённый конусообразный массив грунта диаметром поверху 15. Образуется как бы коническая свая из обожжённого непросадочного грунта с прочностью до 10 МПа.
29018. Что называется грунтом, его составные элементы 25 KB
  Структурные связи между частицами грунта. Грунтами называют любые горные породы коры выветривания земли сыпучие или связные прочность связей у которых между частицами во много раз меньше чем прочность самих минеральных частиц или эти связи между частицами отсутствуют вовсе. Вода и газы находятся в порах между твердыми частицами минеральными и органическими. Газообразные включения пары газы всегда в том или ином количестве содержатся в грунтах и могут находиться в следующих состояниях: замкнутом или защемленном располагаясь в...
29019. Назовите виды давления грунта на подпорную стенку в зависимости от ее поступательного движения. Какой вид имеет диаграмма давления грунта на стенку в зависимости от ее перемещения 31.5 KB
  Какой вид имеет диаграмма давления грунта на стенку в зависимости от ее перемещения В зависимости от поступательного движения подпорной стенки на нее могут действовать следующие виды давления грунта: активное давление; пассивное давление; давление покоя. Активным называется минимальное из всех возможных для данной стенки давление на нее грунта проявляющееся в том случае если стенка имеет возможность переместиться в сторону от засыпки рис. Активное давление иногда называют распором. Пассивным называется максимальное из всех возможных...
29020. Напряжения, возникающие в массиве грунта от действия сооружения, накладываются на поле начальных напряжений, к которым относятся напряжения от собственного веса грунта 28 KB
  Напряжения возникающие в массиве грунта от действия сооружения накладываются на поле начальных напряжений к которым относятся напряжения от собственного веса грунта. Как вычислить вертикальные напряжения в массиве грунта от его собственного веса в следующих случаях: однородное основание; многослойное основание; при наличии в толще грунта уровня подземных вод; при наличии ниже уровня подземных вод водоупорного слоя. Вертикальное напряжение от собственного веса грунта σz представляют собой вес столба грунта над рассматриваемой точкой...
29021. От чего зависит глубина заложения фундамента 31.5 KB
  Глубина заложения фундаментов является одним из основных факторов обеспечивающих необходимую несущую способность и деформации основания не превышающие предельных по условиям нормальной эксплуатации здания или сооружения. От чего зависит глубина заложения фундамента Допускается ли закладывать подошвы соседних фундаментов на разных отметках Глубина заложения фундамента определяется: инженерногеологическими условиями площадки строительства физикомеханические свойства грунтов характер напластования и пр.; гидрогеологическими условиями...
29022. В чем заключается метод вытрамбовывания котлованов 32.5 KB
  В чем заключается метод вытрамбовывания котлованов Приведите несколько наиболее распространенных конструкций и способов устройства фундаментов в вытрамбованных котлованах. Рекомендуемая область применения способов устройства фундаментов в вытрамбованных котлованах. Применяется несколько конструкций и способов устройства фундаментов в вытрамбованных котлованах. Фундаменты в вытрамбованных котлованах используются при строительстве каркасных и бескаркасных зданий в первом случае обычно располагают один фундамент под каждой колонной.