Вывод протокола в файл
В нашем примере клиента TELNET реализовано одно новое средство, которое отсутствует в большинстве других клиентских программ: этот клиент позволяет пользователю динамически создавать файл протокола работы, содержащий копию всех данных, передаваемых на экран терминала пользователя. В основе создания такого протокола работы лежит предположение, что пользователю может потребоваться вести регистрацию всего сеанса TELNET или его части. Интересная вещь утеплитель для стены под обои Самара
Функция ведения протокола работы является динамической, поскольку пользователь может ее запустить или остановить в любое время. Кроме того, пользователь может сменить файл, в который клиентская программа записывает протокол. Таким образом, для перехвата вывода одной дистанционно выполняемой команды пользователь может зарегистрироваться в удаленной системе, отменив вывод протокола, затем разрешить вывод протокола и выдать одну или несколько команд, для которых необходимо сохранить вывод, и наконец, снова отменить ведение протокола работы. Файл протокола будет содержать копию всей информации, отображаемой клиентом на терминале пользователя на протяжении того промежутка времени, когда было разрешено ведение протокола.

Реализация средств ведения протокола
Способ ведения протокола клиентом определяет конечный автомат вывода в сокет, показанный на рис. 26.8. Если пользователь вводит символы ({Ctrl+]}, {s}), что равнозначно символу KCESCAPE, за которым следует символ KCSCRIPT, конечный автомат вывода в сокет вызывает исполнительную процедуру scrinit и переходит в состояние KSCOLLECT. До тех пор, пока пользователь не введет символ конца строки (т.е. KCNL), конечный автомат будет оставаться в состоянии KSCOLLECT и вызывать процедуру scrgetc для сбора строки символов, которая задает имя файла протокола. После завершения пользователем ввода строки с именем файла конечный автомат вызывает процедуру scrwrap для открытия файла протокола и снова переходит в состояние KSREMOTE. В каждом из следующих разделов рассматривается одна из исполнительных процедур, связанных с выполнением функции ведения протокола.
Инициализация средств ведения протокола
Сразу после обнаружения запроса на ведение протокола конечный автомат вывода в сокет вызывает исполнительную процедуру scrinit.
Процедура scrinit вначале проверяет, используется ли клиентом дистанционный эхо-повтор (т.е. поступают ли все отображаемые символы с сервера, а не из локального драйвера устройства). Она также проверяет, не было ли уже разрешено пользователем ведение протокола. Процедура scrinit устанавливает значение глобальной переменной scrindex равным нулю. Эта переменная будет применяться другой процедурой для подсчета символов по мере чтения имени файла протокола, вводимого пользователем. И наконец, прежде чем вывести приглашение к вводу имени файла протокола, процедура scrinit сменяет режим терминала пользователя таким образом, чтобы локальный драйвер терминала выводил на экран символы имени файла по мере ввода их пользователем.