Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
Декабрь 08 2019 16:07:52   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
Учимся удалять!... 24765
4.12.1 Професси... 22507
Примеры, синони... 21399
FAST (методика ... 19453
Просмотр готовы... 19141
Декартовы коорд... 17643
Просмотр готовы... 15998
Работа с инстру... 12087
Что такое САПР 11489
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
10.3.3 Терминальный драйвер в режиме без обработки символов
Пользователи устанавливают параметры терминала, такие как символы стирания и удаления, и извлекают значения текущих установок с помощью системной функции ioctl. Сходным образом они устанавливают необходимость эхо-сопровождения ввода данных с терминала, задают скорость передачи информации в бодах, заполняют очереди символов ввода и вывода или вручную запускают и останавливают выводной поток символов. В информационной структуре терминального драйвера хранятся различные управляющие установки (см. [SVID 85], стр.281), и строковый интерфейс получает параметры функции ioctl и устанавливает или считывает значения соответствующих полей структуры данных. Когда процесс устанавливает значения параметров терминала, он делает это для всех процессов, использующих терминал. Установки терминала не сбрасываются автоматически при выходе из процесса, сделавшего изменения в установках.
Процессы могут также перевести терминал в режим без обработки символов, в котором строковый интерфейс передает символы в точном соответствии с тем, как пользователь ввел их: обработка вводного потока полностью отсутствует. Однако, ядро должно знать, когда выполнить вызванную пользователем системную функцию read, поскольку символ возврата каретки трактуется как обычный введенный символ. Оно выполняет функцию read после того, как с терминала будет введено минимальное число символов или по прохождении фиксированного промежутка времени от момента получения с терминала любого набора символов. В последнем случае ядро хронометрирует ввод символов с терминала, помещая записи в таблицу ответных сигналов (глава 8). Оба критерия (минимальное число символов и фиксированный промежуток времени) задаются в вызове функции ioctl. Когда соответствующие критерии удовлетворены, программа обработки прерываний строкового интерфейса возобновляет выполнение всех приостановленных процессов. Драйвер пересылает все символы из списка для хранения неструктурированных вводных данных в канонический список и выполняет запрос процесса на чтение, следуя тому же самому алгоритму, что и в случае работы в каноническом режиме. Режим без обработки символов особенно важен в экранно-ориентированных приложениях, таких как экранный редактор vi, многие из команд которого не заканчиваются символом возврата каретки. Например, команда dw удаляет слово в текущей позиции курсора.
На Рисунке 10.17 приведена программа, использующая функцию ioctl для сохранения текущих установок терминала для файла с дескриптором 0, что соответствует значению дескриптора файла стандартного ввода. Функция ioctl с командой TCGETA приказывает драйверу извлечь установки и сохранить их в структуре с именем savetty в адресном пространстве задачи. Эта команда часто используется для того, чтобы определить, является ли файл терминалом или нет, поскольку она ничего не изменяет в системе: если она завершается неудачно, процессы предполагают, что файл не является терминалом. Здесь же, процесс вторично вызывает функцию ioctl для того, чтобы перевести терминал в режим без обработки: он отключает эхо-сопровождение ввода символов и готовится к выполнению операций чтения с терминала по получении с терминала 5 символов, как минимум, или по прохождении 10 секунд с момента ввода первой порции символов. Когда процесс получает сигнал о прерывании, он сбрасывает первоначальные параметры терминала и завершается.
#include ‹signal.h›
#include ‹termio.h›
struct termio savetty;
main() {
extern sigcatch();
struct termio newtty;
int nrd;
char buf[32];
signal(SIGINT, sigcatch);
if (ioctl(0, TCGETA, &savetty) == -1) {
printf("ioctl завершилась неудачно: нет терминала\n");
exit();
}
newtty = savetty;
newtty.c_lflag &= ~ICANON; /* выход из канонического режима */
newtty.c_lflag &= ~ECHO; /* отключение эхо-сопровождения*/
newtty.c_cc[VMIN] = 5; /* минимум 5 символов */
newtty.c_cc[VTIME] = 100; /* интервал 10 секунд */
if (ioctl(0,TCSETAF, &newtty) == -1) {
printf("не могу перевести тер-л в режим без обработки\n");
exit();
}
for(;;) {
nrd = read(0, buf, sizeof(buf));
buf[nrd] = 0;
printf("чтение %d символов %s'\n", nrd, buf);
}
}
sigcatch() {
ioctl(0, TCSETAF, &savetty);
exit();
}
Рисунок 10.17. Режим без обработки — чтение 5-символьных блоков
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Изображение атрибута
8.3.5 Поддержание ...
Протоколы
2.4.2 Логическое к...
6.5.3 Присоединени...
12.4 СИСТЕМА TUNIS
Признак каскадного...
9.3. Программа обу...
8.1.6 Работа в реж...
1.1. Основные понятия
Вместо заключения
Определение атрибута
10.1.1 Конфигураци...
6.2.4 Пространство...
Технические подроб...
Навигация
Страница «Позицион...
Как происходит опр...
Код Хемминга
Индикатор точности
2.6.1 Аналоговые с...
Глава 14. INTERPHA...
Глава 19. GSM/GPS-...
5.9 СМЕНА ТЕКУЩЕГО...
Настройка (парамет...
Внешний вид
Протоколы канально...
1.5 Классификация...
Метод решетки
Идея пятая: Ионосф...
Глава 1. Выбираем ...
ГЛАВА 5. СИСТЕМНЫЕ...
Бумажные формы
4.4 Маршрутизация ...
Каскадное удаление
3. Обзор концепции...
Глобальная система...
Перепроектирование...
1. Назначение отве...
На кого рассчитана...
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009