Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
Июнь 16 2019 05:53:11   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
Учимся удалять!... 23181
4.12.1 Професси... 22261
Примеры, синони... 21198
FAST (методика ... 19114
Просмотр готовы... 18856
Декартовы коорд... 17201
Просмотр готовы... 15649
Работа с инстру... 11813
Что такое САПР 11217
Сейчас на сайте
Гостей: 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-символьных блоков
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

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

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

Пароль



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

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Глава 2. Cистема п...
3. Матричная струк...
7.3.5. Жизненные ц...
Идея первая: Место...
10.3.6 Драйвер кос...
Рабочая частота эх...
ВТОРОЙ ПРИМЕР
11.2 ВЗАИМОДЕЙСТВИ...
Глава 1. Ноутбук ...
Качество приема
7.4.1. Организаци...
Wi-Fi vs. GPS
5.6 CLOSЕ
Вместо введения
Метод доступа в се...
продолжение...
Изображение связи
7.3. Интерпретация...
ГЛАВА 13. РАСПРЕД...
Модемы
Компьютерные файлы 2
4. Разработка инфо...
Встроенная база да...
Контактная информация
Данные, как главны...
4.1.3 Освобождение...
Комплект Pocket Na...
До 300 долларов
Глава 4. Краткий ...
8.1.2 Параметры ди...
11.2.3 Семафоры
Глава 8. Acer n35
2. Пересечения про...
6.5.7 Отсоединение...
7.2.3. Выполняемые...
Уникальный идентиф...
Определение атрибута
2.6.2.3 Формирован...
Выводы
2.2 ВВЕДЕНИЕ В ОСН...
Мини-чат
Вам необходимо залогиниться.

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