МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах
РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ" ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах Гендерна антидискримінаційна експертиза може зробити нас моральними рабами ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів Контакти
Тлумачний словник |
|
|||||||
Програмне керування терміналомНаперед визначені файлові дескриптори Керуючий термінал процесу Процес в 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. Читайте також:
|
||||||||
|