19 echo " -l log the output" >&2
20 echo " -t use another tty" >&2
21 echo " -u 9600 baud to UNIX" >&2
22 exit 1;;
23 esac
24 done
26 eval cu -s$BAUD -l$TTY dir $PIPE
ПЕРЕМЕННЫЕ СРЕДЫ ВЫПОЛНЕНИЯ
ARG Аргумент из командной строки
BAUD Скорость обмена, которую нужно указать программе cu
PIPE Содержит строку, создающую конвейер для захвата данных
TTY Номер используемого порта tty
ОПИСАНИЕ
ЗАЧЕМ НАМ НУЖЕН КОМАНДНЫЙ ФАЙЛ talk?
Регистрация в удаленной системе расширяет горизонты ваших
вычислительных возможностей. Учитывая, что UNIX становится все более
распространенной системой среди микро-ЭВМ, системы UNIX, пригодные
для связи, скоро будут везде. Кроме того, вы можете вызвать из вашей
системы UNIX много систем типа досок объявлений, функционирующих на
микро-ЭВМ.
Нам нужен хороший интерфейс для управления модемной линией и
облегчения ее использования. Нам необходимо захватывать данные, если
это возможно, изменять скорость обмена и менять терминальный порт,
если в этом есть потребность. Все это делает командный файл talk.
ЧТО ДЕЛАЕТ talk?
Программа talk генерирует командную строку, основанную на
подразумеваемой конфигурации. Эта конфигурация такова: 1200 бод,
подключение к терминальной линии /dev/tty11 (последовательный порт 1
в системе SCO XENIX), захват данных не производить. Все
подразумеваемые параметры можно изменить в тексте исходного файла, а
терминальная линия должна быть установлена с учетом специфики вашей
системы.
Если вы хотите изменить скорость обмена, укажите с помощью опции
-b нужную вам скорость (подразумевается, что это одна из стандартных
скоростей, поддерживаемых программой cu). Например,"talk -b2400"
устанавливает скорость 2400 бод. Указанная скорость передается
команде cu, которая непосредственно изменяет характеристики вашего
подключения.
Важно иметь в виду, что эта скорость должна быть определена в
файле L-devices.
Если вы хотите захватить все данные, выводимые на ваш экран,
включите опцию протоколирования, указав -l. Файл с захваченными
данными будет называться /tmp/talk.$$, где $$ - уникальный
идентификатора процесса вашего текущего интерпретатора shell. Это имя
выдается на экран при вызове данной опции, так что вы увидите его на
вашем экране. Уникальность имен файлов обеспечивается для того, чтобы
вы не потеряли по недосмотру регистрационные файлы от предыдущих
сеансов работы (или чтобы, по крайней мере, было очень мало шансов,
что это произойдет).
Если у вас факультативный последовательный порт с модемом или
если вы хотите подключаться к любой из возможных линий, примените
опцию -t. Вместе с этой опцией укажите номер tty, который будет затем
передан в команду cu. Это очень полезная опция, если у вас много
различных линий для использования cu.
Если вы не используете ваш последовательный порт для подключения
модема, а имеете прямое подсоединение к другой системе UNIX, опция -u
тотчас же установит скорость обмена 9600 бод. Заметим, что того же
эффекта можно было бы достичь, указав -b9600, но опцию -u проще
вводить и запоминать.
ПРИМЕРЫ
1. $ talk -l -t12
Подключиться к дополнительному последовательному порту и
захватывать данные, которые проходят на экране.
2. $ talk -u
Подключиться к основному последовательному порту с
использованием скорости 9600 бод. Не включать захват данных.
3. $ talk -b2400 -t04 -u
Внимание! Сначала опция -b устанавливает скорость 2400, но далее
следует опция -u, которая переустанавливает значение скорости на
9600.
4. $ talk -u -l -b4800
Снова будьте внимательны! Сначала линия подключается напрямую со
скоростью 9600 бод. Затем включается протоколирование. Наконец,
значение скорости меняется с 9600 на 4800. Если на самом деле линия,
к которой вы обращаетесь, работает на скорости 9600 бод, вы должны,
если это возможно, понизить скорость, нажимая ~%b для генерации
сигнала break.
ПОЯСНЕНИЯ
В строках 4-6 устанавливаются действия, выполняемые программой
talk по умолчанию. Эти действия можно полностью изменить путем
редактирования исходного файла. Главное достоинство этих умолчаний в
том, что если такую конфигурацию вы используете чаще всего, то вам
достаточно просто ввести "talk", без всяких опций.
Строка 4 инициализирует переменную BAUD значением 1200, это
значение по умолчание для скорости модема. Строка 5 присваивает
переменной TTY значение tty11, что соответствует первому
последовательному порту аппаратуры. Обычно нужно tty00, но SCO XENIX
имеет виртуальную консоль, причем tty02-tty10 являются отдельными
экранами, доступ к которым осуществляется с одного консольного
устройства. Если это не так в вашей системе, укажите здесь правильное
значение TTY. В строке 6 переменная PIPE инициализируется пустой
строкой, так как конвейер применяется для протоколирования данных, а
по умолчанию захват данных не выполняется.
Строки 8-24 представляют собой цикл, который перебирает все
аргументы командной строки. В строках 10-23 используется оператор
выбора среди опций для выполнения требуемых функций.
Строка 11 проверяет, начинается ли данная опция с символов -b,
после которых следует что-то еще. Если да, то символы, следующие
после -b, вырезаются и заносятся в переменную BAUD. Обратите
внимание, что именно поэтому вы должны набирать "-b2400", а не "-b
2400".
В строке 12 проверяется, хотите ли вы включить протоколирование.
Если да, то на экран выводится имя протокольного файла, а переменная
PIPE устанавливается так, чтобы направить стандартный вывод по
конвейеру программе tee системы UNIX. Программа tee - это
универсальная конвейерная программа расщепления, которую можно
использовать для посылки копии потока данных в определенный пункт
назначения, не воздействуя на основной конвейер. В данном случае мы
применяем программу tee для посылки данных, проходящих через
последовательный порт, на экран и в наш регистрационный файл
/tmp/talk/.$$. (Если вы представите себе водяную трубу с T-образным
стыком, то поймете, что происходит.)
Строка 14 проверяет, начинается ли опция с -t. Если это так, то
вырезается номер терминала. Здесь можно передать любое значение tty,
но не забывайте, что этот номер tty должен также присутствовать в
файле /usr/lib/uucp/L-devices. Благодаря этому файлу, программа cu
знает, что терминальное устройство подключено к разрешенному порту.
В строке 15 проверяется, собираетесь ли вы подключаться к
системе UNIX напрямую. Если да, скорость обмена автоматически
устанавливается на 9600 бод в целях повышения пропускной способности
терминала.
Строки 16-22 выполняют проверку ошибок. Если какая-либо опция,
переданная в командной строке, не соответствует никакому из
предыдущих образцов оператора case, этот факт фиксируется здесь,
выдаются сообщения об ошибках и командный файл завершается.
Строка 26 - это волшебная строка. Поскольку все shell-переменные
получили свои значения, мы можем использовать их в командной строке,
чтобы подставить в нее необходимые значения. Сначала применяется
команда eval. Она раскрывает все имена переменных, заменяя их на
соответствующие значения.
В данном случае мы формируем полную командную строку утилиты cu:
скорость берется из переменной BAUD, линия из TTY, а подсоединение
прямое. Если мы не ведем протоколирование данных, значение PIPE
нулевое и оно будет отброшено при синтаксическом разборе. Если же
переменная PIPE содержит команду для отправки данных в протокольный
файл, команда eval обеспечивает это, организовывая такой конвейер,
как мы указали.
ДОСТУП ИЗ UNIX В UNIX
Теперь давайте рассмотрим полновесное общение двух систем UNIX.
Имеется область, в которой UNIX опередила свое время. Система uucp
позволяет связать несколько машин воедино и создать то, что в
некоторых отношениях является виртуальным окружением, позволяющим вам
работать на любой машине. Функционирование такой сети основано на
удаленной регистрации в системе (cu(1)), дистанционном выполнении
команд (uux(1)), электронной почте (mail(1)), передаче файлов
(uucp(1), uucico(1)) и опознавании узла системы (uname(1) и
uuname(1)).
Поскольку мы занимаемся реализацией коммуникаций типа UNIX-UNIX,
давайте рассмотрим некоторые способы физического соединения
UNIX-машин в одну рабочую среду.
СВЯЗЫВАНИЕ UNIX-МАШИН
В рабочей обстановке машинные конфигурации постоянно меняются в
целях тестирования, из-за аппаратных изменений, перестановок и
переездов и т.д. Планировать конфигурацию ваших машин нужно так,
чтобы она была максимально гибкой, это поможет избежать хаоса и
разлада.
Ваши потребности влияют на то, как вы соедините различные
UNIX-машины. Если имеется блок определения приоритетного запроса к
порту (port contender), вам приходится иметь с ним дело. Одни линии
могут быть подсоединены напрямую, другие напрямую через блок опреде-
ления приоритетного запроса к порту, третьи через модемные коммутато-
ры. Для того чтобы научиться иметь дело со всеми этими возможностями,
попробуем представить эти конфигурации в графическом виде.
Первый тип подключения - прямое подключение (см. рис. 8-7).
Слева показана вызывающая система, справа вызываемая. Вызывающая
система использует последовательный порт для вывода, поэтому на этом
порту не должно быть процесса getty. Инициирующая команда "cu -ltty00
-s9600 dir" обеспечивает подключение к последовательному порту tty00
на очень высокой скорости обмена. Прямые подсоединения могут
поддерживать такую скорость. Сам кабель должен быть выполнен в виде
нулевого модема (рассмотренного ранее в данной главе). В вызываемой
системе задействованы процессы getty, работающие со скоростью 9600
бод на входящей терминальной линии. Когда пользователь вводит
регистрационное имя, getty выполняет процесс login, запрашивающий
пароль, и если этот пароль верный, запускается shell.
Рис. 8-7. Прямое подключение одной системы UNIX к другой
---------------------------------------------------------------------------
DTE-1 DTE-2
+---------+ +---------+
| | | |
| UNIX 1 | | UNIX 2 |
| | Нулевой модем | |
| tty00 |-------------------->| tty00 |
| | | |
| | | |
+---------+ +---------+
ДЕЙСТВИЯ ДЕЙСТВИЯ
1. Нет getty 1. getty 9600 tty00
cu -ltty00 -s9600 dir login имя_пользователя
sh
2. uucp файл 2. getty 9600 tty00
unix 2!~/user login uucp
uucico
---------------------------------------------------------------------------
При использовании uucp происходят аналогичные вещи. Команда uucp
генерирует процесс uucico, инициирующий вызов системы, показанной
справа. Регистрационная последовательность та же самая, за
исключением того, что вместо запуска интерпретатора shell в конце
этой последовательности действий запускается еще один процесс uucico,