Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

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

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

Процес в 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 (сортування файла стандартного вводу, записування результату на стандартний вивід) і дгер (пошук заданого підрядка у стандартному вводі, за­писування рядків, де знайдено цей підрядок, на стандартний вивід).

 

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

 

int tcgetattr(int tfd, struct termios *modes);

int tcsetattr(int tfd, int actions, struct termios *modes):

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

 

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

 

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

#include <termios.h>

#include <sys/types.h>

struct termios new_mode, old_mode;

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

tcgetattr(STDIN_FILENO,&old_mode);

new_mode = old_mode;

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

new_mode.с_lflag &= (~ECHO);

tcsetattr (STDI N_FILENO, TCSANOW, &new_mode);

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

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

tcsetattr(STDIN_FIL ENO,TCSANOW,&old jnode);

3.

Основним для термінального введення-виведення у Win32 є поняття консолі . Воно відрізняється від визначеного раніше; фактично консоль - це наданий ОС спеціальний емулятор термінала.

Звичайно консоль пов'язують із конкретним процесом. Для процесів, які за­пускає ОС, консолі пов'язують із консольними процесами, точкою входу для яких є функція main( ).Під час виклику CreateProcess( )виділення окремої консолі для процесу задається вмиканням прапорця створення CREATE_NEW_CONSOLE.Крім того, кілька процесів можуть спільно використовувати одну й ту саму консоль (на­приклад, після виклику CreateProcess( )новий процес за замовчуванням успадко­вує консоль предка).

Логічна структура консолі аналогічна до наведеної на рис. 17.1, за винятком того, що з нею може бути пов'язано кілька буферів виводу. Можна виводити дані у різні буфери, а потім перемикатися між ними.

Для роботи із консоллю є два набори функцій. Функції високого рівня дають змогу працювати зі стандартними вводом та виводом і визначати деякі режими керування консоллю. Функції низького рівня дають можливість застосуванням отримувати повну інформацію про інтерактивну роботу користувача із клавіату­рою і мишею. У більшості випадків застосуванню достатньо функцій високого рівня; прикладом застосування, розробленого із використанням функцій низько­го рівня, є файловий менеджер far.


Читайте також:

  1. D-тригер з динамічним керуванням
  2. II.1 Програмне забезпечення
  3. Автократично-демократичний континуум стилів керування.
  4. Автоматизація водорозподілу на відкритих зрошувальних системах. Методи керування водорозподілом. Вимірювання рівня води. Вимірювання витрати.
  5. Автоматизація меліоративних помпових стацій. Автоматизація керування помповими агрегатами.
  6. Агресивне керування портфелем акцій
  7. Алгоритми керування ресурсами
  8. Аналіз конструкції рульового керування.
  9. Апарати керування пневматичними приводами.
  10. Багатокритеріальні завдання оптимального керування
  11. Блок формування імпульсів керування
  12. Будівлі органів керування, кредитування й громадських організацій




Переглядів: 498

<== попередня сторінка | наступна сторінка ==>
Псевдотермінали | Програмне керування консоллю

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.003 сек.