Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
534 из 715
Однако, процесс может обнаружить, что данных, ради которых он возобновил свое выполнение, больше не существует: другие процессы считали данные с терминала и удалили их из списка для неструктурированных вводных данных до того, как первый процесс был запущен вновь. Такая ситуация похожа на ту, которая имеет место, когда из канала считывают данные несколько процессов.
алгоритм terminal_read
{
if (в каноническом символьном списке отсутствуют данные) {
do while (в списке для неструктурированных вводных данных отсутствует информация) {
if (терминал открыт с параметром "no delay" (без задержки)) return;
if (терминал в режиме без обработки с использованием таймера и таймер не активен)
предпринять действия к активизации таймера (таблица ответных сигналов);
sleep (до поступления данных с терминала);
}
/* в списке для неструктурированных вводных данных есть информация */
if (терминал в режиме без обработки)
скопировать все данные из списка для неструктурированных вводных данных в канонический список;
else { /* терминал в каноническом режиме */
do while (в списке для неструктурированных вводных данных есть символы) {
копировать по одному символу из списка для неструктурированных вводных данных в канонический список: выполнить обработку символов стирания и удаления;
if (символ — "возврат каретки" или "конец файла") break ; /* выход из цикла */
}
}
}
do while(в каноническом списке еще есть символы и не исчерпано количество символов, указанное в вызове функции read)
копировать символы из символьных
|< Пред. 532 533 534 535 536 След. >|