Архитектура операционной системы UNIX   ::   Бах Морис Дж.

Страница: 555 из 715



/* предположим, что дескрипторы файлов 0 и 1 уже относятся к физическому терминалу */

for (;;) { /* цикл */

 выбрать(ввод);

 /* ждать ввода из какой-либо линии */

 прочитать данные, введенные из линии;

 переключить(линию с вводимыми данными)  {

если выбран физический терминал: /* данные вводятся по линии физического терминала */

  if (считана управляющая команда) { /* например, создание нового окна */

   открыть свободный псевдотерминал;

   пойти по ветви нового процесса:

   if (процесс родительский)  {

    выдвинуть интерфейс сообщений в сторону mpx;

    continue; /* возврат в цикл "для" */

   }

   /* процесс-потомок */

   закрыть ненужные дескрипторы файлов;

   открыть другой псевдотерминал из пары, выбрать stdin, stdout, stderr;

   выдвинуть строковый интерфейс терминала;

   запустить shell; /* подобно виртуальному терминалу */

  }

  /* "обычные" данные, появившиеся через виртуальный терминал */

  демультиплексировать считывание данных с физического терминала, снять заголовки и вести запись на соответствующий псевдотерминал;

  continue; /* возврат в цикл "для" */

если выбран логический терминал: /* виртуальный терминал связан с окном */

  закодировать заголовок, указывающий назначение информации окна;

  переписать заголовок и информацию на физический терминал;

  continue; /* возврат в цикл "для" */

 }

}

Рисунок 10.24. Псевдопрограмма мультиплексирования окон

Процесс mpx является мультиплексором, направляющим вывод данных с виртуальных терминалов на физический терминал и демультиплексирующим ввод данных с физического терминала на подходящий виртуальный. Mpx ждет поступления данных по любой из линий, используя системную функцию select.

|< Пред. 553 554 555 556 557 След. >|

Java книги

Контакты: [email protected]