conv: toupper, tolower, _toupper, _tolower, toascii - преобразование символов
СИНТАКСИС
#include <ctype.h>
int toupper (c) int c;
int tolower (c) int c;
int _toupper (c) int c;
int _tolower (c) int c;
int toascii (c) int c;
ОПИСАНИЕ
Допустимые значения аргумента функций toupper и tolower совпадают с диапазоном значений функции : целые числа от -1 до 255. Если аргументом функции toupper является малая буква, то результатом будет соответствующая большая буква. Если аргументом функции tolower является большая буква, то результатом будет соответствующая малая буква. Остальные допустимые аргументы возвращаются без изменений.
Макросы _toupper и _tolower выполняют те же действия, что и функции toupper и tolower, но имеют более узкий диапазон допустимых значений аргумента и выполняются быстрее. Аргументом _toupper может быть только малая буква; результатом является соответствующая большая буква. Аналогично, аргументом _tolower может быть только большая буква; результатом является соответствующая малая буква. Если аргумент не принадлежит диапазону допустимых значений, то результат будет непредсказуемым.
Функция toascii обнуляет у аргумента все биты, не являющиеся частью стандартного ASCII-символа; эта функция предназначается для достижения совместимости с другими системами.
cu [-sскорость_обмена] [-lлиния] [-h] [-t] [-d] [-o] [-e] [-n] номер_телефона cu [-sскорость_обмена] [-h] [-d] [-o] [-e] -lлиния cu [-h] [-d] [-o] [-e] имя_системы
ОПИСАНИЕ
Команда cu вызывает другую UNIX-систему, терминал или, возможно, не-UNIX-систему. Она поддерживает интерактивное взаимодействие с возможностью передачи текстовых файлов.
Допустимые опции:
-sскорость_обмена
Указание скорости обмена (300, 1200, 2400, 4800, 9600 бод). Подразумеваемое значение (обозначается Any) зависит от порядка строк в файле /usr/lib/uucp/Devices. Большинство модемов обеспечивают скорость 300 или 1200 бод. При прямом подключении можно задавать скорости большие, чем 1200 бод.
-lлиния
Указание имени устройства, которое будет использоваться в качестве коммунникационной линии. Служит для отмены поиска линии, имеющей подходящую скорость. При использовании опции -l без -s скорость обмена берется из файла /usr/lib/uucp/Devices. Если же эти опции используются одновременно, то cu просматривает файл /usr/lib/uucp/Devices для проверки - соответствует ли требуемая скорость характеристикам линии. Если да, то выполняется соединение с требуемой скоростью. В противном случае выдается сообщение об ошибке, и вызов не выполняется. Указываемое устройство, как правило, является подсоединяемой напрямую асинхронной линией (то есть /dev/ttyab); в этом случае задавать номера_телефона не нужно. Указанное устройство не обязано находиться в каталоге /dev. Если устройство ассоциировано с автоответчиком, то номер_телефона должен быть задан обязательно. При наличии опции -l или -s не стоит использовать опцию имя_системы вместо номера_телефона: к желаемому результату это не приведет (см. ниже имя_системы).
-h Эмуляция локального эхоотображения при вызове других систем, которые ожидают, что терминал находится в полудуплексном режиме.
-t Используется при вызове ASCII-терминала, подключенного через автоответчик. Устанавливается режим преобразования возврата каретки в пару (возврат каретки, переход к новой строке).
-d Выводить диагностическую трассировку.
-o Байты данных, пересылаемые на удаленную систему, дополняются до нечетности.
-e Байты данных, пересылаемые на удаленную систему, дополняются до четности.
-n Для большей секретности номер телефона запрашивается у пользователя, а не вводится из командной строки.
номер_телефона
При использовании автоматического номеронабирателя этот аргумент обозначает телефонный номер со знаками равенства в тех местах, где нужно дождаться ответного сигнала и знаками минус в местах, где надо сделать задержку на 4 секунды.
имя_системы
Имя_системы в смысле uucp может быть использовано вместо номера_телефона. В этом случае имя соответствующей прямой линии или номер_телефона будет получено из файла /usr/lib/uucp/Systems. Замечание: опцию имя_системы не следует использовать совместно с опциями -l и -s, так как cu произведет соединение первым доступным способом, игнорируя указание линии и скорости_обмена.
После установления связи cu разделяется на два процесса: передающий процесс читает данные со стандартного ввода и все строки, не начинающиеся с символа ~, передает удаленной системе; принимающий процесс получает данные от этой системы и, за исключением строк, начинающихся с символа ~, передает на стандартный вывод. Обычно автоматически поддерживается протокол Xon/Xoff для контроля ввода от удаленной системы, чтобы избежать переполнения буфера. Строки, начинающиеся с символа ~, трактуются по-особому.
Передающий процесс интерпретирует следующие команды, выданные пользователем:
~. Завершить диалог с удаленной системой.
~! Выйти в shell локальной системы.
~!команда...
Выполнить команду на локальной системе (посредством sh -c).
~$команда...
Выполнить команду локально и направить ее вывод на удаленную систему.
~%cd Сменить каталог на локальной системе. Примечание: команда выполняется специально запущенным shell'ом, что, возможно, не является желательным.
~%take откуда [куда]
Копировать файл откуда с удаленной системы в файл куда на локальной системе. Если часть куда опущена, то используется аргумент откуда.
~%put откуда [куда]
Копировать файл откуда с локальной системы в файл куда на удаленной системе. Если часть куда опущена, то используется аргумент откуда.
При работе обеих команд, %take и %put, по мере передачи блоков на терминал выводятся последовательные цифры.
~~строка
DIRECTORY(3X)
НАЗВАНИЕ
directory: opendir, readdir, telldir, seekdir, rewinddir, closedir - операции над каталогами
СИНТАКСИС
#include <sys/types.h>
#include <dirent.h>
DIR *opendir (filename) char *filename;
struct dirent *readdir (dirp) DIR *dirp;
long telldir (dirp) DIR *dirp;
void seekdir (dirp, loc) DIR *dirp; long loc;
void rewinddir (dirp) DIR *dirp;
void closedir (dirp) DIR *dirp;
ОПИСАНИЕ
Функция opendir открывает каталог с именем filename и связывает с ним поток каталога. Opendir возвращает в качестве результата указатель, который используется в последующих операциях для идентификации потока каталога. Пустой указатель возвращается, если файл filename не доступен или не является каталогом, либо, если команда malloc(1M) не может выделить достаточного об ема памяти для структуры типа DIR или для буферов.
Функция readdir выдает указатель на следующий активный элемент каталога. Указатели на неактивные элементы каталога не выдаются. При достижении конца каталога или при выявлении некорректной позиции в каталоге возвращается пустой указатель.
Функция telldir выдает текущую позицию в указанном потоке каталога.
Функция seekdir устанавливает позицию для последующей операции readdir над потоком каталога. Данная позиция совпадает с той, которая была получена в результате выполнения операции telldir, вычислившей loc. Значения, которые возвращает telldir, корректны только в том случае, если каталог не сжимался и не расширялся. Такая проблема не возникает в случае версии 5, но может возникнуть для некоторых других типов файловых систем.
Операция rewinddir переустанавливает в начало позицию в указанном потоке каталога.
Операция closedir закрывает указанный поток каталога и освобождает структуру DIR.
При выполнении перечисленных операций могут возникнуть следующие ошибки:
opendir:
[ENOTDIR]
Компонент маршрутного имени filename не является каталогом.
[EACCES]
Для компонента маршрутного имени filename отсутствует право на поиск.
[EMFILE]
Будет превышено максимально допустимое число описателей файлов.
[EFAULT]
Аргумент filename указывает за пределы отведенного процессу адресного пространства.
readdir:
[ENOENT]
Текущая позиция каталога не соответствует корректному элементу.
[EBADF]
Описатель файла, определенный аргументом dirp, в данный момент некорректен. Возможная причина - поток был закрыт.
telldir, seekdir и closedir:
[EBADF]
Описатель файла, определенный аргументом dirp, в данный момент некорректен. Возможная причина - поток был закрыт.
ПРИМЕР
Приведем фрагмент программы для поиска в каталоге элемента name:
Функции sinh, cosh и tanh возвращают, соответственно, значения гиперболического синуса, косинуса и тангенса своего аргумента.
СМ. ТАКЖЕ
.
ДИАГНОСТИКА
Функции sinh и cosh возвращают значение HUGE (sinh может выдать -HUGE при отрицательных x), если представление результирующего значения приводит к переполнению. Переменной errno присваивается значение ERANGE.
Изложенная процедура обработки ошибок может быть изменена посредством функции .
Посредством команды tabs устанавливают позиции табуляции пользовательского терминала в соответствии с заданной разметкой. Предыдущие установки отменяются. Терминал должен допускать переустановку позиций табуляции.
Аргументы команды tabs имеют следующий смысл:
разметка
Для аргумента разметка допустимы четыре типа спецификаций, описанных ниже: именованная (-имя), регулярная (-n), произвольная (n1,n2,...) и файловая (--файл). Если разметка не задана, то по умолчанию применяется значение -8 - "стандарт" табуляций системы UNIX. Номер самой левой колонки равен 1. Заметим, что для программы tabs колонка 1 всегда является самой левой колонкой терминала, даже если у терминала они нумеруются с 0, как например на DASI 300, DASI 300s и DASI 450.
-имя
Для выбора именованной разметки используйте одно из приведенных ниже имен:
-a
1,10,16,36,72 Ассемблер, IBM S/370, первый формат.
-a2
1,10,16,40,72 Ассемблер, IBM S/370, второй формат.
-c
1,8,12,16,20,55 Кобол, обычный формат.
-c2
1,6,10,14,49 Кобол, первый компактный формат.
-c3
1,6,10,14,18,22,26,30,34,38,42,46,50,54,58,62,67 Кобол, второй компактный формат.
-n При регулярной разметке позиции табуляции устанавливаются в колонках 1+n, 1+2*n и т.д. Особое значение имеет разметка -8: для системы UNIX она является стандартной. Другим специальным случаем является значение -0, что означает полное отсутствие табуляций.
n1,n2,...
При произвольной разметке через запятую задается возрастающая последовательность чисел не более чем из 40 элементов. Если перед любым числом (кроме первого) стоит знак плюс, то это число интерпретируется как смещение, прибавляемое к предыдущей величине. Таким образом, разметки 1,10,20,30 и 1,10,+10,+10 считаются одинаковыми.
--файл
Если указан файл, то команда tabs в поисках спецификации формата просматривает первую строку файла [см. ]. Если спецификация найдена, то позиции табуляции устанавливаются в соответствии с ней, в противном случае применяется регулярная разметка -8.
-Tтип_терминала
Команде tabs нужно знать тип терминала для установки позиций табуляции и сдвиге границы. Тип_терминала - это имя из списка . Если данная опция не употребляется, то tabs использует значение переменной окружения TERM. Если переменная TERM не определена в окружении [см. ], то применяется последовательность команд, работающая для многих терминалов.
+mкол
Для некоторых терминалов можно задать левую границу табуляции. При этом колонка кол+1 становится левой границей, а все позиции табуляции сдвигаются на кол вправо. Если +m использован без величины кол, то подразумевается значение 10. Нормальную (самую левую) границу на большинстве типов терминалов можно получить с помощью +m0. Граница в большинстве случаев переустанавливается только при явном задании опции +m.
Если опции -T и +m встречаются в командной строке несколько раз, используется последнее вхождение.
Управляющие символы для установки позиций табуляции и сдвига границы выдаются на стандартный вывод.
СМ. ТАКЖЕ
, .
, environ(4), в Справочнике программиста.
ДИАГНОСТИКА
illegal tabs
При произвольной разметке нарушена упорядоченность позиций табуляции.
illegal increment
При произвольной разметке задано нулевое или отрицательное смещение.
unknown tab code
Неизвестное имя разметки.
can't open
Не удается открыть файл со спецификацией формата.
file indirection
Спецификация формата, хранящаяся в файле, содержит ссылку на другой файл.
ПРИМЕЧАНИЯ
Среди различных типов терминалов нет единообразия в способах отмены табуляции и установки левой границы.
Команда tabs очищает не более 20 позиций табуляции (на терминалах, использующих длинные последовательности команд), но может установить 64.
ПРЕДОСТЕРЕЖЕНИЯ
Используемая в команде tabs разметка отличается от спецификаций команды . Например, tabs -8 устанавливает позиции табуляций через 8 колонок, тогда как newform -i-8 означает, что табуляции установлены в каждую восьмую позицию.
СЮРПРИЗЫ
Следует иметь в виду, что на некоторых типах терминалов установка позиций табуляции может иметь побочный эффект, например сдвиг левой границы.
Команда tail копирует указанный файл на стандартный вывод, начиная с определенного места. Если файл не задан, то используется стандартный ввод.
Копирование начинается с позиции на расстоянии +число от начала или -число от конца исходного файла. Если число не указано, то принимается значение, равное 10. Должен быть указан ровно один из знаков + или -. Расстояние задается в строках, блоках или символах в соответствии с опцией l, b или c, поставленной после числа. Если единица измерения не задана, то расстояние измеряется в строках; разумеется, нельзя указывать больше одной единицы измерения.
При наличии опции f, если исходной файл не является каналом, программа tail, дойдя до его конца, не завершается, а входит в бесконечный цикл, в котором она секунду спит, а затем пытается прочитать и скопировать последующие записи из исходного файла. Такой режим можно использовать, чтобы следить за ростом файла, запись в который осуществляется каким-нибудь другим процессом. Например, команда
tail -f f1
выдаст последние десять строк файла f1, за которыми последуют строки, добавленные к файлу f1 в промежуток времени между запуском и терминированием программы tail. В качестве другого примера рассмотрим команду
tail -15cf f2
которая выдаст последние 15 символов файла f2, за которыми последуют строки, добавленные к файлу f2 в промежутке между запуском и терминированием tail.
СМ. ТАКЖЕ
.
СЮРПРИЗЫ
При адресации относительно конца файла информация накапливается в буфере, размер которого ограничен. В случае превышения размера выдаются последние 4096 байт.
В случае символьных специальных файлов может встречаться различного рода аномальное поведение.
talk - это программа визуальной связи, которая копирует строки с Вашего терминала на терминал другого пользователя.
Если Вы хотите поговорить с кем-то на Вашей собственной машине, тогда person - это просто входное имя пользователя (login name). Если Вы хотите использовать talk с пользователем другого узла, тогда person принимает одну из следующих форм:
host!user host.user host:user user@host
хотя user@host - возможно предпочтительнее.
Если Вы хотите провести сеанс talk с пользователем, который имеет более, чем один вход на машину, можно использовать аргумент ttyname для индикации соответствующего терминального имени.
При первом вызове talk выдает сообщение:
Message from TalkDaemon@his_machine... talk: connection requested by your_name@your_machine. talk: respond with: talk your_name@your_machine
Не имеет значения, с какой машины отвечает вам получатель, пока его входное имя (login) остается тем же самым. Как только связь установлена, оба участника могут одновременно печатать, строки вывода появляются в раздельных окнах. Нажатие CTRL l вызывает распечатку экрана, в то время, как символы "стереть", "уничтожить", и "уничтожить слово" отрабатываются нормально. Для выхода просто нажмите символ "прерывания"; talk переместит курсор на дно экрана и восстановит терминал.
Разрешение использовать talk может быть запрещено или предоставлено применением команды mesg. Вначале talk разрешен. несколько команд, особенно nroff и , запрещают сообщения в целях предотвращения беспорядочного вывода. в режиме реального времени.
Программа tape посылает команды и принимает информацию о состоянии в/из ленточной подсистемы.
Доступные команды перечислены ниже:
amount
Сообщает количество данных, обработанных при последней или текущей передаче.
erase
Стирает информацию с ленты в кассете. Также подтягивает.
reset
Устанавливает в исходное состояние контроллер и накопитель. Чистит все флаги ошибок и возвращает ленточную систему в активное состояние.
reten
Подтягивание ленты на кассете. Следует использовать периодически с целью устранения проблем, связанных с провисанием ленты. Провисание ленты может вызвать чрезмерное число ошибок при использовании ленты.
rewind
Ускоренная перемотка к началу ленты.
rfm
Перемотка ленты вперед к маркеру следующего файла.
status
Выходное сообщение о состоянии выглядит следующим образом:
status: status message soft error: n underrrunns: m
status message это сообщение о текущем состоянии накопителя; наиболее типичными сообщениями о состоянии накопителя являются следующие: "no cartridge" (нет кассеты), "write protected" (защищен по записи), "beginning of tape" (начало ленты).
soft errors это число исправляемых ошибок, которые имели место при последней операции с лентой. Исправляемой ошибкой считается ошибка, которая может быть исправлена непосредственно самим накопителем или контроллером. Примером неисправляемой, "тяжелой" ошибки является попытка записи на ленту, защищенную по записи. Необходимо отметить, что если число возникающих исправляемых ошибок значительно превышает спецификацию производителя, то накопитель должен быть отремонтирован или заменен.
underruns это количество времени, которое было потрачено на остановку накопителя и его перезапуск вследствие переполнения его буфера. Это время не является признаком ошибки, но указывает на то, что данные не передавались с максимальной возможной скоростью, на которую рассчитан накопитель. Влияние данной перегрузки может быть снято перезагрузкой системы.
wfm
Запись маркера файла в текущую позицию на ленте.
Команды amount и reset могут быть использованы, когда лента занята выполнением других операций. Команды erase, reten, rewind, rfm, status и wfm находятся в состоянии ожидания, пока не закончится текущая команда, и только потом начинают выполняться.
Если вы используйте ленточный накопитель, не поддерживающий режима ускоренной перемотки к началу ленты или не выполняющий команды rfm и wfm, то накопитель просто остановится после выполнения предыдущей команды, указывая на то, что могут быть выполнены следующие команды. Команда rewind может быть использована для сброса этих условий.
Устройство tape обеспечивает системный интерфейс к стримеру. Обычно для работы со стримером используются команды tar(1), cpio(1), dd(1) backup(1), dump(1) и restore(1).
Поддерживается одиночный стример с первичным (символьным, неблочным) интерфейсом. Существует три типа стандартных устройства стримеров. Устройства, имена которых начинаются с "r" ("raw" первичный, без обработки данных), следует использовать для выполнения большинства обычных операций, в то время как устройства, имена которых начинаются с "n" ("no rewind on hold" - без перемотки в процессе обработки), следует использовать для хранения и восстановления большого количества файлов. Устройства, имена которых начинаются с "e" (ECC - проверка и исправление ошибок) поддерживают схему восстановления из состояний с ошибками 2/64. Это означает, что два 512-байтовых блока из 64 блоков могут быть сбойными, и драйвер скорректирует ошибки. Подобная программная поддержка ECC обеспечивает высокий уровень восстановления испорченных данных.
В следующей таблице суммируются основные соглашения по наименованиям поддерживаемых стримеров:
ct0,1
стример типа QIC24 unit 0,1
ct2,3
стример типа QIC11 unit 0,1
ctmini
кассетный стример на базе контроллера гибких дисков
mt0,1
двухкатушечный стример unit 0,1 1600 бит/дюйм
mt2,3
двухкатушечный стример unit 0,1 800 бит/дюйм
mt4,5
двухкатушечный стример unit 0,1 6250 бит/дюйм
Команды работы со стримером описаны в разделе tape(1).
После выполнения определенных операций со стримером система возвращает подсказку прежде, чем контроллер стримера завершит свои действия. Если пользователь вставит очередную ленту слишком быстро, то появится сообщение об ошибке "device busy" (устройство занято), которое не исчезнет, пока контроллер не закончит свою работу.
Для продолжительного и бесперебойного функционирования стримерной подсистемы необходимо периодически перенатягивать ленту в кассете и чистить головку стримера. Для перенатяжки ленты используйте команду tape(1).
Команда tapedump выводит содержимое магнитных лент согласно установленным опциям. Опции включают преобразование входного формата представления в выходной формат, определенный пользователем, указание размеров входного и выходного блоков, а также предоставляют возможность указать, что выводимый дамп должен начинаться с определенного блока на ленте и содержать заданное число блоков.
ОПЦИИ
tape-device
входное ленточное устройство.
-a
преобразование входного формата EBCDIC в выходной формат ASCII.
-e
преобразование входного формата ASCII в выходной формат EBCDIC.
-o
вывод на экран дисплея выходного файла в восьмеричном формате.
-h
вывод на экран дисплея выходного файла в шестнадцатиричном формате.
-b num
пропуск n-входных записей перед началом вывода содержимого.
-t num
указание, с какого ленточного файла начать формирование дампа, где num - номер набора файлов на ленте.
-s num
определяет адрес блока на ленте, с которого начать вывод.
-n num
определяет число блоков, составляющих дамп.
output-file
имя выходного файла; по умолчанию используется стандартное устройство вывода.
ПРИМЕРЫ
tapedump -b400 -h/dev/rct0/tmp/hexdump
Эта команда читает ленту, начиная с блока 400, и записывает результат в шестнадцатиричном формате в файл с именем /tmp/hexdump, определенный пользователем.
tapedump -a/dev/rct0
Эта команда читает ленту в формате EBCDIC и преобразует выводимый файл в формат ASCII.
СМ. ТАКЖЕ
, , , , .
ЗАМЕЧАНИЯ
В качестве выходного файла можно задать другое ленточное устройство.
tar - обслуживание файлового архива на магнитной ленте
СИНТАКСИС
/etc/tar [-]c[v][w][f][b] архив блок файл ... /etc/tar [-]r[v][w][f][b] архив блок [файл ...] /etc/tar [-]t[v][f] архив /etc/tar [-]u[v][w][f][b] архив блок [файл ...] /etc/tar [-]x[m][o][v][w][f] архив [файл ...]
ОПИСАНИЕ
Команда tar сохраняет файлы на магнитной ленте и извлекает их с ленты. Ее действиями управляют первый аргумент - цепочка символов, содержащая по крайней мере один символ, специфицирующий выполняемую функцию (c, r, t, u, или x), за которым, возможно, следует одна или несколько спецификаций режима выполнения этой функции. Следующими аргументами являются: имя архива (обычно это /dev/mt, но при наличии спецификации f архивом служит файл) и коэффициент блокирования. Остальными аргументами этой команды являются имена файлов и каталогов, указывающие, какие файлы должны быть сохранены или восстановлены. Во всех случаях имя каталога обозначает содержащиеся в нем файлы и (рекурсивно) подкаталоги.
Выполняемая функция специфицируется одним из следующих символов:
r
Указанные файлы записываются в конец архива.
x
Указанные файлы извлекаются из архива, а если задан каталог, содержимое которого было записано в архив, то этот каталог восстанавливается (рекурсивно). Рекомендуется задавать файлы относительными маршрутными именами, иначе tar не сможет найти их в архиве. Имя владельца, время модификации, режим доступа также восстанавливаются (если возможно). Если не указано ни одно имя файла или каталога, то извлекается все содержимое архива. Заметим, что если в архиве есть несколько файлов с одним и тем же именем, то в результате извлечется последний.
t
Архив просматривается и имена указанных файлов и информация о них выводятся всякий раз, когда они встречаются в архиве. Формат вывода аналогичен команде ls -l. Если имена файлов не указаны, то выводятся сведения обо всех файлах архива.
u
Указанные файлы добавляются в архив, если их там не было или они были модифицированы после последней записи в архив. Включает спецификацию r.
c
Создание нового архива; файлы начинают записываться с начала архива, а не за последним файлом. Включает спецификацию r.
Следующие символы могут быть использованы дополнительно к букве, задающей желаемое действие. Использовать их следует в порядке, указанном в разделе СИНТАКСИС.
v
Обычно tar выполняет указанное действие без сообщений пользователю. Опция v заставляет tar выводить имена всех файлов, которые он обрабатывает, причем перед именами выводится буква, обозначающая действие. Если выбрана функция t, то v дает больше информации о сохраненном файле, а не просто его имя.
w
Если указан этот модификатор, то tar печатает действие, которое он собирается сделать, за ним выводит имя файла и ждет подтверждения от пользователя. Если введено слово, которое начинается с буквы y, то действие выполняется. Любое другое введенное слово рассматривается как нет.
f
Этот модификатор заставляет использовать следующий аргумент как имя архива вместо /dev/mt. Если вместо имени файла задан -, то tar пишет на стандартный вывод или читает со стандартного ввода, в зависимости от указанного действия. Таким образом, tar может использоваться как начало или конец конвейера. Команда tar может также использоваться для копирования каталогов вместе с иерархической структурой подкаталогов при помощи следующей конструкции:
Если указан этот модификатор, то аргумент блок используется, как коэффициент блокирования для записей на ленте. По умолчанию он равен 1, максимальный - 20. Если архив обновляемый или он расположен в специальном блочном файле, то модификатор неприменим. Этот модификатор может быть использован только для архивов действительно расположенных на магнитной ленте (см. опцию f выше). Размер блока определяется автоматически при чтении ленты (режимы x и t).
l
Этот модификатор позволяет выводить сообщения об ошибках, если tar не смог разрешить все ссылки на сохраняемые файлы. Если модификатор l не указан, то сообщений об ошибках по этому поводу не будет.
m
При использовании этого модификатора время последней модификации файлов, извлекаемых из архива, устанавливается равным времени извлечения, а не тому времени, которое записано в архиве.
o
Этот модификатор придает извлекаемым из архива файлам идентификаторы владельца и группы пользователя, запустившего программу извлечения, а не идентификаторы, записанные в архиве. Модификатор корректен только в режиме извлечения (x).
ФАЙЛЫ
/dev/mt /tmp/tar*
СМ. ТАКЖЕ
, , .
в Справочнике администратора.
ДИАГНОСТИКА
Сообщения о неправильном спецификаторе и ошибках ввода/вывода на ленту.
Сообщения о нехватке памяти для таблиц ссылок.
СЮРПРИЗЫ
Нет способа указать в архиве n-ый экземпляр заданного файла.
Ошибки ввода/вывода обрабатываются прямолинейно.
Режим u может работать медленно.
Опция b не может быть использована при работе с архивом, который должен обновляться. Используемый сейчас драйвер магнитной ленты не позволяет отматывать ее назад. Если архив находится в дисковом файле, то опцию b нельзя применять ни в коем случае, потому что обновление архива, расположенного на диске, может разрушить его.
Текущее ограничение на длину имени файла равно 100 символам.
Команда tar не копирует пустые каталоги и специальные файлы.
telenit, mkinittab - представляют альтернативный метод включения и выключения терминалов.
СИНТАКСИС
telenit state mkinittab [ttysfyle]
ОПИСАНИЕ
telenit управленяет действиями init(5). Она предоставляет альтернативный метод разрешения входа в систему на терминалах по отношению к методу команд и .
telenit формирует новый файл /etc/ttys из файла /etc/inittab. Строки из файла inittab(3), соответствующие параметру state, преобразуются в свои эквиваленты в файле ttys(3). После этого init сигнализирует о разрешении или запрете подключения к системе на терминалах в соответствии с /etc/ttys.
Допустимые значения state таковы:
0-6 Файл /etc/ttys формируется из строк файла /etc/inittab, соответствующих заданному значению state. q, Q Новый файл /etc/ttys не генерируется, а программе init посылается сигнал, задающий проверку существующего файла /etc/ttys. s, S Программе init посылается сигнал для входа в режим обслуживания системы (однопользовательский режим).
Только привилегированный пользователь может запускать telenit. Пользователи, подключенные к системе в текущий момент на заблокированных терминалах, резко отключаются. Вход в систему на терминалах, не перечисленных в /etc/ttys, не разрешается.
mkinittab выводит на стандартный вывод файл формата inittab, сгенерированный с помощью файлов ttysfiles. Каждый файл из списка ttyfiles должен иметь формат файла ttys. Если файлы ttysfiles не заданы, то выполняется чтение стандартного ввода.
inittab предназначается для пользователей, более знакомых с управлением терминалами по способу telenit, чем со стандартным подходом по методу enable и disable. Предполагается,что в следующей версии системы UNIX будет достигнуто полное объединение этих двух подходов.
term - формат скомпилированного файла описаний терминалов
СИНТАКСИС
/usr/lib/terminfo/?/*
ОПИСАНИЕ
Скомпилированные описания помещаются в каталог /usr/lib/terminfo. Чтобы предотвратить последовательный поиск в огромном каталоге, используется двухуровневая схема: /usr/lib/terminfo/с/имя, где имя - это имя терминала, а с - первый символ имени. Так, скомпилированное описание терминала att4425 находится в файле /usr/lib/terminfo/a/att4425. Синонимы реализуются с помощью ссылок на один и тот же скомпилированный файл.
Формат скомпилированных файлов выбран так, чтобы он не зависел от оборудования. Считается, что байт содержит 8 бит, но не делается никаких предположений о порядке байт или размножении знака. Таким образом, двоичные файлы могут быть перенесены на любое оборудование, в котором байт содержит 8 бит.
Короткие целые числа записываются в двух восьмибитных байтах. Первый байт содержит наименее значимые 8 бит значения, второй содержит наиболее значимые 8 бит (то есть значение равно 256*второй_байт+первый_байт). Значение -1 представляется в виде 0377,0377, значение -2 в виде 0376,0377, остальные отрицательные числа недопустимы. На компьютерах, на которых эти соглашения не соответствуют оборудованию, необходимо читать целые числа как 2 байта, а затем вычислять значение, обеспечивая таким образом переносимость скомпилированных файлов на разные типы компьютеров. Значение, равное -1, обычно означает, что указанная характеристика у терминала отсутствует. Значение, равное -2, означает, что характеристика отменена в исходном описании и считается отсутствующей.
Скомпилированный файл создается из исходных файлов описаний терминалов [см опцию -I в ] с помощью компилятора . Чтение этого файла производится с помощью процедуры setupterm [см. ].
Скомпилированный файл делится на 6 секций: заголовок, имена терминалов, флаги, числа, цепочки символов, таблица цепочек.
Секция заголовок находится в начале файла. В этой секции содержатся 6 коротких целых чисел:
Магическое число (восьмеричное 0432). Размер (в байтах) секции имен. Размер (в байтах) секции флагов. Количество коротких целых в секции чисел. Количество коротких целых (смещений) в секции цепочек символов. Размер (в байтах) таблицы цепочек.
Следующей идет секция имен терминалов. В ней содержится первая строка из описания , в которой перечисляются различные имена данного терминала, разделенные символами | [см. ]. Эта секция завершается нулевым байтом.
В секции флагов под каждый флаг отводится один байт. Этот байт равен 0 или 1, в зависимости от того, присутствует соответствующая характеристика или отсутствует. Значение 2 означает, что соответствующая характеристика отменена. Характеристики перечисляются в том же порядке, что и во включаемом файле <term.h>.
Между секцией флагов и секцией чисел при необходимости вставляется нулевой байт, обеспечивающий выравнивание начала секции чисел по границе полуслова. Все короткие целые выравниваются по границе полуслова.
Секция чисел похожа на секцию флагов. Описание каждой характеристики занимает 2 байта и представляется коротким целым числом. Значения -1 и -2 означают, что характеристика отсутствует.
Секция цепочек устроена аналогично. Описание каждой характеристики занимает 2 байта и представляется коротким целым числом. Значения -1 и -2 означают, что характеристика отсутствует. В противном случае значение представляет собой смещение цепочки от начала таблицы цепочек. Специальные символы типа ^X или \c записываются во внутреннем виде, а не в виде пары печатных символов. Информация о заполнителях ($<nn>) и о параметрах (%x) записывается в текстовом виде, без интерпретации.
Последней секцией является таблица цепочек. Она содержит все цепочки символов, на которые есть ссылки из секции цепочек. Каждая цепочка завершается нулевым байтом.
Отметим, что процедура setupterm может быть рассчитана на другой набор характеристик, чем тот, который реально присутствует в файле. База данных может измениться после компиляции setupterm, из-за чего в ней могут появиться нераспознаваемые характеристики или наоборот, setupterm может распознавать больше характеристик, чем реально описано в базе данных. Для того, чтобы setupterm могла работать во всех случаях, в заголовок включены размеры других секций. Новые характеристики должны добавляться после уже существующих.
В качестве примера ниже приводится восьмеричный дамп описания терминала Data General Dasher D200:
Файл /etc/termcap - терминалы, описывающие базу данных. Эта база данных используется командами, такими как , , Lyrix, и пакетами программ, curses(2). Терминалы описываются в termcap путем сообщения множества возможностей и описания выполняемых операций. Запросы заполнения и последовательности инициализации включены в termcap.
Входы в termcap состоят из областей, разделенных ':'. Первый ввод для каждого терминала дает имена, знакомые терминлу, разделенные вертикальными черточками (:). Для совместимости со старыми системами первое имя всегда на 2 символа длинее. Второе данное имя имеет более общую аббривиатуру для терминала, и имя используется с помощью и . Последнему имени следует быть большим именем, полностью идентифицирующим терминал. Только последнее имя может содержать в себе пробелы для читабельности.
Возможности (включающие расширения XENIX).
Ниже представлен список возможностей, определяемых для данного терминала. В этом списке, (Р) указывает, какое может быть определено наполнение, а (Р*) указывает,что наполнение может быть основано на числе задействованных строк. Вид возможности и поля наполнения подробно описаны в следующем разделе "Виды возможностей".
Коды, начинающиеся с прописных букв (за исключением СС), обозначают расширения XENIX. Они включаются в дополнение к стандартным кодам и используютя одной или более программами применений. Также как в случае стандартных входов, не все режимы поддерживаются всеми применениями или терминалами. Некоторые из этих входов ссылаются на особые выходные свойства терминала (такое как GS для "графического запуска"). Другие описывают последовательности символов, посылаемых ключами, появляющимися на клавиатуре (например, PU для ключа PageUp). Существуют также входы, используемые для предания определенных значений другим ключам (или сочетаниям ключей) для использования в частной программе матобеспечения. Ряд возможностей расширения XENIX имеет аналогичную функцию со стандартными возможностями. Они используются для переопределения особых ключей (например, использование функциональных ключей, как ключей стрелок). Возможности расширения включаются в файл /etc/termcap по мере того, как их затребывают некоторые утилиты XENIX (например ). Наиболее часто употребляемые возможности расширения более подробно описаны в разделе "Расширения XENIX".
ИмяТипPad?Описание
ae
str
(P)
Закончить альтернативный набор символов
al
str
(P*)
Добавить новую чистую строку
am
bool
Терминал имеет автоматические поля
as
str
(P)
Начать альтернативный набор символов
bc
str
Backspace, если не ^H
bs
bool
Можно backspace c ^H
bt
str
(P)
Обратный табулятор
bw
bool
(P)
Переходы по backspace c позиции 0 на последнюю
CC
str
Командный символ в прототипе, если
cd
str
(P*)
Очистить до конца терминала
ce
str
(P)
Очистить до конца строки
CF
str
Курсор из
ch
str
(P)
Как cm, но только горизонтальное движение, строка остается такой же
CL
str
Посылается с помощью ключа CHAR LEFT
cl
str
(P*)
Очистить экран
cm
str
(P)
Движение курсора
co
num
Номер позиции строки
CO
str
Курсор на
cr
str
(P*)
Вернуть каретку (по умолчанию ^M)
cs
str
(P)
Изменить область просматривания (vt100), как cm
cv
str
(P)
Как ch, но только по вертикали
CW
str
Посылается с помощью клавиши CHANGE WINDOW
da
bool
Дисплей может сохраняться выше
DA
bool
Удалить атрибутивную строку
db
bool
Дисплей может быть сохранен ниже
dB
num
Необходимое количество миллисекунд bs задержки
dC
num
Необходимое количество миллисекунд cr задержки
dc
str
(P*)
Удалить символ
dF
num
Необходимое количество миллисекунд ff задержки
dl
str
(P*)
Удалить строку
dm
str
Удалить режим (ввода)
dN
num
Необходимое количество миллисекунд nl задержки
do
str
Спуститься на одну строку
dT
num
Необходимое количество миллисекунд tab задержки
ed
str
Закончить режим удаления
ei
str
Закончить режим вставки; дается ':ei=:', если ic
EN
str
Посылается ключем END
eo
bool
Можно удалить лишние удары, вместо них пробелы
ff
str
(P*)
Выброс документальной копии страницы терминала (по умолчанию ^L)
G1
str
Верхний правый (1ый квадрант) угловой символ
G2
str
Верхний левый (2ой квадрант) угловой символ
G3
str
Нижний левый (3ий квадрант) угловой символ
G4
str
Нижний првый (4ый квадрант) угловой символ
GC
str
Центрирует графический символ (аналогично +)
GD
str
Символ нижнего кармана
GE
str
Конец графического режима
GG
num
Количество символов, забираемое GS и GE
GH
str
Горизонтальный штриховой символ
GL
str
Символ левого кармана
GR
str
Символ правого кармана
GS
str
Начало графического режима
GU
str
Символ верхнего кармана
MP
str
Многократная инициализация строки
MR
str
Многократный сброс строки
GV
str
Вертикальный штриховой символ
hc
bool
Терминал документальных копий
hd
str
На полстроки вниз (прогонка на 1/2 вперед)
HM
str
Посылается клавишей HOME (если нет kh)
ho
str
Курсор в начало (если нет cm)
hu
str
Полстроки вверх (прогонка на 1/2 назад)
hz
str
Hazeltine; не может печатать ~'
ic
str
(P)
Символ вставки
if
str
Имя файла, содержащее is
im
str
Режим вставки (вход); дается ':im=', если ic
in
bool
Режим вставки различает нули на дисплее
ip
str
(P*)
Вспомогательный символ вставки после вставленного символа
is
str
Строка инициализации терминала
k0-k9
str
Посылается другими функциональными клавишами 0-9
kb
str
Посылается клавишей backspace
kd
str
Посылается нижней клавишей управления курсором
ke
str
Выход из режима 'keypad transmit'
kh
str
Посылается клавишей HOME
kl
str
Посылается левой клавишей управления курсором
kn
num
Количество 'других' ключей
ko
str
Вводы termcap для других нефункциональных клавиш
kr
str
Посылается правой клавишей управления курсором
ks
str
Установить терминал в режим 'keypad transmit'
ku
str
Посылается верхней клавишей управления курсором
10-19
str
Метки на 'других' функциональных клавишах
LD
str
Посылается клавишей удаления строки
LF
str
Посылается клавишей line feed
li
num
Количество строк на экране или странице
ll
str
Последняя строка, первая колонка (если не cm)
ma
str
Отображение клавиши управления курсором, используемое vi только версией 2
mi
bool
Безопасно для движения, пока в режиме вставки
ml
str
Замок памяти на курсоре выше
MP
str
Многократная инициализация строки
MR
str
Многократный сброс строки
ms
bool
По желанию переход в режим stand out
mu
str
Нет замка памяти (закрыть замок памяти)
nc
bool
Неправильно возвращение рабочей каретки (DM2500,H2000)
nd
str
Неразрушенная область (курсор вправо)
nl
str
(P*)
Символ новой строки (по умолчанию \n)
ns
bool
Терминал - CRT, но не прoсматривает
NU
str
Посылается клавишей NEXT UNLOCKED CELL
os
bool
Терминал набирает лишние удары (на клавиатуре)
pc
str
Символ вспомогательной клавиатуры (лучше нуля)
PD
str
Посылается клавишей PAGE DOWN
PN
str
Начало местной печати
PS
str
Конец местной печати
pt
bool
Имеет символы табуляции аппаратуры (может понадобиться для установки is)
PU
str
Посылается клавишей PAGE UP
RC
str
Посылается клавишей RECALC
RF
str
Посылается клавишей TOGLE REFERENCE
GD
str
Символ нижнего кармана
GE
str
Конец графического режима
GG
num
Количество символов, забираемое GS и GE
GH
str
Горизонтальный штриховой символ
GL
str
Символ левого кармана
GR
str
Символ правого кармана
GS
str
Начало графического режима
GU
str
Символ верхнего кармана
MP
str
Многократная инициализация строки
MR
str
Многократный сброс строки
GV
str
Вертикальный штриховой символ
RT
str
Посылается клавишей RETURN
se
str
Закончить режим stand out
sf
str
(P)
Просмотр вперед
sg
num
Количество пробелов, разрешенных so или se
so
str
Начать режим stand out
sr
str
(P)
Обратный просмотр (слова наоборот)
ta
str
(P)
Символ табуляции (отличный от ^I 0 или наполнения)
tc
str
Ввод подобного терминала - должен осуществляться позже
te
str
Строка для окончания программ, использующая cm
ti
str
Строка для начала работы программ, использующая cm
uc
str
Подчеркнуть один символ и двигать мимо него
ue
str
Закончить режим подчеркивания
ug
num
Количество пробелов, разрешенных us или ue
ul
bool
Терминал подчеркивает четные, хотя не делает лишних ударов
up
str
Подняться на строку (курсор вверх)
UP
str
Посылается клавишей up-arrow (альтернативно ku)
us
str
Включить режим подчеркивания
vb
str
Очевидный звонок (не может двигаться курсор)
ve
str
Последовательность для выключения режима open/visual
vs
str
Последовательность для выключения режима open/visual
WL
str
Посылается клавишей WORD LEFT
WR
str
Посылается клавишей WORD RIGHT
xb
bool
Beehive (f1=escape, f2=ctrl C)
xn
bool
Новая строка опускается после перехода (Concept)
xr
bool
Возвращает действия аналогично ce \r \n (Della Data)
xs
bool
Стандартный выход не убирается при записи над ним (HP 264?)
xt
bool
Символы табуляции разрушены, магический символ so (Teleray 1061)
<
/p>
Вход выборки
Следующий вход описывает Concept-100 и является одним из наиболее сложных входов в файле termcap. (Этот конкретный ввод Concept устарел и используется только в качестве примера.)
Входы могут продолжаться на множество строк с помощью Backslash(\) в качестве последнего символа строки. Пустые места могут включаться для удобства считывания между последнем полем строки и между первым полем следующего. Возможности в termcap трех видов: булевские возможности, указывающие, что терминал имеет некоторое свойство, числовые возможности, дающие размер терминала или размер определенных задержек, и строковые возможности, дающие последовательность, которая может быть использована для выполнения некоторых операций терминала.
Виды возможностей
Все возможности имеют два буквенных входа. Например, факт, что Concept имеет 'автоматические поля' (т.е. автоматический возврат и подачу бумаги, когда достигается конец строки) указывается возможностью am. Описание Concept включает am. За числовыми возможностями следует символ '#' и затем значение. Так co, который указывает число позиций в терминале, для Concept имеет значение '80'.
Наконец, строковые значащие возможности, такие как ce (очистить до конца последовательности строки) даются с помощью двух символьных кодов,'=', и затем строка , оканчивающаяся следующим ':'. В такой возможности может появиться задержка в миллисекундах после '=', и чтобы обеспечить эту задержку редактор посылает символы наполнения после остатка строки. Задержка может быть как целым числом, например, 20, так и целым числом, за которым следует '*', например '3*'. '*' указывает, что требуемое наполнение пропорционально числу строк, задействованных в операции, и заданная величина представляет собой требуемое наполнение на каждое задействование. Когда определяется '*', иногда бывает полезным задать задержку вида '3.5', чтобы задать задержку на единицу до десятых миллисекунды.
Для простого кодирования символов в строковых значащих возможностях обеспечивается ряд управляющих последовательностей. \E отображается в символ ESCAPE, ^x отображается в ctrl-x для любого соответствующего х, а последовательности 2 \n \r \t \b \f дают новую строку, return, tab, backspace и formfeed. Наконец, символы могут задаваться в виде трех восьмеричных цифр после знака \, а символы ^ и \ могут быть представлены как \^ и \\. Если необходимо поместить в возможность двоеточие (:), оно должно быть представлено в восьмеричном виде как \072. Если необходимо поместить в строковую возможность нулевой символ, он должен быть закодирован как \200. Программа, которая взаимодействует с termcap, использует С строки, отрезает старшие биты строки вывода, и так, что \200 будет выводится, как \000.
Подготовительное описание
Наиболее эффективным способом для подготовления терминального описания является описание подобного терминала в termcap и постепенно построение нового описания, используя частичное описание с ex для проверки правильности. Имейте в виду, что очень необычный терминал может проявлять недостаток в возможности файла termcap описать его. Чтобы проверить новое описание терминала, можно установить переменную среды TERMCAP, равную составному имени файла, содержащего описание, над котором вы работаете, и редактор будет смотреть туда скорее, чем в /etc/termcap. TERMCAP может также быть установлена на вход самой termcap, чтобы избежать считывания файла, когда стартуется редактор.
Базовые возможности
Число позиций в каждой строке для терминала задается числовой возможностью co. Если терминал типа CRT, число строк на экране задается возможностью li. Если терминал переходит к началу следующей строки, когда он достигает правого поля, у него должна быть возможность am. Способность терминала очищать свой экран, это задается с помощью строковой возможности cl. Если терминал может осуществлять backspace, он должен иметь возможность bs, если за backspace не идет символ, отличный от ^H; в этом случае следует расценивать этот символ, как строковую возможность bc. Если при этом не стирается предыдущая позиция, то должна иметься возможность os.
Очень важным здесь является то, что движения местного курсора, закодированные в termcap, являются неопределенными в левом и верхнем углах терминала CRT. Редактор никогда не предпринимает попытки осуществить backspace у левого угла, также он не будет продвигаться вверх. Редактор считает, что подача низа экрана вызовет подъем экрана вверх, а возможность am говорит, находится ли курсор в правильном месте экрана. Если терминал имеет включаемые избирательные автоматические поля, файл termcap, как правило, считает, что он включен (т.е. am).
Эти возможности достаточны, чтобы описать печатающий и 'glass-tty' терминалы. Так модель 33 телетайпа описывается как
t3|33|tty33:co#72:os
а Lear Siegler ADM-3 описывается как
cl|adm3|3|lsi adm3:am:bs:cl=^Z:li#24:co#80
Адресация курсора
Адресация курсора в терминале описывается строковой возможностью cm. Эта возможность использует printf(2) как переходы (такие как %x) в ней. Это аналогично кодированию текущей строки или расположения страницы, в то время как другие символы проходят неизмененными. Если строка cm считается функцией, ее аргументы, строки и позиции, к которым желательно двигаться, а % кодировки имеет следующее значения:
%d
заменяется позицией пересечения строки/колонки, начальный адрес 0
%2
как %2d - 2 цифровых поля
%3
как %3d - 3 цифровых поля
%
как printf(S) %c
%+x
добавляет х к значению, затем %
%>xy
если значение>x, добавляет y, не выводится
%r
устанавливает обратный порядок строки и колонки(для начальной позиции 1)
%i
обратный порядок строки и колонки, не выводится
%%
увеличивает позицию пересечения строки/колонки (начальная позиция 1)
%n
исключающее или ряд и колонка с адресом 0140 (DM2500)
%B
BCD(16*(x/10))+(x%10), не выводится
%D
Обратное кодирование (x-2*(x-2*(x%16)), не выводится (Delta Data).
Рассмотрим HP2645, который, чтобы добраться до ряда 3 и позиции 12 должен быть послан \E&a12c03Y с задержкой в 6миллисекунд. Отметим, что порядок рядов и позиций здесь переставлен, и что ряд и позиция печатаются как две цифры. Таким образом, возможность cm равна 'cm=6\E&%r%2c%2Y'. Чтобы послать текущий ряд и позицию для Microterm ACT-IV необходимо поставить перед ними ^T, причем ряд и позиция просто кодируются в двоичном коде, 'cm=^T%.%'. Терминалы, которые используют %, должны иметь возможность применить backspace к курсору(bs или bc), и сдвинуть курсор вверх на одну строку на экране (up представлен ниже). Это необходимо, так как не всегда безопасно передавать \t, \n ^D и \r, так как система может их изменить или не учесть.
Последним примером является LSI ADM-3a, который использует сдвиг ряда и позиции с помощью пустого символа, таким образом, 'cm=\E=%+%+'.
Движение курсора
Если терминал может перемещать курсор на одну позицию вправо, оставляя символ текущей позиции неизменным, то последовательность следует задавать как nd ( неращрушающей). Если он может перемещать курсор на строку вверх на экране в этой же колонке, то задается последовательность up. Если терминал не имеет курсора адресации, но может возвращать курсор на начальную позицию (самый верхний левый угол экрана), то это может задаваться как ho; аналогично, быстрый способ попасть курсору в самый нижний левый угол экрана - задается как ll; это можно получить включением up из начальной позиции, редактор никогда не выполняет это сам (если ll не выполнит), так как он имеет предписания о результате движения из начальной позиции.
Очищение области
Если терминал может очищать остаток строки, начиная от текущей позиции, оставляя курсор на то же месте, надо задать ce. Если терминал может очищать до конца дисплея от текущей позиции, то следует задавать cd. cd определяется только из первой колонки строки.
Вставка/уничтожение строки
Если терминал может открыть первую пустую строку перед строкой, на которой находится курсор, то это может задавться al. Отметим, что это выполнимо только из первой колонки строки. Курсор должен появиться на новой пустой строке. Если терминал должен уничтожать строку, на которой расположен курсор, то это задается dl; это выполнимо только в первой позиции строки, которая должна быть уничтожена.Если терминал может сохранять дисплейную память над, то следует задавать средство da; если дисплейная память задается ниже, то db. Это позволяет редактору знать, что уничтожение строки на экране может создавать непустые строки выше или что обратное просматривание с sb может создавать ниже непустые строки.
Вставка/стирание символа
Имеется два основных вида разумных терминалов, что касается вставки/стирания символа, которые могут быть описаны с помощью termcap. Наиболее общие операции вставки/стирания символов различаются только тем, что оставляют символы в текущем состоянии или сдвигают их в конец или начало строки. Другие терминалы, такие как Concept 100 и Perkin Elmer Owl, делают различие между напечатыванием и ненапечатыванием пробелов на экране, помещая на место вставляемого или уничтожаемого символа ненапечатанный пробел, который также высвечивается или расширяет их до двух пробелов. Вы можете отличать тип терминала, который вы имеете, путем чистки экрана, затем печатая текст, разделенный движением курсора.
Печатание abc def использует локальные перемещения курсора (не позиции) между abc и def. Тогда курсор помещается перед abc, и терминал устанавливается в режим вставки. Если печатание символов вызывает остаток строки к жесткому сдвигу, и символы отпадают, тогда ваш терминал не делает различия между пробелами и ненапечатанными пробелами порциями. Если "abc" сдвигается к def, которые потом вместе начинают двигаться к концу и затем на следующую вставленную строку, вы имеете второй тип терминала и должны использовать средство in, которое устанавливает для вставки нуль. Мы не знакомы с терминалами, у которых режим вставки не может быть описан ни в одном из этих двух классов.
Редактор может описывать как терминалы, которые имеют режим вставки, так и терминалы, посылающие простую последовательность, чтобы открыть пустую позицию в текущей строке. Чтобы войти в режим вставки, используйте последовательность im или присвойте ей пустое значение, если ваш терминал использует последовательность для вставки нулевой позиции. Чтобы выйти из режима вставки используется последовательность ei (выполните это с помощью нулевого значения, если вы также приписали его im). Теперь определим ic как последовательность, которая должна быть послана непосредственно перед посылкой символа, который должен быть вставлен. Большинство терминалов с настоящим режимом вставки не поддерживают ic, терминалы, которые посылают последовательность для открытия позиции экрана, должны ее выдавать. (Режим вставки предпочтительнее последовательности откытия позиции экрана, если ваш терминал имеет и то , и другое). Если требуется символ для последующего заполнения, задвайте его, как количество миллисекунд в ip (параметр строки). Любая другая последовательность, которую может понадобиться послать после вставки одного символа, может тоже задаваться в ip.
Иногда необходимо организовывать цикл в режиме вставки для удаления символов в одной строке (то есть, если имеется символ табуляции после вставляемой позиции). Если ваш терминал допускает перемещение в режиме вставки, вы можете задать средство mi для ускорения вставки в этом случае. Опускание mi будет влиять только на скорость. Некоторые терминалы (а именно Datamedia) не должны использовать mi из-за способа работы режима вставки.
Наконец, вы можете определить режим удаления символа заданием dm и ed для входа и выхода в режим удаления, idc для удаления одного символа в режиме удаления.
Повышенная яркость, подчеркивание и видимые сигналы
Если ваш терминал имеет последовательности на вход и выход в режим standout, они могут задаваться как so и se. Если существуют способы выделения изображения в standout (такие как инверсионное видео, мерцание или подчеркивание - половинная яркость обычно не допускается режимом standout, если только терминал не находится постоянно в режиме инверсионного видео), предпочтительным режимом является сам инверсионный видео. Допустимо, если хотя это может слегка спутать программы, этому нельзя помочь.
Коды для начала подчеркивания и конца подчеркивания могут задаваться как us, и ue соответственно. Если терминал имеет код подчеркивания текущего символа и сдвигает курсор на одну позицию вправо, такой как Microterm Mime, последовательность может задаваться как uc. (Если код подчеркивания не движет курсор вправо, определяйте код, так чтобы за ним следовал неразрушающий пробел.)
Если терминал обладает возможностью мерцания экрана для спокойного сообщения об ошибке (вместо звукового), последовательность может задаваться как vb; это не должно двигать курсор. Если терминал следует поместить в другой режим путем откытия и высвечивания ex, последовательность может задаваться как vs и ve, посылаемая в начале и в конце этих режимов соответственно. Это может быть использовано для изменения подчеркивания на курсор блока и обратно.
Если терминалу необходимо быть в специальном режиме во время выполнения программы, которая адресует курсор, коды входа и выхода в этот режим могут задаваться как ti и te. Это возникает для терминалов, подобных Concept c более, чем одной страницей памяти. Если терминал имеет только относительную адресацию памяти курсора, и не относительную адресацию курсора на экране, только одно окно размером с экран может быть фиксировано в терминале для правильной работы.
Если ваш терминал правильно генерирует подчеркнутые символы (без необходимости специальных кодов), даже если он не делает лишних ударов, вам нужно задать средство ul. Если повторные удары замещаются пробелами, это должно указываться определением eo.
Клавиатура
Если терминал имеет клавиатуру, которая передает коды при нажатии клавиш, эта информация должна быть задана. Отметим, что невозможно работать с терминалами, у которых клавиатура работает локально (это поддерживает, например, для несдигаемых клавиш HP 2621). Если клавиатура может быть установлена для передачи или не для передачи, то задавайте эти коды как ks и ke. В противном случае, клавиатура передает. Коды, посылаемые левой стрелкой, правой стрелкой, верхней и нижней стрелками и клавишей home, могут задаваться как kl, kr, ku, kd и kh. Если существуют функциональные клавиши, такие как f0, f1, ...,f9, коды, которые они посылают, могут задаваться как k0, k1,..., k9. Если эти клавиши имеют метки, отличные от принятых по умолчанию, от f0 до f9, метки могут задаваться как 2l0, l1,..., l9. Если несколько клавиш передают тот же самый код, который терминал ожидает от соответствующей функции, такие как очистить экран, 2х буквенный код termcap может быть задан в средстве ko, например, ':ko=cl,ll,sf,sb:', которое говорит о том, что терминал имеет клавиши стирания, помещения в исходное состояние, просмотрен вниз и вверх, которые передают то же самое, как cl, ll, sf и sb.
Вход ma используется для указания клавиш-стрелок, которые имеют один символ клавиш-стрелок. Это устарело, но все еще используется в версии 2 vi, которая должна выполняться на некоторых миникомпьютеров из-за увеличения памяти. Это поле излишне при наличии kl, kr, ku, kd и kh. Оно состоит из двухсимвольных групп. В каждой группе первый символ - это то, что клавиша-стрелка посылает, второй символ - соответствующая команда vi. Эти команды -h для kl, j для kd, k для ku, l для kr, и H для kh. Например, для Mime запись :ma=^Kj^Zk^Xl: указывает, что для клавишей стрелок указано следующее: левая (^H), нижняя (^K), верхняя (^Z) и правая (^X). (В Mime нет клавиши home).
Разное
Если терминал требует символ заполнения, отличный от нуля, он может задаваться как pc.
Если табуляция на экране требует заполнения, или если терминал использует символ табуляции, отличный от ^I, то последовательность может задаваться как ta.
Терминалы, которые не разрешают '~' для высвечивания, такие как Hazeltines, должны указывать hz. Datamedia терминалы, которые отражают возврат каретки и подачу строки для возврата каретки, и игнорируют последующую подачу листа, должы указываться nc. Ранние Concept терминалы, которые игнорируют подачу листа, немедленно после am перехода, должны задаваться как xn. Если требуется erase-eol для выхода из standout (вместо написания сверху), может задаваться как xs. Teleray терминалы, в которых символы табуляции заставляют все символы надвигаться на пробелы, должны задаваться как xt. Другие специфические проблемы терминалов могут быть решены посредством добавления других средств в виде xx.
Если руководящий символ для команд в терминале ( обычно символ escape) может установлен некоторой программой, то сам командный символ(ы) задается средством CC.
Другие средства включают is, строку инициализации для терминала и if, имя файла, содержащее длинные строки инициализации. Эти строки ожидаются для надлежащего стирания и помещения символа тябуляции на терминал. Если заданы оба средства, то is помещается перед if. Это полезно, если if /usr/lib/tabset/std, а is стирает в начале табуляцию.
Подобные терминалы
Если есть два подобных терминала, то один описывается также, как другой с некоторыми исключениями. Строковое средство tc может задаваться с именем подобного терминала. Это средство должно быть last, и комбинированная длина двух входов не должна превышать 1024. В то время как программы из termlib просматривают вход слева направо, и средства tc замещаются соответсвующим входом, то средство, заданное слева, замещает таковое в подобном терминале. Средство заканчивается xx@, где xx - данное средство. Например:
hh|2621nl:ks@:ke@:tc=2621
Это определяет 2621nl, который не имеет средств ks и kl и не включает метки функциональных клавиш в видимом режиме. Это полезно для различных режимов терминала или предпочтительнее для различных пользователей.
Расширения XENIX
Средства.
Эта таблица приводит список расширений XENIX (прежде описанный) для средств termcap. Оно показывает, какие коды генерируют ввод информации с клавиатуры в программу, считывающую содержимое клавиатуры, и какие коды генерируют вывод информации из программы на экран.
ИмяВвод/выводОписание
CF
str
Курсор из
CL
str
Посылается с помощью клавиши CHAR LEFT
CL
str
Курсор на
DA
bool
Удалить аттрибутивную строку
EN
str
Посылается с помощью клавиши END
G1
str
Верхний правый (1ый квадрант) угловой символ
G2
str
Верхний левый (2ой квадрант) угловой символ
G3
str
Нижний левый (3ий квадрант) угловой символ
G4
str
Нижний правый (4ый квадрант) угловой символ
GC
str
Центрирует графический символ (аналогично +)
GD
str
Символ нижнего кармана
GE
str
Конец графического режима
GG
num
Количество символов, забираемое GS и GE
GH
str
Горизонтальный штриховой символ
GL
str
Символ левого кармана
GR
str
Символ правого кармана
GS
str
Начало графического режима
GU
str
Символ верхнего кармана
GV
str
Вертикальный штриховой символ
HM
str
Посылается с помощью клавиши HOME(если нет kh)
MP
str
Многократная инициализация строки
MR
str
Многократный сброс строки
NU
str
Посылается клавишей NEXT UNLOCKED CELL
PD
str
Посылается клавишей PAGE DOWN
PU
str
Посылается клавишей PAGE UP
RC
str
Посылается клавишей RECALC
RF
str
Посылается клавишей TOGLE REFERENCE
RT
str
Посылается клавишей RETURN
UP
str
Посылается клавишей up-arrow (альтернативно ku)
WL
str
Посылается клавишей WORD LEFT
WR
str
Посылается клавишей WORD RIGHT
Движение курсора.
Некоторые прикладные программы используют специально редактирующие коды. CR и CL двигают курсор на один символ вправо и влево соответственно. WR и WL двигают курсор на одно слово вправо и влево соответственно. CW изменяет окна, если они используются в программе.
Некоторые программы отключают курсор. Это завершается использованием CF для выключения курсора и CO для включения в обратное состояние.
Графический режим.
Если терминал имеет графические средства, то этот режим может включаться и выключаться использованием GS и GE кодов. Некоторые терминалы генерируют графические символы со всех клавиш, находясь в графическом режиме (такие как Visual 50). Другие коды G определяют отдельные графические символы, которые доступны с помощью управляющих последовательностей. Эти символы присутсвуют на некоторых терминалах, как альтернативные наборы графических символов (не как в графическом режиме big-map). vt100 имеет доступ к таким альтернативным наборам графических символов, но не в графическом режиме big-map.
Кредит
Эта утилита была развита в Калифорнийском Университете Беркли и используется с позволения.
ПРИМЕЧАНИЯ
допускает только 256 символов для строковых возможностей, и программы в termcap(2) не делают проверку при переполнении этого буфера. Тотальная длина единственного входа (исключая только переходы на новую строку) не могут превышать 1024.
Входы ma, vs и ve определяются в программе .
Не все программы поддерживают все входы. Имеются входы, которые не поддерживаются никакой программой.
Расширения XENIX termcap детально разъясняются в программной документации.
Обращайтесь к ручной странице screen(HW) для описания символьных последовательностей, используемых мониторным устройством в вашей определенной системе XENIX.
Следующий список, выведенный из файла /etc/termcap, показывает имена терминалов (пригодных для использования переменной оболочки TERM) и короткое описание терминала. Консультация в будет помогать пользователям при создании вводов termcaр для терминалов, не поддерживающихся в настоящее время.
Terminfo - это скомпилированная база данных [см. ], описывающая характеристики терминалов. В исходных файлах terminfo задаются характеристики терминалов, описывается, как выполняются операции, какие требуются заполнители или инициализирующие последовательности. Эта база данных используется прикладными программами, например, редактором vi или пакетом , так что эти программы могут работать на различных терминалах без всяких изменений. Чтобы получить исходное описание терминала, следует воспользоваться утилитой с опцией -I.
Элементы исходных файлов terminfo состоят из полей, разделенных запятыми. Пробелы и табуляции после каждой запятой игнорируются. Первая строка каждого описания терминала в базе данных задает имена, по которым распознает терминал. Имена разделяются символами |. Первое имя задает наиболее часто используемое сокращение для терминала [именно это имя нужно использовать в качестве значения переменной TERM в $HOME/.profile, см. ], последнее имя длинное, полностью определяющее терминал, все остальные имена являются синонимами первого. Все имена, кроме последнего, не должны содержать пробелов и первые их 14 символов должны быть уникальными; в последнем имени для удобства допускаются пробелы.
Имена терминалов (кроме последнего) должны выбираться в соответствии со следующими соглашениями. Необходимо выбрать некоторое базовое имя, определяющее терминальное оборудование. Так, для терминала AT&T 4425 выбрано имя att4425. Режимы, в которых может находиться терминал, и режимы, которые предпочитают пользователи, обозначаются суффиксами, начинающимися с -. Примеры и более подробную информацию о выборе имен и синонимов можно найти в .
Характеристики
В описаниях, приведенных ниже, переменная - это имя, по которому программист, пишущий на языке C (на уровне terminfo), получает доступ к указанной характеристике. Сокращение - это короткое имя для этой переменной, используемое в тексте базы данных. Оно употребляется человеком, изменяющим базу данных, а также командой при опросе значения указанной характеристики для конкретного терминала. Код termcap - это двухсимвольный код, соответствующий базе данных termcap, которая раньше использовалась для тех же целей, что и terminfo.
Хотя длина имен, соответствующих характеристикам, не ограничена, имена, содержащие более 5 символов, не используются. Всюду, где возможно, имена совпадают или соответствуют тем, что предложены в стандарте ANSI X3.64-1979. Их семантика также соответствует указанному стандарту.
Для всех упомянутых в следующей таблице символьных характеристик (то есть характеристик, описываемых цепочками символов), кроме тех, которые используются для ввода, может быть указан заполнитель. Имена символьных характеристик ввода начинаются с key_. В описаниях некоторых характеристик могут встретиться пометки, имеющие следующий смысл:
(G) Означает, что цепочка символов передается через функцию tparm с указанными параметрами (#i). (*) Означает, что заполнитель зависит от количества затронутых строк. (#i) Обозначает i-й параметр.
Булевы характеристики:
Имя переменнойСокращениеКод termcapОписание
auto_left_margin
bw
bw
cub1 переводит курсор из колонки 0 в последнюю колонку
auto_right_margin
am
am
В терминале есть автоматические границы
beehive_glitch
xsb
xb
Терминал Beehive (f1=escape, f2=ctrl C)
ceol_standout_glitch
xhp
xs
Текст, выведенный в режиме сообщений, не очищается при повторном выводе в то же место (терминал hp)
eat_newline_glitch
xenl
xn
Перевод строки после 80 колонок игнорируется (терминал Concept)
erase_overstrike
eo
eo
Может зачищать надпечатку пробелом
generic_type
gn
gn
Тип терминала может меняться (например, коммутируемая или переключаемая линия)
hard_copy
hc
hc
Терминал - печатающее устройство
hard_cursor
chts
chts
Курсор трудно увидеть
has_meta_key
km
km
Есть ключ МЕТА (если нажат, устанавливается бит четности)
has_status_line
hs
hs
Имеется дополнительная служебная строка
insert_null_glitch
in
in
При режиме вставки распознаются пустоты
memory_above
da
da
В терминале запоминается информация, находящаяся выше экрана
memory_below
db
db
В терминале запоминается информация, находящаяся ниже экрана
move_insert_mode
mir
mi
Можно без опасений перемещаться в режиме вставки
move_standout_mode
msgr
ms
Можно без опасений перемещаться в режиме сообщений
needs_xon_xoff
nxon
nx
Заполнение не работает, требуется xon/xoff
non_rev_rmcup
nrrmc
NR
smcup не обратен rmcup
no_pad_char
npc
NP
Символ-заполнитель не существует
over_strike
os
os
Терминал может производить надпечатку
prtr_silent
mc5i
5i
Ввод не изображается на экране
status_line_esc_ok
eslok
es
В служебной строке может использоваться escape
teleray_glitch
xt
xt
Вывод символа табуляции портит терминал, не пользуйтесь smso (Терминал Teleray1061)
tilde_glitch
hz
hz
Терминал Hazeltine, нельзя выводить символы ~
transparent_underline
ul
ul
Символ _ производит надпечатку
xon_xoff
xon
xo
Терминал использует протокол xon/xoff
<
/p>
Числовые характеристики:
Имя переменнойСокращениеКод termcapОписание
columns
cols
co
Число колонок в строке
init_tabs
it
it
Шаг позиций табуляции
label_height
lh
lh
Количество строк в каждой метке
label_width
lw
lw
Количество колонок в каждой метке
lines
lines
li
Число строк на экране или странице
lines_of_memory
lm
lm
Число строк памяти, если > lines. 0 означает переменное число
magic_cookie_glitch
xmc
sg
Количество пустых символов, остающихся после smso или rmso
num_labels
nlab
Nl
Количество меток на экране (начиная с 1)
padding_baud_rate
pb
pb
Минимальная скорость обмена, для которой требуется заполнитель
virtual_terminal
vt
vt
Номер виртуального терминала
width_status_line
wsl
ws
Количество колонок в служебной строке
Символьные характеристики:
Имя переменнойСокращениеКод termcapОписание
acs_chars
acsc
ac
Пары символов из графического алфавита aAbBcC (по умолчанию =vt100+)
back_tab
cbt
bt
Обратная табуляция
bell
bel
bl
Звуковой сигнал
carriage_return
cr
cr
Возврат каретки (*)
change_scroll_region
csr
cs
Установить в качестве роллируемой области строки с #1 по #2 (vt100) (G)
char_padding
rmp
rP
Аналогично lp, но в режиме замены
clear_all_tabs
tbc
ct
Сбросить все позиции табуляции
clear_margins
mgc
MC
Сбросить левую и правую границы, установленные программно
clear_screen
clear
cl
Очистить экран и поместить курсор в начальную позицию (*)
clr_bol
el1
cb
Очистить начало строки, включительно
clr_eol
el
ce
Очистить конец строки
clr_eos
ed
cd
Очистить конец экрана (*)
column_address
hpa
ch
Установить горизонтальную позицию (в абсолютных координатах) (G)
command_character
cmdch
CC
Устанавливаемый в терминале символ-команда
cursor_address
cup
cm
Перемещение курсора в строку #1 колонку #2 (G)
cursor_down
cud1
do
Вниз на одну строку
cursor_home
home
ho
Курсор в начальную позицию (если нет cup)
cursor_invisible
civis
vi
Сделать курсор невидимым
cursor_left
cub1
le
Курсор влево на один шаг
cursor_mem_address
mrcup
CM
Адресация курсора относительно памяти
cursor_normal
cnorm
ve
Сделать курсор нормальным (отменить vs/vi)
cursor_right
cuf1
nd
Неразрушающий пробел (курсор вправо)
cursor_to_ll
ll
ll
Последняя строка, первая колонка (если нет cup)
cursor_up
cuu1
up
Предыдущая строка (курсор вверх)
cursor_visible
cvvis
vs
Сделать курсор очень хорошо видимым
delete_character
dch1
dc
Удалить символ (*)
delete_line
dl1
dl
Удалить строку (*)
dis_status_line
dsl
ds
Отменить служебную строку
down_half_line
hd
hd
На полстроки вниз
ena_acs
enacs
aA
Разрешить использование дополнительного алфавита
enter_alt_charset_mode
smacs
as
Перейти к дополнительному алфавиту
enter_am_mode
smam
SA
Включить автоматические границы
enter_blink_mode
blink
mb
Включить мерцание
enter_bold_mode
bold
md
Включить режим выделенных символов
enter_ca_mode
smcup
ti
Начальная цепочка для программ, использующих cup
enter_delete_mode
smdc
dm
Войти в режим удаления
enter_dim_mode
dim
mh
Включить пониженную яркость
enter_insert_mode
smir
im
Войти в режим вставки
enter_protected_mode
prot
mp
Войти в защищенный режим
enter_reverse_mode
rev
mr
Войти в режим инверсии
enter_secure_mode
invis
mk
Войти в режим, в котором не изображаются выводимые символы
enter_standout_mode
smso
so
Войти в режим сообщений
enter_underline_mode
smul
us
Войти в режим подчеркивания
enter_xon_mode
smxon
SX
Включить xon/xoff протокол
erase_chars
ech
ec
Удалить #1 символов (G)
exit_alt_charset_mode
rmacs
ae
Вернуться из дополнительного алфавита
exit_attribute_mode
sgr0
me
Выключить все атрибуты
exit_ca_mode
rmcup
te
Завершающая цепочка для программ, использующих cup
exit_delete_mode
rmdc
ed
Выйти из режима удаления
exit_insert_mode
rmir
ei
Выйти из режима вставки
exit_standout_mode
rmso
se
Выйти из режима сообщений
exit_underline_mode
rmul
ue
Выйти из режима подчеркивания
exit_xon_mode
rmxon
RX
Выключить xon/xoff протокол
flash_screen
flash
vb
Видимый звонок (может не перемещать курсор)
form_feed
ff
ff
Прогон страницы в терминале-принтере (*)
from_status_line
fsl
fs
Возврат из служебной строки
init_1string
is1
i1
Первая цепочка инициализации терминала
init_2string
is2
i2
Вторая цепочка инициализации терминала
init_3string
is3
i3
Третья цепочка инициализации терминала
init_file
if
if
Имя файла, содержащего цепочку инициализации терминала
init_prog
iprog
iP
Имя программы, производящей инициализацию терминала
insert_character
ich1
ic
Вставить символ
insert_line
il1
al
Вставить пустую строку (*)
insert_padding
ip
ip
Вывести заполнитель после вставки символа (*)
key_a1
ka1
K1
KEY_A1, 0534, слева вверху на дополнительной клавиатуре
key_a3
ka3
K3
KEY_A3, 0535, справа вверху на дополнительной клавиатуре
key_b2
kb2
K2
KEY_B2, 0536, в центре клавиатуры
key_backspace
kbs
kb
KEY_BACKSPACE, 0407, посылается клавишей "забой"
key_beg
kbeg
@1
KEY_BEG, 0542, посылается клавишей BEG
key_btab
kcbt
kB
KEY_BTAB, 0541, посылается клавишей BTAB
key_c1
kc1
K4
KEY_C1, 0537, слева внизу на дополнительной клавиатуре
key_c3
kc3
K5
KEY_C3, 0540, справа внизу на дополнительной клавиатуре
key_cancel
kcan
@2
KEY_CANCEL, 0543, посылается клавишей CANCEL
key_catab
ktbc
ka
KEY_CATAB, 0526, посылается клавишей "очистка всех табуляций"
Элементы могут располагаться на нескольких строках, каждая строка, кроме первой, должна начинаться с пробела. Строки, начинающиеся с символа #, считаются комментариями.
Типы характеристик
Характеристики terminfo бывают трех типов: булевы, означающие, что терминал имеет соответствующую возможность, числовые, обычно используемые для задания размеров, и символьные, задающие последовательность кодов, которую нужно послать на терминал, чтобы выполнить соответствующее действие.
Все характеристики имеют имена. Например, то, что терминал Concept имеет автоматические границы (то есть при достижении конца строки автоматически выполняется возврат каретки и перевод строки), отражается характеристикой am. За числовыми характеристиками следует знак # и числовое значение, например, для терминала Concept, cols#80 задает число колонок, равное 80. Числовое значение может быть записано как десятичное, восьмеричное или шестнадцатеричное, в соответствии с соглашениями, принятыми в языке C.
Наконец, символьные характеристики, например el ( последовательность кодов для очистки конца строки), задаются именем (от двух до пяти символов), за которыми следует знак = и цепочка символов, завершающаяся запятой. В любом месте внутри цепочки символов может встречаться задержка в миллисекундах, заключенная в "скобки" $<...>. Например, задержка el=\EK$<3> обеспечивается процедурой tputs [см. ] путем посылки символов-заполнителей. Задержка может задаваться числом, например 20, или числом, за которым следует символ * (например, 3*), символ / (например, 5/) или оба символа (например, 10*/ ). Символ * означает, что задержка пропорциональна количеству строк, вовлеченных в операцию, при этом для каждой строки задержка равна указанной (заметим, что для операции вставки символа число вовлеченных строк всегда равно 1). При использовании * можно задавать задержку с точностью до 0.1 миллисекунды (с одним знаком после десятичной точки, например 3.5*). Символ / означает, что задержка обязательна. В противном случае, если терминал поддерживает xon/xoff протокол (характеристика xon), задержка не обязательна и будет использоваться только для оценки сложности операции, а также при двоичном режиме передачи. Обязательная задержка выполняется всегда, независимо от значения характеристики xon.
Для удобства записи управляющих последовательностей применяются следующие соглашения. Последовательности \E и \e обозначают символ ESCAPE (код ASCII 033), ^x обозначает CTRL+x для всех допустимых x, а последовательности \n, \l, \r, \t, \b, \f и \s представляют соответственно перевод строки, переход к новой строке, возврат каретки, горизонтальную табуляцию, возврат на шаг, "переход к новой странице и пробел. Дополнительно имеются следующие последовательности: \^ представляет ^, \\ представляет \, \, представляет запятую, \: представляет :, \0 представляет пустой символ (на самом деле \0 порождает символ \200, который не является терминатором строки и действует на большинстве терминалов, как пустой символ). Наконец, символы можно задавать трехзначным восьмеричным числом после знака \ (например, \123).
Иногда бывает необходимо временно удалить некоторые характеристики. Для этого перед именем характеристики помещается точка (см. в примере выше второе вхождение ind). Заметим, что характеристики обрабатываются слева направо, и используются первые встреченные значения.
Подготовка описаний
Наиболее эффективный путь подготовки описания нового терминала - выбрать из базы данных terminfo описание похожего терминала, а затем постепенно исправлять его, каждый раз проверяя исправления запуском редактора vi. Для проверки нового описания установите переменной окружения TERMINFO значение, равное имени каталога, где хранится скомпилированное новое описание, после этого все программы будут использовать новое описание вместо стандартного. Для определения необходимой задержки при вставке строки (если она не указана производителем оборудования) можно рекомендовать следующий тест. Закомментируйте в описании характеристику xon, войдите редактором vi в большой файл, удалите 16 строк, находясь на середине экрана, и затем быстро несколько раз нажмите клавишу u. Если экран испортился, то требуется б яльшая задержка. Аналогичный тест можно использоваться и для вставки символа.
Заметим, что если Ваш терминал чересчур необычен, Вы можете столкнуться с тем, что возможностей описания его характеристик в terminfo недостаточно, и заставить работать с ним редактор vi невозможно.
Основные характеристики
Количество колонок в каждой строке терминала задается числовой характеристикой cols. Если у терминала есть экран, число строк на нем задается числовой характеристикой lines. Если терминал переводит строку при достижении правой границы, ему нужно приписать булеву характеристику am. Если терминал может очистить экран, помещая курсор в начальную позицию, следует задать символьную характеристику clear. Если терминал при выводе одного символа поверх другого производит не замену, а надпечатку, должна быть указана булева характеристика os. Если терминал является печатающим устройством, нужно указать одновременно булевы характеристики hc и os. (Характеристика os применяется к терминалам типа Tektronix 4010, печатающим устройствам и терминалам, поддерживающим символы языка APL.) Если существует код, помещающий курсор на левую границу текущей строки, укажите его в символьной характеристике cr (обычно это код CTRL+M, возврат каретки). Если существует код, производящий звуковой сигнал, укажите его в символьной характеристике bel. Если терминал, как большинство терминалов, поддерживает протокол xon/xoff, укажите булеву характеристику xon.
Если существует код, перемещающий курсор на одну позицию влево (обычно это CTRL+H, возврат на шаг), укажите его в символьной характеристике cub1. Аналогично, коды, перемещающие курсор вправо, вверх и вниз задаются в характеристиках cuf1, cuu1 и cud1. Эти локальные перемещения курсора не должны изменять текст, через который проходит курсор. Например, обычно нельзя использовать cuf1=\s, поскольку пробел стирает символ, находящийся в текущей позиции.
Важно отметить, что локальные перемещения курсора нельзя применять, если курсор находится на верхнем или левом краю экрана. Если терминал не обладает характеристикой bw, программа не должна пытаться сдвинуть курсор влево из самой левой позиции. Нельзя также пытаться переместиться вверх из самой верхней строки.
Для того, чтобы сдвинуть текст вверх, необходимо переместиться в левый нижний угол экрана и послать на терминал цепочку символов, заданную в характеристике ind. Для того, чтобы сдвинуть текст вниз, необходимо переместиться в левый верхний угол экрана и послать цепочку, заданную в характеристике ri. Если курсор не находится в указанных позициях, цепочки ind и ri применять нельзя. Существуют также параметризованные характеристики indn и rin, которые отличаются от характеристик ind и ri только тем, что у них есть один параметр, задающий число строк, на которое необходимо сдвинуться. Параметризованные характеристики можно применять только в указанных позициях.
Хотя наличие булевой характеристики am свидетельствует о том, что терминал автоматически переводит курсор на следующую строку при достижении последней колонки, это не обязательно верно для сдвига вправо (cuf1) из последней колонки. Единственное допустимое локальное перемещение, когда курсор находится на границе экрана - это cub1 на левой границе, если терминал обладает характеристикой bw, при этом курсор перемещается на правую границу предыдущей строки, что удобно, например, использовать для рисования рамки по границе экрана. Однако, если терминал не обладает характеристикой bw, эффект перемещения влево с левой границы не определен. Если на терминале есть переключатель, включающий и выключающий автоматические границы, в базе данных terminfo предполагается, что он находится в положении "включено". Если у терминала есть команда, переводящая курсор в первую колонку следующей строки, она задается в символьной характеристике nel.
Упомянутых возможностей достаточно для описания как печатающий устройств, так и дисплеев. Например, телетайп (модель 33) описывается следующим образом:
Цепочки символов, служащие для адресации курсора, а также другие цепочки, требующие параметров, задаются с помощью так называемых параметризованных цепочек, содержащих команды, по типу форматных цепочек в . Например, для позиционирования курсора существует характеристика cup, которой требуются два параметра: номер строки и номер колонки. (Строки и колонки нумеруются с нуля и представляют физический экран, видимый пользователю, они не относятся к скрытой, невидимой пользователю дисплейной памяти.) Если терминал допускает относительную адресацию курсора, это отражается в характеристике mrcup.
Механизм разбора параметризованных цепочек символов использует стек и специальные команды (начинающиеся со знака %), манипулирующие стеком. Параметризованные цепочки при этом похожи на программу для калькулятора в обратной польской записи. Обычно вначале параметры загружаются в стек, а затем извлекаются из него с преобразованием в определенный формат. Часто требуются более сложные операции. Бинарные операции записываются в постфикстной форме с традиционным порядком операндов. Так, например, вычитание пятерки из значения x записывается как %gx%{5}%-.
В параметризованных цепочках допустимы следующие команды [pop() обозначает извлечение верхнего элемента стека, push(аргумент) - добавление своего аргумента в стек]:
%%
вывести символ %
%[[:]флаги][ширина[.точность]][doxXs]
вывести pop() в формате, аналогичном , в качестве флагов можно указать [-+#] и пробел.
%c
вывести pop() в формате %c
%p[1-9]
push(i-й аргумент)
%P[a-z]
присвоить переменной [a-z] значение pop()
%g[a-z]
push(значение переменной [a-z])
%'c'
push(символьная константа c)
%{nn}
push(десятичная константа nn)
%l
push(strlen(pop()))
%+ %- %* %/ %m
выполнить соответствующую арифметическую операцию (%m - взятие по модулю): push(pop() операция pop())
%& %| %^
выполнить соответствующую битную операцию: push(pop() операция pop())
%= %> %<
выполнить соответствующую логическую операцию: push(pop() операция pop())
%A %O
логические операции И и ИЛИ
%! %~
унарные операции: push( операция pop())
%i
добавить 1 к первому параметру, если он один, и к первым двум параметрам, если их более одного (используется для ANSI терминалов)
%? выражение %t то %e иначе %;
если-то-иначе, часть %e иначе может быть опущена. Допустимы конструкции иначе-если с синтаксисом в духе Алгола 68: %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e b4 %; где ci - условия, bi - тела
<
/p>
Если в команде %[doxXs] используются флаги - или +, необходимо перед ними поставить :, чтобы было отличие от команд %- и %+, например %:-16.16s.
Рассмотрим несколько примеров.
На терминале Hewlett-Packard 2645 для того, чтобы поместить курсор в 3-ю строку 12-ю колонку требуется вывести последовательность \E&a12c03Y с задержкой 6 миллисекунд. Обратите внимание, что порядок номеров строки и колонки обратный, причем номер дополняется слева нулем до двух цифр. В этом случае описание характеристики cup будет иметь вид cup=\E&a%p2%2.2dc%p1%2.2dY$<6>.
На терминале Micro-Term ACT-IV требуется, чтобы номеру строки и колонки предшествовал символ ^T, номера строки и колонки задаются в двоичном виде, таким образом, cup=^T%p1%c%p2%c. Терминалы, в которых используется %c должны иметь возможности сдвинуть курсор на шаг влево и на шаг вверх (cub1 и cuu1), так как не всегда безопасно выводить на терминал коды \n, ^D и \r, система может их неправильно интерпретировать или проигнорировать (что касается табуляции \t, библиотечные подпрограммы, работающие с terminfo, всегда устанавливают характеристики терминала так, что табуляции не заменяются на пробелы, поэтому посылать на терминал табуляции можно без опасений).
Последний пример относится к терминалу LSI ADM-3a, в котором к адресу строки и колонки прибавляется код пробела, то есть cup=\E=%p1%'\s'%+%c%p2%'\s'%+%c. После вывода двух символов \E= в стек помещается первый параметр, затем туда же кладется код пробела (32), затем сумма замещает два верхних элемента стека, после чего она выводится в двоичном виде. После этого то же самое повторяется со вторым параметром.
Перемещения курсора
Если терминал может быстро перемещать курсор в левый верхний угол экрана, эта возможность задается характеристикой home. Аналогично, быстрый способ перемещения в левый нижний угол задается характеристикой ll. Часто для этого используется перемещение на единицу вверх из левого верхнего угла, однако, как это уже отмечалась, в программе не следует делать предположения относительно эффектов локальных перемещений на границах экрана. Заметим, что перемещение в левый верхний угол экрана эквивалентно перемещению по адресу (0,0) без изменения привязки экрана к дисплейной памяти (если дисплейная память превышает по размерам экран). Например на терминалах Hewlett-Packard в качестве характеристики home нельзя использовать \EH.
Если у терминала есть возможности абсолютной установки строки или колонки, адреса задаются однопараметрическими характеристиками hpa (горизонтальное позиционирование) и vpa (вертикальное позиционирование). Иногда это бывает короче универсального двухпараметрического позиционирования (например, для терминала Hewlett-Packard 2645) и используется вместо cup. Если имеются параметризованные локальные перемещения (например, переместиться на n позиций вправо), они задаются однопараметрическими характеристиками cud, cub, cuf и cuu, что используется на терминалах, не имеющих характеристики cup, например Tektronix 4025.
Очистка областей
Если терминал может очистить конец текущей строки, оставив курсор на прежнем месте, это задается характеристикой el. Если терминал может очистить начало текущей строки до позиции курсора включительно, это задается характеристикой el1. Если терминал может очистить строки, начиная с текущей и до конца экрана, это задается характеристикой ed, которой можно пользоваться, только если курсор находится в первой колонке. Таким образом, очистка конца экрана может быть проэмулирована удалением большого числа строк.
Удаление/вставка строк
Если терминал может вставить пустую строку перед текущей, это задается характеристикой il1, которой можно пользоваться, только если курсор находится в первой колонке. Курсор при этом должен оказаться на только что вставленной строке. Если терминал может удалить текущую строку, это задается характеристикой dl1, которой можно пользоваться, только если курсор находится в первой колонке удаляемой строки. Версии характеристик il1 и dl1, принимающие в качестве параметра число удаляемых или вставляемых строк, задаются, как характеристики il и dl.
Если терминал может устанавливать область роллирования с разрушением (как, например, терминал VT100), соответствующая команда описывается характеристикой csr, которая имеет 2 параметра: верхняя и нижняя строки области роллирования. К сожалению, после выполнения этой команды позиция курсора оказывается неопределенной. С помощью этой команды можно добиться эффекта удаления или вставки строки, рекомендуется при этом пользоваться командами sc и rc (запомнить позицию курсора и восстановить ее). Вставка строк на границах экрана удобнее выполнять командами ri и ind, в том числе и на тех терминалах, которые могут вставлять и удалять строки в любом месте.
Некоторые терминалы могут устанавливать область роллирования без разрушения. Чтобы определить, к какому типу относится Ваш терминал, создайте область роллирования в середине экрана, поместите данные в нижнюю строку области роллирования и выполните команду ri, за которой dl1 или ind. Если данные из нижней строки, исчезнувшие после команды ri, восстановились на экране после команды dl1 или ind, значит Ваш терминал устанавливает область роллирования без разрушения. В этом случае указывать характеристику csr нельзя.
Если терминал может определять окно, как часть дисплейной памяти, к которой относятся команды, это задается характеристикой wind, которая имеет четыре параметра: начальная и конечная строки памяти, начальная и конечная колонки памяти, в указанном порядке.
Если терминал может использовать дисплейную память ниже экрана, это задается булевой характеристикой db, возможность использования дисплейной памяти выше экрана задается булевой характеристикой da. Это означает, что удаление строки или роллирование экрана может привести к появлению непустой строки внизу или роллирование с помощью ri может привести к появлению непустой строки вверху.
Удаление/вставка символов
Существует два способа удаления/вставки символов, которые могут быть описаны в terminfo. Чаще всего, удаление и вставка символов приводит к сдвигу всего конца текущей строки. Однако есть терминалы, например Concept 100 или Perkin Elmer Owl, которые различают выведенные на экран пробелы и места, куда ничто не было выведено (пустоты). При этом при вставке и удалении символов сдвиг затрагивает только пустоты, которые либо удаляются с экрана, либо заменяются на два пустых символа. Вы можете определить к какому типу относится Ваш терминал, очистив экран и напечатав несколько символов вперемежку с перемещением курсора. Напечатайте abc def, используя между словами не пробел, а перемещение курсора. Затем поместите курсор перед abc и переведите терминал в режим вставки. Если последующий ввод символов приводит к сдвигу строки целиком, а символы, выходящие за край экрана пропадают, то Ваш терминал не различает пробелы и пустоты. Если abc вначале пододвигается к def, а затем они вместе движутся к краю экрана и переходят на следующую строку, то Ваш терминал относится ко второму типу, и для него должна быть задана булева характеристика in. Хотя логически переход символов на следующую строку и специальная обработка пустот представляют собой разные вещи, в terminfo используется одна характеристика, поскольку нам не встречался терминал, ведущий себя иначе, чем описано выше.
В terminfo можно описать как терминалы, у которых имеется режим вставки, так и терминалы, требующие специальной команды для освобождения пустого места перед выводом символа. В характеристике smir задается команда для перевода терминала в режим вставки. В характеристике rmir задается команда для вывода терминала из режима вставки. В характеристике ich1 задается последовательность, которую нужно послать перед выводом вставляемого символа. Большинство терминалов, имеющих режим вставки, не имеют команды ich1. (Если Ваш терминал имеет обе возможности, предпочтительнее использовать режим вставки. При этом не следует, без необходимости, задавать характеристику ich1.) Если при вставке символов требуется задержка, она задается в символьной характеристике ip. В характеристике ip можно также задать последовательность, которая должна быть послана на терминал после вставки одного символа. Если Ваш терминал требует одновременного включения режима вставки и использования специального кода, освобождающего место для вставляемого символа, следует указать обе характеристики (smir/ rmir и ich1), и обе они будут использованы. Характеристика ich с одним параметром n повторяет эффект ich1 n раз.
Если требуется задержка между выводом символов не в режиме вставки, она задается в характеристике rmp.
Иногда при удалении символа в текущей строке возникает необходимость в перемещении курсора (например, если удаляется символ табуляции). Если Ваш терминал позволяет перемещать курсор в режиме вставки, укажите булеву характеристику mir. Если характеристика mir не указана, выполнение операции будет чуть медленнее. Для некоторых терминалов (например, Datamedia) из-за специфических свойств режима вставки указывать mir нельзя.
Для удаления символов указываются следующие характеристики: dch1 для удаления одного символа, dch для удаления n символов, smdc и rmdc для входа и выхода из режима удаления (состояния терминала, при котором правильно работает команда dch1).
Команда для очистки n символов (эквивалентная выводу n пробелов без перемещения курсора) задается характеристикой ech, имеющей один параметр.
Яркость, подчеркивание и другие визуальные эффекты
Если Ваш терминал имеет различные возможности визуализации, воспользоваться ими можно по-разному. Вы можете выбрать определенный режим, такой как режим сообщений [см. ], в котором символы изображаются ярко, контрастно, и использовать его для вывода сообщений об ошибках и других сообщений, привлекающих внимание. (Если у Вас есть выбор, хорошим вариантом является инверсия пониженной яркости или просто инверсия, хотя разные пользователи на разных терминалах имеют различные предпочтения.) Последовательности для входа в режим сообщений и выхода из него задаются в характеристиках smso и rmso соответственно. Если последовательность, переводящая в режим сообщений или выводящая из него, оставляет на экране один или два пробела, как это происходит с терминалами TVI 912 и Teleray 1061, в числовой характеристике xmc задается это число.
Коды, необходимые для начала и завершения подчеркивания, задаются в характеристиках smul и rmul соответственно. Если терминал может подчеркнуть текущий символ, передвинув при этом курсор на шаг вправо, как например терминал Micro-Term MIME, это задается характеристикой uc.
Другие визуальные эффекты включают в себя: blink (мерцающие символы), bold (выделенные - жирные или более яркие символы), dim (символы пониженной яркости), invis (невидимые символы), prot (защищенные символы), rev (инвертированные символы), sgr0 (выключить все атрибуты), smacs (перейти к альтернативному набору символов) и rmacs (выйти из альтернативного набора символов). Включение одного из этих режимов может повлиять (а может и не повлиять) на установку остальных режимов. Если перед переходом к альтернативному набору символов требуется выполнить какие-то команды, они задаются в характеристике enacs.
Если существует последовательность, устанавливающая набор атрибутов, она задается характеристикой sgr, имеющей девять параметров. Каждый параметр может быть нулем или не нулем, в зависимости от того, выключается соответствующий атрибут или включается. Девять параметров задаются в следующем порядке: режим сообщений, подчеркивание, инверсия, мерцание, пониженная яркость, выделение, невидимые символы, защита, альтернативный набор символов. В sgr не обязательно поддерживать все режимы, достаточно тех, для которых существует соответствующая команда (см. пример в конце настоящего описания).
Терминалы с характеристикой xmc при получении последовательностей, переключающих режимы, выдают на экран всякий мусор. Некоторые терминалы, например, Hewlett Packard 2621, автоматически выходят из режима сообщений при переходе на новую строку или адресации курсора. Программы, использующие режим сообщений, должны выйти из него прежде, чем адресовать курсор или переходить на новую строку, если только не задана характеристика msgr, говорящая о том, что перемещаться в режиме сообщений можно без опаски.
Если терминал обладает способностью беззвучной сигнализации об ошибке, она задается в характеристике flash, при этом курсор перемещаться не должен. Хорошим беззвучным сообщением является инвертирование всего экрана, задержка 200 мс и восстановление нормального изображения на экране.
Если существует возможность сделать курсор более заметным, чем обычно (например, блок или мерцающее подчеркивание вместо немерцающего подчеркивания), эта последовательность задается в характеристике cvvis, при этом необходимо задать булеву характеристику chts. Возможность сделать курсор абсолютно невидимым задается характеристикой civis. Характеристика cnorm задает последовательность, возвращающую курсор в обычное состояние.
Если требуется, чтобы для использования команд адресации терминал находился в определенном состоянии, коды для перехода к этому состоянию и выхода из него задаются характеристиками smcup и rmcup. Это нужно, например, для терминала Concept, который имеет несколько страниц памяти. Поскольку адресация курсора ведется относительно памяти, а не экрана, чтобы адресация работала, необходимо правильно привязать экран к памяти. Эти характеристики используются также для терминала Tektronix 4025, для которого smcup устанавливает командный символ. Если smcup после rmcup не восстанавливает полностью состояние до rmcup, необходимо указать булеву характеристику nrrmc.
Если на Вашем терминале подчеркивание получается путем вывода символа подчеркивания, даже если в других случаях вывода одного символа поверх другого надпечатки не происходит, то необходимо указать булеву характеристику ul. Для терминалов, на которых вывод одного символа поверх другого производит надпечатку, задайте булеву характеристику os. Если при надпечатке пробелом можно стереть символ, задайте характеристику eo.
Пример задания визуальных эффектов: пусть рассматриваемый терминал требует следующих последовательностей для включения режимов:
ПараметрАтрибутПоследовательность
нет
\E[0m
p1
сообщение
\E[0;4;7m
p2
подчеркивание
\E[0;3m
p3
инверсия
\E[0;4m
p4
мерцание
\E[0;5m
p5
пониж.яркость
\E[0;7m
p6
выделение
\E[0;3;4m
p7
невидимость
\E[0;8m
p8
защита
отсутствует
p9
альтерн.набор
^O (выкл) ^N (вкл)
Обратите внимание, что указанные последовательности вначале выключают все режимы, а затем включают нужный. Заметьте также, что режим сообщений, как было рекомендовано выше, включает инверсию пониженной яркости. Поскольку терминал не имеет выделенного режима, выделение реализуется подчеркиванием и инверсией. Наконец, для комбинации атрибутов, например, подчеркивание + мерцание, используется следующая последовательность: \E[0;3;5m. У терминала нет защищенного режима и его никак нельзя проэмулировать, поэтому p8 игнорируется. Работа с альтернативным набором переключается символами ^O и ^N. Чтобы включить все режимы, необходимо послать следующую последовательность: \E[0;3;4;5;7;8m^N.
Теперь посмотрим, как выводятся различные последовательности. Например, ;3 выводится, если истинно p2 или p6, то есть включается режим подчеркивания или выделения. Выписывание последовательностей и их зависимостей дает следующее:
Последоват.Когда выводитьВ виде terminfo
\E[0
всегда
\E[0
;3
если p2 или p6
%?%p2%p6%|%t;3%;
;4
если p1 или p3 или p6
%?%p1%p3%|%p6%|%t;4%;
;5
если p4
%?%p4%t;5%;
;7
если p1 или p5
%?%p1%p5%|%t;7%;
;8
если p7
%?%p7%t;8%;
m
всегда
m
^N или ^O если p9 ^N иначе ^O %?%p9%t^N%e^O%;
Записывая все это в одну последовательность, получаем:
В terminfo можно записать информацию о кодах, которые посылает в компьютер клавиатура терминала при нажатии клавиш. Некоторые терминалы не посылают кодов в компьютер, нажатие клавиш изображается только на экране, например, терминал Hewlett-Packard 2621. Если командами можно заставить терминал посылать или не посылать коды при нажатии клавиш, эти команды указываются в характеристиках smkx и rmkx. В противном случае считается, что клавиши всегда посылают коды. С терминалами, которые никогда не посылают кодов, работать невозможно.
Коды, которые посылаются стрелками влево, вправо, вверх и вниз и клавишей HOME, задаются характеристиками kcub1, kcuf1, kcuu1, kcud1 и khome соответственно. Если на клавиатуре имеются клавиши f0, f1, f2, ..., f63, посылаемые ими коды задаются характеристиками kf0, kf1, kf2, ..., kf63. Если надписи на первых 11 клавишах не f0, ..., f10, их можно задать характеристиками lf0, lf1, ..., lf10. Можно также задать коды, посылаемые некоторыми другими клавишами: kll (в левый нижний угол), kbs (возврат на шаг), ktbc (очистка всех табуляций), kctab (очистить точку останова табуляции), kclr (очистка экрана), kdch1 (удалить символ), kdl1 (удалить строку), krmir (войти в режим вставки), kel (очистить конец строки), ked (очистить конец экрана), kich1 (вставить символ или войти в режим ставки), kil1 (вставить строку), knp (следующая страница), kpp (предыдущая страница), kind (роллирование вперед), kri (роллирование назад), khts (установить точку останова табуляции). В дополнение, если на клавиатуре есть область из 9 клавиш (3x3), включающая в себя стрелки, то остальные 5 клавиш могут быть заданы, как ka1, ka3, kb2, kc1 и kc3. Эти клавиши обычно используется, когда необходимо отслеживать расположение нажимаемых клавиш на клавиатуре. Выше в списке характеристик перечислен дополнительно целый ряд клавиш, которые также могут быть заданы.
Цепочки символов для программирования функциональных клавиш задаются характеристиками pfkey, pfloc и pfx. Цепочки для программирования изображаемых надписей задаются характеристикой pln. Каждая из этих характеристик имеет два параметра: номер клавиши, которую нужно запрограммировать (от 0 до 10) и программирующую цепочку. Если указанный номер клавиши больше 10, результат не определен, для некоторых терминалов при этом может запрограммироваться какая-нибудь дополнительная клавиша. Характеристика pfkey приводит к тому, что эффект от нажатия клавиши эквивалентен указанной цепочке, характеристика pfloc заставляет терминал при нажатии клавиши выполнять указанные операции в локальном режиме, характеристика pfx приводит к посылке указанной последовательности в компьютер. Характеристики nlab, lw и lh задают число программируемых надписей, их ширину и высоту. Если имеются команды включения и выключения программируемых надписей, они задаются характеристиками smln и rmln. Обычно smln выводят после вывода нескольких pln, чтобы быть уверенными, что надписи видны.
Табуляции и инициализация
Если терминал поддерживает точки останова табуляции, то команда, которая перемещает курсор до следующей точки останова табуляции, задается характеристикой ht (обычно это CTRL+I). Команда, перемещающая курсор к предыдущей точке останова табуляции, задается характеристикой cbt. Если характеристики линии установлены так, что драйвер заменяет табуляции на соответствующее число пробелов, а не посылает их напрямую на терминал, программы не должны использовать ht и cbt, даже если они присутствуют, поскольку у пользователя позиции табуляции могут быть установлены не так. Если терминал поддерживает точки останова табуляции, которые при инициализации устанавливаются в каждую n-ю позицию, параметр n задается числовой характеристикой it. Это используется командой tput init [см. ] для определения того, нужно ли устанавливать замену табуляций на пробелы и где установить точки останова табуляции. Если терминал может сохранять установку позиций табуляции и при выключении питания, в описании terminfo считается, что они установлены правильно. Если имеются команды установки и очистки позиций табуляции, они задаются характеристиками tbc (очистить все позиции табуляции) и hts (установить позицию табуляции в текущую колонку каждой строки).
Кроме того, имеются следующие характеристики: is1, is2 и is3, инициализирующие цепочки символов для терминала, iprog, имя программы, инициализирующей терминал, и if, имя файла, содержащего длинную цепочку для инициализации. Предполагается, что эти цепочки устанавливают терминал в состояние, соответствующее дальнейшему описанию в terminfo. Они должны посылаться на терминал в следующем порядке: запустить программу iprog, вывести is1, вывести is2, установить границы с помощью mgc, smgl и smgr, установить табуляции с помощью tbc и hts, вывести файл if, и, наконец, вывести is3. Обычно именно это делается командой tput init [см. , ].
Большинство инициализаций выполняется с помощью is2. Специальные режимы терминалов могут быть установлены без дублирования цепочек символов с помощью общей для всех последовательности is2 и специальных is1 и is3. Последовательности, которые переводят терминал в начальное состояние из абсолютно любого, задаются характеристиками rs1, rs2, rf и rs3 (аналогично is1, is2, if и is3). (Некоторые описания используют характеристики if и rf с файлами из /usr/lib/tabset/*, однако рекомендуется использовать цепочки инициализации.) Характеристики rs1, rs2, rf и rs3 выводятся командой tput reset, которая используется для выведения терминала из непонятного состояния. Команды помещаются в rs1, rs2, rf и rs3 только если они производят неприятный эффект на экране и при нормальной работе не требуются. Например, команду, переводящую терминал в режим 80 колонок, можно поместить в is2, но на некоторых терминалах она приводит к неприятным эффектам на экране, и к тому же обычно не требуется, так как терминал и так находится в режиме 80 колонок.
Если для установки позиций табуляций требуются действия более сложные, чем просто использование tbc и hts, необходимая последовательность помещается в is2 или if.
Задержки
Некоторые характеристики управляют задержками в драйвере . Обычно это требуется для печатающих устройств и используется командой tput init для правильной установки характеристик в драйвере. Задержки, указанные в характеристиках cr, ind, cub1, ff и tab, могут использоваться для установки соответствующих бит задержки в драйвере tty. Если указана характеристика pb (минимальная скорость для применения задержки), то при скоростях ниже указанной задержка не применяется.
Служебные строки
В terminfo можно занести информацию о том, что у терминала есть дополнительная служебная строка, которая обычно не используется программами. Если это нижняя строка экрана, которая обычным образом адресуется (например, 25-я строка терминала Heathkit h19 или 24-я строка терминала vt100, в котором установлена 23-строчная область роллирования), необходимо задать характеристику hs. Специальные команды, перемещающие курсор в заданную позицию служебной строки и возвращающие курсор обратно, задаются характеристиками tsl и fsl. (fsl должна оставлять курсор в том же месте, в каком он был до tsl. При необходимости следует воспользоваться командами sc и rc.) Характеристика tsl имеет один параметр - номер колонки в служебной строке, в которую помещается курсор.
То, что терминал может выполнять команды, например табуляцию, даже если курсор находится в служебной строке, задается характеристикой eslok. Цепочка символов, убирающая с экрана или очищающая служебную строку, задается характеристикой dsl. Если терминал может запоминать и вспоминать позицию курсора, задайте характеристики sc и rc. Считается, что служебная строка имеет ту же длину, что и все остальные, то есть cols. Если длина служебной строки иная (например, терминал не позволяет заполнить всю служебную строку), то она задается числовой характеристикой wsl.
Псевдографика
Если у терминала есть альтернативный набор символов, позволяющий выводить рамки и стрелки, отображение рисунка на код символа задается символьной характеристикой acsc. Определение этой цепочки основано на альтернативном наборе символов терминала vt100 фирмы DEC, несколько расширенного символами терминала 4410v1 фирмы AT&T.
ИзображениеСимвол vt100+
стрелка вправо
+
стрелка влево
,
стрелка вниз
.
сплошной блок
0
фонарик
i
стрелка вверх
-
алмаз
`
клетка
a
знак градуса
f
плюс/минус
g
квадраты
h
правый нижний угол
j
правый верхний угол
k
левый верхний угол
l
левый нижний угол
m
крест
n
надчеркивание
o
горизонталь
q
подчеркивание
s
левый край
t
правый край
u
нижний край
v
верхний край
w
вертикаль
x
перечисление
~
<
/p>
Самый лучший способ описания средств псевдографики другого терминала заключается в следующем. Сначала надо добавить к таблице, приведенной выше, новую колонку и в ней перечислить символы, которые в альтернативном наборе нового терминала выводят то же изображение. Например,
ИзображениеСимвол vt100+Новый терминал
левый верхний угол
l
R
левый нижний угол
m
F
правый верхний угол
k
T
правый нижний угол
j
G
горизонталь
q
,
вертикаль
x
.
После этого необходимо выписать символы слева направо, то есть acsc=lRmFkTjGq\,x..
Дополнительные возможности
Если терминалу требуется заполнитель, отличный от нуля, он задается характеристикой pad. Используется только первый символ значения pad. Если у терминала нет заполнителя, укажите характеристику npc.
Возможности терминала перемещать курсор на полстроки вверх или вниз задаются характеристиками hu и hd соответственно. Они обычно используются для верхних и нижних индексов на печатающих устройствах. Возможность печатающего устройства прогонять бумагу до следующей страницы задается характеристикой ff (обычно это CTRL+L).
Если имеется команда, повторяющая заданный символ заданное число раз (и позволяющая тем самым уменьшить время, необходимое для передачи группы одинаковых символов), она задается характеристикой rep. Первым параметром является повторяемый символ, а вторым - количество повторений. Таким образом, tparm(repeat_char,'x',10) выводит xxxxxxxxxx.
Некоторые терминалы могут изменять символ, используемый в качестве командного, как например Tektronix 4025. Символ, который используется во всех командах, но в некоторых случаях может быть другим, задается характеристикой cmdch. В некоторых системах поддерживается следующее соглашение: если определена переменная окружения CC [см. ], то символ, заданный характеристикой cm, во всех командах заменяется на значение переменной окружения CC.
Если к одной и той же линии могут подключатся различные терминалы (например, через сеть), можно использовать характеристику gn, чтобы программа могла определить, что тип подключенного терминала неизвестен (это не относится к виртуальным терминалам, чьи характеристики известны). Если терминал поддерживает протокол виртуального терминала системы UNIX, его номер задается числовой характеристикой vt. Последовательность, которую нужно послать на терминал перед чтением с него, задается характеристикой rfi.
Если терминал поддерживает протокол xon/xoff, укажите характеристику xon. Можно оставить информацию о задержках, полезную для оценки сложности операции, но символы-заполнители при этом передаваться не будут. Последовательности, включающие протокол xon/xoff и выключающие его, задаются характеристиками smxon и rmxon. Если символы в протоколе xon/xoff не CTRL+Q и CTRL+S, они могут быть заданы характеристиками xonc и xoffc.
Если терминал имеет клавишу МЕТА, которая действует, как клавиша регистра, устанавливая восьмой бит передаваемого кода, укажите характеристику km. В противном случае программы считают, что восьмой бит является битом четности и очищают его. Если имеются команды, включающие и выключающие этот "МЕТА-режим", они задаются характеристиками smm и rmm.
Если в дисплейной памяти терминала строк больше, чем на экране, то число строк в памяти задается характеристикой lm. Значение lm#0 означает, что число строк памяти неизвестно, но оно все-таки больше, чем число строк на экране.
Команды, управляющие принтером, подключенным к терминалу, задаются следующими характеристиками: mc0 (напечатать содержимое экрана), mc4 (выключить принтер) и mc5 (включить принтер). Если принтер включен, весь текст, посылаемый на терминал, посылается и на принтер. Характеристика mc5p, имеющая один параметр, включает принтер для печати указанного числа символов, а затем его выключает. Параметр при этом не должен превосходить 255. Если при печати на принтере текст не изображается на экране, укажите характеристику mc5i. Если выполняется команда, заданная mc5p, то принтеру передаются все коды, включая mc4.
Особые случаи
Имеющиеся в terminfo характеристики хорошо описывают большинство терминалов. Однако некоторые терминалы не удается описать полностью. Это является не недостатком конкретного терминала, а скорее свидетельствует об отличии конкретного оборудования от той модели терминала, на которой основана terminfo.
Для некоторых конкретных терминалов в terminfo предусмотрены специальные характеристики.
Для терминалов, которые не умеют изображать знак ~, как, например, терминал Hazeltine, задается характеристика hz.
Для терминалов, которые игнорируют перевод строки сразу после автоматического перехода на новую строку при достижении правой границы, как терминал Concept 100, задается характеристика xenl. Для терминалов, на которых курсор остается на правой границе до получения следующего символа, вместо того, чтобы перейти на следующую строку сразу, как терминал vt100, тоже задается характеристика xenl.
Если текст, выданный в режиме сообщений, должен обязательно очищаться командой el перед выводом текста поверх него, то задается характеристика xhp.
Для терминалов Teleray, которые табуляциями затирают текст, через который перемещается курсор, необходимо задать характеристику xt. Эта же характеристика означает, что для выхода из режима сообщений необходимо использовать команды вставки и удаления строк.
Для терминалов Beehive Superbee, которые не умеют посылать коды ESC и CTRL+C, нобходимо указать характеристику xsb, означающую, что вместо ESC будет использоваться клавиша f1, а вместо CTRL+C - клавиша f2.
Похожие терминалы
Если имеются два похожих терминала, то один может быть определен указанием, что он почти такой же, как другой. В символьной характеристике (спецификаторе) use задается имя похожего терминала. Характеристики, предшествующие use, замещают характеристики указанного терминала. Характеристика может быть отменена, указанием xx@ ранее определения самой характеристики xx. Например, описание
att4424-2|Teletype 4424 in display function group ii, rev@, sqr@, smul@, use=att4424,
означает, что терминал AT&T 4424-2 является разновидностью телетайпа AT&T 4424, но не обладает характеристиками rev, sgr и smul, и, следовательно, не может выделять что-либо на экране.
Спецификатор use удобно использовать для различных режимов терминалов или для отражения различных вкусов пользователей. Можно задавать несколько спецификаторов use.
ФАЙЛЫ
/usr/lib/terminfo/?/* Скомпилированная база данных терминалов. /usr/lib/.COREterm/?/* Подмножество скомпилированной базы данных терминалов. /usr/lib/tabset/* Коды, устанавливающие границы и позиции табуляции для конкретных терминалов.
СМ. ТАКЖЕ
, , .
, , , в Справочнике администратора.
в Справочнике пользователя.
ПРЕДОСТЕРЕЖЕНИЯ
Как указано в разделе Табуляции и инициализация, перед использованием пакета необходимо вывести на терминал цепочки символов is1, is2, is3 и файл if. Это можно сделать с помощью команды tput init [см. и ].
Эксперименты с файлами /usr/lib/terminfo/?/* и /usr/ lib/.COREterm/?/* (например, удаление или изменение файла) может повлиять на выполнение программ, таких как vi, которые считают, что в этом месте лежит правильный файл. В частности, удаление описания "ненужного" терминала может привести к непредсказуемым последствиям.
ЗАМЕЧАНИЯ
База данных termcap, которая использовалась в ранних версиях системы UNIX, в будущих версиях может не поддерживаться.
Все асинхронные порты связи используют один и тот же общий интерфейс, вне зависимости от подключенной аппаратуры.
Обычно при открытии файла, соответствующего терминалу, процесс ожидает установления соединения. На практике пользовательские программы редко сами открывают такие файлы; они открываются программой и становятся пользовательским стандартным вводом, выводом и протоколом. Самый первый из терминальных файлов, не ассоциированных с группой процессов, при открытии его лидером группы становится управляющим терминалом для данной группы. Управляющий терминал играет особую роль при обработке сигналов выхода и прерывания, как это обсуждается ниже. Управляющий терминал наследуется процессом, порожденным посредством системного вызова . Изменением своей группы [с помощью системного вызова ] процесс может разорвать эту связь.
Терминалы работают в полностью дуплексном (двустороннем) режиме. Символы можно вводить в любой момент времени, даже когда происходит вывод. Потеря символов происходит только в двух случаях: когда переполняется системный буфер вводимых символов (что случается довольно редко) или когда пользователь накопил максимально допустимое число вводимых символов, а никакая программа их не прочитала. В текущей версии этот предел равен 256 символам. Если предел ввода достигнут, буфер сбрасывается и все сохраненные символы теряются без всякого уведомления.
Обычно терминальный ввод обрабатывается построчно. Строка ограничивается символами перевода строки, конца файла или конца строки. Это означает, что при попытке чтения процесс приостанавливается до тех пор, пока не будет введена вся строка. При чтении, независимо от числа запрошенных символов, будет выдано не более одной строки, однако не обязательно всю строку читать сразу: можно запросить любое количество символов (даже один) и информация не будет потеряна.
Во время ввода обычно выполняется обработка символов забоя и уничтожения. По умолчанию символ # "забивает" последний введенный символ (но не далее начала строки). Символ @ уничтожает всю вводимую строку и, быть может, выдает перевод строки. Оба этих управляющих символа воздействуют только на входной буфер. Так, после ввода табуляции, развернутой в несколько пробелов, удаление последнего символа приведет к удалению табуляции в буфере, но на экране будет удален лишь последний из пробелов.
При вводе некоторые символы выполняют специальные функции. Ниже перечислены эти функции и соответствующие подразумеваемые символы:
INTR (символ DEL в кодировке ASCII) Генерирует сигнал прерывания (SIGINT), посылаемый всем процессам, для которых данный терминал является управляющим. Обычно каждый такой процесс терминируется, но есть средства, позволяющие проигнорировать этот сигнал или обработать его по-своему [см. ]. QUIT (CTRL+\, или символ FS в кодировке ASCII) Генерирует сигнал выхода (SIGQUIT), при стандартной реакции на который процесс не только терминируется, но и в текущем каталоге создается файл с образом памяти процесса [см. ]. SWTCH (CTRL+Z, или символ SUB в кодировке ASCII) Используется менеджером семейства shell'ов для переключения между экземплярами shell'а. ERASE (#) Забивает предыдущий символ, но не далее начала строки, отделенного символами NL, EOF или EOL. KILL (@) Уничтожает всю строку, выделенную символами NL, EOF или EOL. EOF (CTRL+D, или символ EOT в кодировке ASCII) Может быть использован для генерации признака конца файла при вводе с терминала. При получении этого символа все буферизованные символы, не ожидая перевода строки, передаются процессу, а сам символ EOF отбрасывается. Таким образом, если буферизованных символов нет, то есть EOF встретился в начале строки, в процесс будет передано 0 символов, что и является стандартным обозначением конца файла. NL (символ LF в кодировке ASCII) Стандартный разделитель строк (перевод строки). Его нельзя изменить или экранировать. EOL (символ NUL в кодировке ASCII) Дополнительный разделитель строк, аналогичный NL. Обычно не используется. EOL2 Еще один дополнительный разделитель строк. STOP (CTRL+S, или символ DC3 в кодировке ASCII) Обычно используется для временной приостановки вывода, когда нужно прочитать текст на экране терминала. Если вывод приостановлен, символы STOP игнорируются и не читаются. START (CTRL+Q, или символ DC1 в кодировке ASCII) Используется для возобновления вывода, приостановленного с помощью символа STOP. Если вывод не приостановлен, то символы START игнорируются и не читаются. Символы START и STOP нельзя изменить или экранировать.
Для выполнения функций INTR, QUIT, SWTCH, ERASE, KILL, EOF и EOL можно назначить символы, отличные от подразумеваемых [см. ]. Символы ERASE, KILL и EOF можно экранировать, то есть лишить их специальных функций, если поместить перед ними символ \.
Если пропала несущая, то всем процессам, для которых данный терминал является управляющим, посылается сигнал освобождения линии (SIGHUP). Если не предусмотрено обработки этого сигнала, то его возникновение вызовет терминирование процесса. Если сигнал освобождения игнорируется, то все последующие операции чтения возвращают признак конца файла. Таким образом процессы, читающие с терминала и проверяющие конец файла, могут соответствующим образом завершиться в случае разрыва связи.
При выполнении записи одного или более символов они передаются терминалу только тогда, когда вывод символов, записанных ранее, завершен. Эхоотображение вводимых символов выполняется посредством их постановки, по мере поступления, в очередь вывода. Если процесс порождает символы быстрее, чем они могут быть выведены, его приостановят, когда размер очереди вывода превысит некоторый предел. При уменьшении очереди до некоторого порогового значения выполнение программы возобновляется.
С помощью системного вызова над терминальными файлами можно выполнять различные управляющие действия. Как правило, при этом используется следующая структура, описанная во включаемом файле <termio.h>:
#define NCC 8 struct termio { unsigned short c_iflag; /* Режимы ввода */ unsigned short c_oflag; /* Режимы вывода */ unsigned short c_cflag; /* Управляющие режимы */ unsigned short c_lflag; /* Локальные режимы */ char c_line; /* Режим работы с линией */ unsigned char c_cc[NCC];/* Управляющие символы */ };
Соответствие управляющих функций и символов задается в массиве c_cc. Ниже приведены номера, приписанные функциям, и подразумеваемые символы:
0
VINTR
DEL
1
VQUIT
FS
2
VERASE
#
3
VKILL
@
4
VEOF (VMIN)
EOT
5
VEOL (VTIME)
NUL
6
VEOL2
7
VSWTCH
SUB
Поле c_iflag описывает основные параметры терминального ввода:
IGNBRK
0000001
Игнорировать ошибки протокола.
BRKINT
0000002
При ошибках протокола генерировать сигнал прерывания.
IGNPAR
0000004
Игнорировать символы с ошибками четности.
PARMRK
0000010
Отмечать ошибки четности.
INPCK
0000020
Разрешить контроль четности.
ISTRIP
0000040
Отбрасывать старший бит.
INLCR
0000100
Преобразовывать перевод строки в возврат каретки.
IGNCR
0000200
Игнорировать возвраты каретки.
ICRNL
0000400
Преобразовывать возврат каретки в перевод строки.
IUCLC
0001000
Преобразовывать большие буквы в малые.
IXON
0002000
Разрешить старт/стопное управление выводом.
IXANY
0004000
Разрешить любому символу возобновлять вывод.
IXOFF
0010000
Разрешить старт/стопное управление вводом.
<
/p>
Если установлен бит IGNBRK, то символы с ошибками протокола и четности игнорируются (то есть не поступают в очередь ввода). В противном случае, при установленном бите BRKINT, получение блока данных, содержащего только нули, (нажатие клавиши прерывания) приведет к генерации сигнала прерывания и опустошению очередей ввода/вывода.
Если установлен бит PARMRK, то символы с ошибкой протокола или четности (если они не игнорируются) вводятся в виде последовательности из трех байт: 0377, 0, x, где x - это данные, полученные при возникновении ошибки. Чтобы избежать в этом случае двусмысленности (если бит ISTRIP не установлен) символ 0377 вводится как пара 0377, 0377. Если бит PARMRK не установлен, то при возникновении ошибки (которая не игнорируется) вводится символ NUL (0).
Если установлен бит INPCK, то действует контроль четности при вводе, в противном случае контроль выключен. Это позволяет формировать четность вывода без ошибок четности при вводе.
Если установлен бит ISTRIP, то у допустимых вводимых символов сначала отбрасывается старший бит; в противном случае обрабатываются все 8 бит.
Если установлен бит INLCR, то вводимые символы перевода строки преобразуются в возврат каретки. Если установлен бит IGNCR, то символы возврата каретки игнорируются (не вводятся); в противном случае, если установлен бит ICRNL, символы возврата каретки преобразуются в перевод строки.
Если установлен бит IUCLC, то большие буквы преобразуются в соответствующие малые буквы.
Если установлен бит IXON, то разрешено старт/стопное управление выводом. Полученный символ STOP приостановит вывод, а символ START его возобновит. Все старт/стопные символы игнорируются, то есть не вводятся. Если установлен бит IXANY, то любой введенный символ возобновит приостановленный вывод.
Если установлен бит IXOFF, то система будет передавать старт/стопные символы, когда очередь ввода почти пуста/ заполнена.
В начальном состоянии все биты поля c_iflag равны 0.
Поле c_oflag определяет системную обработку вывода:
OPOST
0000001
Постпроцессировать вывод.
OLCUC
0000002
Преобразовывать малые буквы в большие.
ONLCR
0000004
Преобразовывать перевод строки в пару (перевод строки, возврат каретки).
OCRNL
0000010
Преобразовывать возврат каретки в перевод строки.
ONOCR
0000020
Не выдавать возврат каретки в нулевой колонке.
ONLRET
0000040
Перевод строки выполняет функции возврата каретки.
OFILL
0000100
Использовать для задержки передачу символов-заполнителей.
OFDEL
0000200
Символом-заполнителем является DEL (по умолчанию - NUL).
NLDLY
0000400
Выбрать задержку для перевода строки:
NL0
0
NL1
0000400
CRDLY
0003000
Выбрать задержку для возврата каретки:
CR0
0
CR1
0001000
CR2
0002000
CR3
0003000
TABDLY
0014000
Выбрать задержку для горизонтальной табуляции:
TAB0
0
TAB1
0004000
TAB2
0010000
TAB3
0014000 Разворачивать табуляцию в пробелы.
BSDLY
0020000
Выбрать задержку для возврата на шаг:
BS0
0
BS1
0020000
VTDLY
0040000
Выбрать задержку для вертикальной табуляции:
VT0
0
VT1
0040000
FFDLY
0100000
Выбрать задержку для перехода к новой странице:
FF0
0
FF1
0100000
<
/p>
Если установлен бит OPOST, то выводимые символы постпроцессируются, иначе они передаются на терминал без обработки. Характер обработки определяется остальными битами режима вывода.
Если установлен бит OLCUC, то малые буквы преобразуются при выводе в большие. Данный режим обычно используется вместе с IUCLC.
Если установлен бит ONLCR, то перевод строки преобразуется в пару символов (перевод строки, возврат каретки). Если установлен бит OCRNL, то возврат каретки преобразуется в перевод строки. Если установлен бит ONOCR, то в колонке 0 (первая позиция строки) возврат каретки не выводится. Если установлен бит ONLRET, то предполагается, что перевод строки выполняет функции возврата каретки; номер колонки становится нулевым, используются задержки, определенные для возврата каретки. В противном случае предполагается, что перевод строки служит только для перехода к новой строке: номер колонки не изменяется. Если передается сам символ возврата каретки, номер колонки становится нулевым.
Биты задержки определяют время, на которое прекращается передача. Задержка позволяет выполнить механическое или иное перемещение, вызванное посылкой на терминал некоторых символов. В любом случае 0 означает отсутствие задержки. Если установлен бит OFILL, то вместо временной задержки будет использоваться передача символов-заполнителей. Подобный режим полезен для высокоскоростных терминалов, когда нужна минимальная задержка. Если установлен бит OFDEL, то символом-заполнителем является DEL, в противном случае NUL.
Длительность задержки для вертикальной табуляции или перехода к новой странице составляет примерно 2 секунды.
Задержка для перевода строки равна примерно 0.1 секунды. Если установлен бит ONLRET, то вместо задержки для перевода строки используется задержка для возврата каретки. Если установлен бит OFILL, будут передаваться два символа-заполнителя.
Задержка типа 1 для возврата каретки зависит от текущей колонки, для типа 2 длится примерно 0.1 секунды, для типа 3 - 0.15 секунды. Если установлен бит OFILL, то при задержке типа 1 передаются два символа-заполнителя, при задержке типа 2 - четыре символа.
При горизонтальной табуляции задержка типа 1 зависит от текущей колонки. Для типа 2 она длится около 0.1 секунды. Тип 3 специфицирует, что табуляции должны развертываться в пробелы. Если установлен бит OFILL, то для задержки любого типа передаются два символа-заполнителя.
Задержка для возврата на шаг длится около 0.05 секунды. Если установлен бит OFILL, то будет передаваться один символ-заполнитель.
Фактические задержки зависят от скорости линии связи и загруженности системы.
В начальном состоянии все биты поля c_oflag равны 0.
Поле c_cflag описывает аппаратные характеристики линии и терминала:
CBAUD
0000017
Скорость передачи:
B0
0
Освобождение линии.
B50
0000001
50 бод.
B75
0000002
75 бод.
B110
0000003
110 бод.
B134
0000004
134 бода.
B150
0000005
150 бод.
B200
0000006
200 бод.
B300
0000007
300 бод.
B600
0000010
600 бод.
B1200
0000011
1200 бод.
B1800
0000012
1800 бод.
B2400
0000013
2400 бод.
B4800
0000014
4800 бод.
B9600
0000015
9600 бод.
B19200
0000016
19200 бод.
EXTA
0000016
Внешний A.
B38400
0000017
38400 бод.
EXTB
0000017
Внешний B.
CSIZE
0000060
Размер символа:
CS5
0
5 бит.
CS6
0000020
6 бит.
CS7
0000040
7 бит.
CS8
0000060
8 бит.
CSTOPB
0000100
Посылать два стоп-бита, иначе один.
CREAD
0000200
Разрешить прием символов.
PARENB
0000400
Контролировать четность.
PARODD
0001000
Проверка на нечетность, иначе на четность.
HUPCL
0002000
Освобождение линии при последнем закрытии.
CLOCAL
0004000
Локальная линия связи, иначе коммутируемая.
RCV1EN
0010000
XMT1EN
0020000
LOBLK
0040000
Блокировать вывод экземпляра shell'а.
Биты CBAUD определяют скорость передачи данных. Нулевая скорость передачи, B0, используется для прекращения связи и освобождения линии. При нулевой скорости не будет выставляться сигнал готовности терминала к обработке данных, что обычно ведет к разрыву связи. Для любого вида аппаратуры игнорируются не поддерживаемые ею изменения скорости.
Биты CZISE задают размер символа в битах как для передачи, так и для приема данных. В этом размере не учитывается бит четности, если он есть. Если установлен режим CSTOPB, то используется два стоп-бита, в противном случае один. Например, при скорости 110 бод требуется два стоп-бита.
Если установлен режим PARENB, то действует как контроль четности, так и добавление к каждому символу бита четности. Если при этом установлен бит PARODD, выполняется проверка на нечетность, в противном случае - на четность.
Если установлен бит CREAD, то разрешен прием данных, в противном случае символы приниматься не будут.
Если установлен бит HUPCL, то линия связи будет освобождена, когда последний процесс, открывавший ее, закроет линию или завершится. В результате сигнал готовности терминала к обработке данных пропадет.
Если установлен бит CLOCAL, то считается, что линия связи локальная, с прямым соединением без модемного управления. В противном случае предполагается модемное управление.
Если установлен бит LOBLK, то вывод экземпляров shell'а, не являющихся текущими, будет блокироваться. В противном случае вывод разных экземпляров будет мультиплексироваться.
После открытия терминального файла будут установлены следующие аппаратные характеристики: B300, CS8, CREAD, HUPCL.
Поле c_lflag структуры termio используется для детализации режима работы с терминальной линией. Базовый режим (0) обеспечивает следующие возможности:
ISIG
0000001
Разрешить сигналы.
ICANON
0000002
Канонический ввод (обработка забоя и уничтожения).
XCASE
0000004
Каноническое представление больших/малых букв.
ECHO
0000010
Разрешить эхо.
ECHOE
0000020
Отображать символ забоя как тройку: возврат на шаг, пробел, возврат на шаг.
ECHOK
0000040
Выдавать перевод строки после символа уничтожения.
ECHONL
0000100
Отображать перевод строки.
NOFLSH
0000200
Запретить сброс после прерывания или выхода.
Если установлен бит ISIG, то каждый вводимый символ сравнивается со специальными управляющими символами INTR, SWTCH и QUIT. В случае совпадения выполняется соответствующая функция. Если бит ISIG не установлен, то никакой проверки не производится. Таким образом, выполнение упомянутых специальных функций ввода возможно только при установленном бите ISIG. Эти функции могут быть отключены по отдельности, с помощью смены управляющего символа на маловероятное или невозможное значение (например, 0377).
Если установлен бит ICANON, то разрешена каноническая обработка ввода. Это означает разрешение функций редактирования [забоя (ERASE) и уничтожения (KILL)], об единения вводимых символов в строки, разделенные символами NL, EOF и EOL. Если бит ICANON не установлен, то запросы на чтение удовлетворяются прямо из очереди ввода. Запрос на чтение не будет удовлетворен до тех пор, пока не поступит по крайней мере MIN символов или не истечет время задержки TIME между поступлениями символов (то есть время TIME начинает отсчитываться после поступления первого символа). Такой подход позволяет эффективно читать во время вспышек активности ввода и в то же время разрешает посимвольный ввод. Нулевое значение TIME трактуется как бесконечная задержка, то есть запрос на чтение будет удовлетворен, только когда поступит по крайней мере MIN символов. Значения MIN и TIME хранятся соответственно в позициях для символов EOF и EOL (см. включаемый файл <sys/termio.h>). Время задается в десятых долях секунды.
Если установлены биты XCASE и ICANON, то при вводе буква воспринимается как большая, когда перед ней стоит символ \, и выводится в виде пары символов, первый из которых есть \. В этом режиме следующие управляющие последовательности генерируются при выводе и воспринимаются при вводе:
для ввода символа:используйте:
`
\'
|
\!
~
\^
{
\(
}
\)
\
\\
Например, A вводится как \a, \n как \\n, а \N как \\\n.
Если установлен бит ECHO, то при получении символа происходит его эхоотображение.
Когда установлен бит ICANON, возможны следующие функции эхоотображения. Если установлены биты ECHO и ECHOE, то символ забоя отображается как тройка ASCII-символов (BS, SP, BS), в результате чего последний из введенных перед этим символов исчезнет с экрана. Если установлен бит ECHOE, а ECHO нет, то символ забоя отображается как пара (SP BS). Если установлен бит ECHOK, то после символа уничтожения будет выведен перевод строки (NL), чтобы подчеркнуть факт уничтожения. Заметим, что символы забоя и уничтожения могут быть экранированы, если перед ними поместить \, и тогда они теряют специальный смысл. Если установлен бит ECHONL, то перевод строки будет отображаться даже в том случае, когда не установлен бит ECHO, что полезно для терминалов с локальным эхоотображением (так называемых полудуплексных). Символ конца файла (EOF) не отображается, если только он не экранирован. Так как подразумеваемым признаком конца файла служит ASCII-символ EOT (конец передачи), эхоотображение конца файла привело бы к освобождению линии терминалами, отвечающими на EOT.
Если установлен бит NOFLSH, то не будет выполняться обычно применяемый сброс очередей ввода и вывода при получении символов выхода, переключения и прерывания.
В начальном состоянии все биты поля c_lflag равны 0.
Основные системные вызовы для терминальных файлов имеют вид:
ioctl (fildes, command, arg) struct termio *arg;
Подобный вид имеют следующие команды:
TCGETA Получить параметры, ассоциированные с данным терминалом и поместить их в структуру типа termio, на которую указывает аргумент arg. TCSETA Присвоить параметрам, ассоциированным с данным терминалом, значения из структуры, на которую указывает аргумент arg. TCSETAW Дождаться окончания вывода, прежде чем устанавливать новые параметры. Эту форму следует применять при изменении параметров, влияющих на вывод. TCSETAF Дождаться окончания вывода, затем сбросить очередь ввода и установить новые параметры.
Дополнительные вызовы имеют вид:
ioctl (fildes, command, arg) int arg;
Этот вид имеют следующие команды:
TCSBRK Подождать окончания вывода; затем, если arg равен нулю, вызвать нарушение протокола (в течение 0.25 секунды посылать нулевые биты). TCXONC Старт/стопное управление. Если arg равен нулю, то приостановить вывод; если 1, то возобновить приостановленный вывод. TCFLSH Если arg равен 0, то сбросить очередь ввода; если 1, то сбросить очередь вывода; если 2, то сбросить обе очереди.
Команда test применяется для проверки условия. Она вычисляет выражение и, если его значение - истина, возвращает код завершения 0; иначе - ненулевое значение. Ненулевой код возвращается и в случае, когда выражение отсутствует. При проверке прав доступа используется действующий идентификатор пользователя.
Знаки операций, флаги и скобки (см. выше второй способ записи команды test) должны быть отдельными аргументами в командной строке; обычно их разделяют пробелами.
Выражение может состоять из следующих примитивов:
-r файл
Истина, если файл существует и доступен для чтения.
-w файл
Истина, если файл существует и доступен для записи.
-x файл
Истина, если файл существует и является выполняемым.
-f файл
Истина, если файл существует и является обычным файлом.
-d файл
Истина, если файл существует и является каталогом.
-c файл
Истина, если файл существует и является специальным символьным файлом.
-b файл
Истина, если файл существует и является специальным блочным файлом.
-p файл
Истина, если файл существует и является именованным каналом.
-u файл
Истина, если файл существует и его режим содержит бит переустановки идентификатора пользователя.
-g файл
Истина, если файл существует и его режим содержит бит переустановки идентификатора группы.
-k файл
Истина, если файл существует и его режим содержит бит навязчивости.
-s файл
Истина, если файл существует и имеет ненулевой размер.
-t [дескриптор_файла]
Истина, если открытый файл с указанным дескриптором (по умолчанию 1) существует и ассоциирован с терминалом.
-z s1
Истина, если длина цепочки s1 нулевая.
-n s1
Истина, если длина цепочки s1 ненулевая.
s1 = s2
Истина, если цепочки s1 и s2 равны.
s1 != s2
Истина, если цепочки s1 и s2 не равны.
s1
Истина, если s1 - непустая цепочка.
n1 -eq n2
Истина, если целые числа n1 и n2 алгебраически равны. На месте -eq могут быть также операции сравнения -ne (не равно), -gt (больше), -ge (больше или равно), -lt (меньше), -le (меньше или равно).
( выражение )
Истина, если истинно заключенное в скобки выражение (скобки должны быть экранированы от интерпретации shell'ом). <
/p>
Примитивы могут комбинироваться с помощью следующих операций (в порядке уменьшения приоритета):
!
Унарная операция отрицания.
-a
Логическое И.
-o
Логическое ИЛИ.
СМ. ТАКЖЕ
, .
ПРЕДОСТЕРЕЖЕНИЯ
Операции = и != имеют больший приоритет, чем операции от -r до -n; кроме того, операциям сравнения нужны аргументы. Следовательно, они не могут быть использованы с операциями от -r до -n.
Если у операций от -r до -n указано более одного аргумента, то обрабатывается только первый из них (остальные игнорируются), если только второй аргумент не есть -a или -o.
СЮРПРИЗЫ
Если посредством операций -r, -w или -x Вы проверяете файл, владельцем которого являетесь, но в режиме этого файла не установлен соответствующий бит для пользователя, код завершения будет ненулевым (ложь), даже если у Вас есть права на файл как у члена группы или прочего пользователя. Для суперпользователя код завершения будет правильным.
Утилита tic транслирует файл из исходного формата в скомпилированный. Результат помещается в соответствующий подкаталог каталога /usr/lib/terminfo. Скомпилированный формат необходим для использования подпрограммами библиотеки .
Смысл аргументов утилиты tic:
-v[число]
Выдавать в стандартный протокол сообщения о процессе компиляции. Необязательный аргумент число должен лежать в пределах от 1 до 10 включительно. Чем больше число, тем детальнее выдаваемая информация. Подразумеваемое значение числа равно 1.
-c Только проверить файл на наличие ошибок. При этом ошибки в полях use= не контролируются.
файл Содержит одно или более описаний терминалов в исходном формате [см. ]. Каждое описание задает характеристики конкретного терминала. Если при компиляции встречается поле use=терминал, то утилита tic дополняет описание, используя двоичный файл из каталога /usr/lib/terminfo (если терминал описан в файле, то используется описание из файла; если установлена переменная окружения TERMINFO, то ее значение используется вместо /usr/lib/ terminfo). Утилита tic при этом дублирует все характеристики терминала в генерируемом описании, кроме тех, которые явно заданы в исходном описании.
Если установлена переменная окружения TERMINFO, то ее значение используется вместо /usr/lib/terminfo для помещения результатов компиляции.
ПРЕДОСТЕРЕЖЕНИЯ
Общий размер скомпилированного описания не должен превышать 4096 байт. Поле имени не должно превышать 128 байт.
Имена терминалов, состоящие более чем из 14 символов, будут обрезаны до 14 символов, при этом будет выдано предупреждение.
Если используется опция -c, одинаковые имена терминалов не диагностируются, однако без опции -c диагностика выдается.
ДИАГНОСТИКА
Большинству диагностических сообщений предшествует примерный номер строки, к которой относится сообщение и имя терминала, описание которого обрабатывалось.
mkdir ... returns bad status
Указанный каталог не может быть создан.
File does not start with terminal names in column one
Первым элементом файла, после комментариев, должен быть список имен терминалов.
Token after seek(2) not NAMES
Видимо, компилируемый файл изменился во время компиляции.
Not enough memory for use_list element или Out of memory
Программе не хватает доступной памяти [malloc(3C) завершился неудачей].
Can't open ...
Указанный файл не может быть создан.
Error in writing ...
В указанный файл нельзя писать.
Can't link ... to ...
Неудача при выполнении системного вызова .
Error in re-reading compiled file ... Скомпилированный файл не может быть повторно считан.
Premature EOF
Описание кончилось, хотя компилятор ожидал продолжения.
Backspaced off beginning of line
Эта ошибка означает, что с компилятором что-то не в порядке.
Unknown Capability - "..."
Обнаружена указанная неизвестная характеристика.
Wrong type used for capability
Например, булевой характеристике задается числовое значение.
Unknown token type
За именем поля должен следовать один из символов: @ для отмены, , для булева поля, # для числового, = для поля, содержащего цепочку символов.
"..." : bad term name или Line ...: Illegal terminal name - "..."
Указанное имя некорректно. Имена не должны включать пробелы и символы / и должны начинаться с буквы или цифры.
"..." : terminal name too long
Обнаружено слишком длинное имя терминала.
"..." : terminal name too short
Обнаружено односимвольное имя терминала.
"..." : filename too long, truncating to "..."
Указанное имя файла обрезано до 14 символов из-за ограничений системы UNIX на длину имен файлов.
"..." defined in more than one entry. Entry being used is "..."
Повторное описание характеристик.
Terminal name "..." synonym for itself
Имя указано дважды в списке синонимов.
At least one synonym must begin with a letter
Хотя бы одно имя терминала должно начинаться с буквы.
Illegal character - "..."
Обнаружен некорректный символ.
Newline in middle of terminal name
Список имен терминалов не завершается запятой.
Missing comma
Пропущена запятая.
Missing numeric value
После числовой характеристики не указано значение.
NULL string value
Чтобы сказать, что характеристика, описываемая цепочкой символов, отсутствует, надо отменить ее.
Very long string found. Missing comma?
Обнаружена очень длинная цепочка символов.
Unknown option. Usage is: ...
Неизвестная опция.
Too many file names. Usage is:
В командной строке можно указать только одно имя файла.
"..." non-existant or permission denied
В указанный каталог нельзя писать.
"..." is not a directory
Указанный файл не является каталогом.
"..." permission denied
Нет прав доступа.
"...": Not a directory
Утилита tic хочет использовать указанное имя, как имя каталога, но уже существует файл с таким именем.
SYSTEM ERROR!! Fork failed!!!
Системный вызов закончился неудачей.
Error in following up use-links. Either there is a loop in the links or they reference non-existant terminals. The following is a list of entries involved:
Либо в описании использован use=терминал, а терминал не существует, либо терминал каким-либо образом ссылается на данное описание.
ФАЙЛЫ
/usr/lib/terminfo/?/* Скомпилированная база данных опи- саний терминалов.
СМ. ТАКЖЕ
, , в Справочнике программиста.
СЮРПРИЗЫ
Чтобы существующие выполняемые файлы из старых версий системы UNIX могли использовать базу данных terminfo, порождаемую новым компилятором, отмененные характеристики не помечаются как отмененные в скомпилированном формате, если в имя терминала не входит символ +. Такие имена терминалов используются только для включения в другие описания с помощью use=. Они не должны использоваться для реальных терминалов.
Этот пример работает так, как и ожидается, определения для клавиш в описании терминала 4415-nl отсутствуют. Однако, если бы в имени терминала 4415+nl отсутствовал +, то отмена клавиш не занеслась бы в скомпилированный файл и определения клавиш в описании терминала 4415-nl сохранились бы.
Команда tid декомпилирует описание терминала term, первоначально откомпилированное командой . Если параметр term не определен, то используется установка переменной среды TERM.
ФАЙЛЫ
/usr/lib/terminfo/*/* откомпилированная база данных, описы- вающая возможности терминала.
СМ. ТАКЖЕ
, terminfo(3), .
ЗАМЕЧАНИЯ
Выходная информация команды tid не является входными данными для команды tic.
times - получение информации о времени выполнения процесса и порожденных процессов
СИНТАКСИС
#include <sys/types.h> #include <sys/times.h>
long times (buffer) struct tms *buffer;
ОПИСАНИЕ
Системный вызов times заполняет структуру, адрес которой задает аргумент buffer, учетной информацией о расходовании времени. Структура содержит следующие поля:
Поступает информация о вызывающем процессе и завершившихся порожденных процессах, для которых был выполнен системный вызов . Единица измерения времени определяется величиной HZ в файле <sys/param.h>. В данной реализации время измеряется в 1/60 долях секунды.
tms_utime Время ЦП, израсходованное вызывающим процессом в режиме пользователя. tms_stime Время ЦП, израсходованное операционной системой для обслуживания вызывающего процесса. tms_cutime Суммарное время ЦП, израсходованное вызывающим процессом и порожденными им процессами в режиме пользователя. tms_cstime Суммарное время ЦП, израсходованное операционной системой на обслуживание вызывающего процесса и порожденных им процессов.
Системный вызов times завершается неудачей, если выполнено следующее условие:
[EFAULT] Значением аргумента buffer является недопустимый адрес.
СМ. ТАКЖЕ
, , , .
ДИАГНОСТИКА
При успешном завершении возвращается время, прошедшее после вызова системы. В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.
Указанная команда выполняется, после чего, как и в случае , выводятся данные о времени ее работы. Может быть получена дополнительная информация о процессе и его потомках, а также об общей системной активности во время выполнения команды.
Результаты измерений выдаются командой timex в стандартный протокол.
Опциям команды timex приписан следующий смысл:
-p
Вывести данные о процессе и его потомках. Дополнительные опции -f, -h, -k, -m, -r и -t указывают, какие именно сведения выводить [см. ]:
-f
Выводить флаг fork/exec и системный код завершения.
-h
Вместо расхода памяти сообщать, какую часть доступного времени ЦП использовал процесс во время своего выполнения. Этот коэффициент нахальства вычисляется как отношение (время ЦП)/(общее время выполнения).
-k
Вместо расхода памяти выводить произведение количества килобайт памяти на число минут ЦП.
-m
Выводить расход памяти (это опция по умолчанию).
-r
Выводить коэффициент использования ЦП: (время пользователя)/(время системы + время пользователя).
-t
Выводить отдельно время ЦП, затраченное пользователем и системой. Количество прочитанных или записанных блоков и количество переданных символов выдается всегда.
-o
Вывести количество прочитанных или записанных блоков и количество переданных символов как самой командой, так и всеми ее потомками.
-s
Вывести сведения о всей системной активности (не только относящейся к команде), имевшей место во время выполнения команды. Выводятся все данные, перечисленные в .
ПРИМЕРЫ
Простой пример:
timex -ops sleep 60
Деятельность любой сложности может быть замерена следующим образом:
timex -opskmt sh команды CTRL+D
ФАЙЛЫ
/usr/adm/pacct Информация о процессах.
СМ. ТАКЖЕ
, .
в Справочнике администратора.
СЮРПРИЗЫ
Сведения о команде берутся из файла /usr/adm/pacct. Сведения о фоновых процессах, имеющих одинаковый идентификатор пользователя, идентификатор терминала и выполнявшихся в один и тот же промежуток времени, будут перемешиваться.
Команда timex выполняет команду с опциями -S и -E, которые работают неверно. В результате и в самой команде timex опции -p и -o не работают.
timezone - установка подразумеваемого часового пояса
СИНТАКСИС
. /etc/TIMEZONE
ОПИСАНИЕ
Данный файл устанавливает значение переменной окружения TZ, идентифицирующей местный часовой пояс, и экспортирует эту переменную.
Рекомендуется, чтобы всякая shell-процедура, в которой используется информация о местном часовом поясе, выполняла этот файл в рамках текущего процесса посредством встроенной команды shell'а "точка".
timod - модуль псевдоустройства для взаимодействия с Транспортным Интерфейсом
ОПИСАНИЕ
Timod - это модуль псевдоустройства, обеспечивающий использование функций Транспортного Интерфейса библиотеки сетевых услуг. Модуль timod преобразует набор системных вызовов в сообщения псевдоустройств, которые затем передаются модулю, обеспечивающему транспортный интерфейс. Эта схема позволяет выполнять функции Транспортного Интерфейса как атомарные, неделимые действия.
Модуль timod должен использоваться в потоке, который завершается модулем, обеспечивающим Транспортный Интерфейс [см. ].
Модуль timod передает следующему модулю потока без изменений все сообщения псевдоустройств, кроме перечисленных ниже, генерируемых по системному вызову . Сообщения от перечисленных ниже команд ioctl распознаются и обрабатываются модулем timod. Формат вызова ioctl следующий:
В поле ic_len указывается размер сообщения, передаваемого модулю Транспортного Интерфейса, при возврате это поле содержит размер ответного сообщения, полученного от модуля Транспортного Интерфейса. В поле ic_dp помещается ссылка на буфер, содержащий посылаемое сообщение. Размер буфера должен быть достаточен для приема ответного сообщения. Возможные типы сообщений определены во включаемом файле <sys/tihdr.h>. Ниже перечислены допустимые значения поля ic_cmd:
TI_BIND Присоединить адрес к нижележащему транспортному протоколу. Сообщение, выдаваемое по команде TI_BIND, имеет тип T_BIND_REQ. Сообщение, возвращаемое при нормальном завершении системного вызова ioctl, имеет тип T_BIND_ACK. TI_UNBIND Отсоединить адрес от нижележащего транспортного протокола. Сообщение, выдаваемое по команде TI_UNBIND, имеет тип T_UNBIND_REQ. Сообщение, возвращаемое при нормальном завершении системного вызова ioctl, имеет тип T_OK_ACK. TI_GETINFO Получить информацию о состоянии транспортного протокола. Сообщение, выдаваемое по команде TI_GETINFO, имеет тип T_INFO_REQ. Сообщение, возвращаемое при нормальном завершении системного вызова ioctl, имеет тип T_INFO_ACK. TI_OPTMGMT Выполнить специфические операции транспортного протокола. Сообщение, выдаваемое по команде TI_OPTMGMT, имеет тип T_OPTMGMT_REQ. Сообщение, возвращаемое при нормальном завершении системного вызова ioctl, имеет тип T_OPTMGMT_ACK.
Если системный вызов ioctl возвращает значение, большее 0, то младшие 8 бит этого значения содержат код ошибки Транспортного Интерфейса (коды ошибок определены во включаемом файле <sys/tiuser.h>). Если код ошибки имеет значение TSYSERR, следующие 8 бит возвращаемого значения содержат системный код ошибки [системные коды ошибок определены во включаемом файле <sys/errno.h>, см. ].
tirdwr - модуль псевдоустройства интерфейса ввода/вывода для Транспортного Интерфейса
ОПИСАНИЕ
Tirdwr - это модуль псевдоустройства, обеспечивающий дополнительный интерфейс к транспортному протоколу, выполняющему функции Транспортного Интерфейса библиотеки сетевых услуг. Этот дополнительный интерфейс дает возможность пользователю взаимодействовать с транспортным протоколом с помощью системных вызовов и . Системные вызовы и при этом можно использовать только для обмена данными между пользователем и потоком.
Модуль tirdwr должен использоваться в потоке, который завершается модулем транспортного протокола, обеспечивающим Транспортный Интерфейс [см. I_PUSH в ]. После того, как модуль tirdwr помещается в поток, функции Транспортного Интерфейса становятся недоступными, попытка обращения к какой-нибудь функции Транспортного Интерфейса вызывает ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.
Ниже описываются действия, которые выполняет модуль tirdwr, когда его помещают в поток [см. I_PUSH в ], удаляют из потока [см. I_POP в ], а также при прохождении через него данных.
Помещение модуля в поток Когда модуль tirdwr помещается в поток, он выполняет проверку всех существующих сообщений для данного пользователя, чтобы гарантировать их полноту и целостность. Игнорируются все сообщения, влияющие на управление процессами, например, сообщения, генерирующие сигналы процессам, связанным с потоком. Если обнаруживается какое-нибудь другое сообщение, I_PUSH завершается неудачей, а переменной errno присваивается значение EPROTO. Запись в поток Модуль tirdwr выполняет следующие действия над данными, записываемыми в поток с помощью системного вызова :
Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вниз не передаются. Все остальные сообщения, за исключением тех, которые содержат управляющую область [см. и ], без изменений передаются вниз соседнему модулю потока. Все сообщения, имеющие управляющую область, вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.
Чтение из потока Модуль tirdwr выполняет следующие действия над данными, поступающими от модуля транспортного протокола:
Все сообщения, за исключением тех, которые содержат управляющую область [см. и ], без изменений передаются вверх соседнему модулю потока. Все сообщения, имеющие область данных нулевой длины, удаляются из потока и вверх не передаются. Сообщения, имеющие управляющую область, вызывают следующие действия:
Сообщения, задающие ускоренную передачу, вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO. В сообщениях, имеющих и управляющую область, и область данных, перед передачей сообщения наверх соседнему модулю управляющая область удаляется. Сообщение от модуля транспортного протокола, свидетельствующее о нормальном завершении соединения, сгенерирует сообщение с пустой управляющей областью и областью данных нулевой длины, представляющее конец файла. Это сообщение посылается пользователю, читающему из потока. Само сообщение о нормальном завершении соединения удаляется из потока. Сообщение от модуля транспортного протокола, свидетельствующее об аварийном завершении соединения, приводят к тому, что все последующие обращения к потоку с помощью системных вызовов и заканчиваются неудачей с присваиванием переменной errno значения ENXIO. Обращения к потоку с помощью системных вызовов и , после того, как все имеющиеся данные будут считаны, вернут сообщение с областью данных нулевой длины, представляющее конец файла. Все остальные сообщения с непустой управляющей областью вызывают ошибку в потоке, при этом все последующие обращения к потоку заканчиваются неудачей, а переменной errno присваивается значение EPROTO.
Удаление модуля из потока Когда модуль tirdwr удаляется из потока, а также при закрытии потока выполняются следующие действия:
Если ранее было получено сообщение, свидетельствующее о нормальном завершении соединения, на удаленную сторону соединения на транспортном уровне посылается сообщение о нормальном завершении соединения. Если ранее было получено сообщение, свидетельствующее об аварийном завершении соединения, не делается ничего. Если сообщений о завершении соединения получено не было, на удаленную сторону соединения на транспортном уровне посылается сообщение об аварийном завершении соединения. Если в потоке обнаружена ошибка и ранее было получено сообщение, свидетельствующее об аварийном завершении соединения, на удаленную сторону соединения на транспортном уровне посылается сообщение об аварийном завершении соединения.
tm - связывание стандартного ввода/вывода с последова- тельным портом
СИНТАКСИС
tm номер_порта
ОПИСАНИЕ
Команда tm открывает последовательный порт с указанным номером и связывает его со стандартным вводом/выводом. Это означает, что все данные, пришедшие из порта, передаются на стандартный вывод, а каждый символ, пришедший со стандартного ввода (например, с клавиатуры), посылается в порт.
После ввода комбинации символов ~. связь разрывается.
ФАЙЛЫ
/dev/tty* Последовательные порты.
СМ. ТАКЖЕ
.
СЮРПРИЗЫ
Необходимо обладать правами, достаточными для открытия файла /dev/ttyномер_порта.
Функция tmpfile создает временный файл с именем, сгенерированным функцией , и возвращает указатель на соответствующую структуру FILE. Если файл не может быть открыт, то посредством печатается сообщение об ошибке и возвращается пустой указатель, NULL. Файл автоматически удаляется, когда завершается использующий его процесс. Файл открывается для работы в режиме изменения ("w+").
С помощью этих функций создаются имена, которые можно без опасений использовать для именования временных файлов.
Функция tmpnam всегда образует имя файла, используя маршрутный префикс, определяемый константой P_tmpdir во включаемом файле <stdio.h>. Если указатель s пустой (равен NULL), то функция помещает результат во внутреннюю статическую область и возвращает адрес этой области. При следующем вызове tmpnam содержимое статической области изменится. Если s не равно NULL, то его значение рассматривается как адрес массива длины не менее L_tmpnam байт, где L_tmpnam - константа, определенная в <stdio.h>; функция помещает результат в этот массив и возвращает s.
Функция tempnam дает пользователю возможность выбирать каталог. Аргумент dir указывает на имя каталога, в котором нужно создать файл. Если dir равен NULL или ссылается на цепочку символов, не являющуюся именем подходящего каталога, то имя строится с использованием константы P_tmpdir. Если и этот каталог недоступен, в качестве последнего шанса будет использован /tmp. Указанная последовательность действий игнорируется, если определена переменная окружения TMPDIR; именно ее значение задает имя каталога временных файлов.
Во многих случаях предпочтительны имена файлов, начинающиеся определенной последовательностью символов. Для создания таких имен предусмотрен аргумент pfx. Этот аргумент может иметь значение NULL или быть ссылкой на цепочку длиной до 5 символов, которая должна использоваться в качестве первых символов имени временного файла.
Функция tempnam вызывает функцию для получения области памяти под конструируемое имя, и возвращает ссылку на эту область. Таким образом, значение указателя, возвращаемого функцией tempnam, может служить аргументом функции free [см. ]. Если tempnam по каким-либо причинам не может возвратить ожидаемый результат (например, неудачно завершилась функция malloc или не удалось найти подходящий каталог), то возвращается пустой указатель.
ПРИМЕЧАНИЯ
При каждом обращении эти функции создают новое имя.
Файлы, созданные с помощью описанных функций и функций или , являются временными только в том смысле, что они хранятся в каталоге, предназначенном для временного использования, и их имена уникальны. Для удаления этих файлов, когда в них отпала необходимость, пользователь должен применить системный вызов .
СМ. ТАКЖЕ
, , , , , .
ОГРАНИЧЕНИЯ
При вызове более 17576 раз в одном процессе эти функции начнут циклически выдавать уже созданные ранее имена.
В промежутке между образованием имени файла и его открытием другой процесс может создать файл с тем же именем. Этого никогда не случится, если упомянутый "другой" процесс создает файл с помощью описываемых функций или функции mktemp, а имена файлов выбираются так, чтобы дублирование по другим причинам было маловероятным.
Описанные ниже команды расположены в каталоге /usr/bin/graf [см. ].
dtoc [каталог]
Команда dtoc записывает на стандартный вывод текстовое оглавление (ТОГ), всех подкаталогов указанного каталога (по умолчанию используется текущий каталог). На каждый каталог в оглавлении отводится по одной строке. Строка состоит из трех полей: номер, показывающий место (под)каталога в иерархии, его имя и число обычных файлов, доступных на чтение. Команда dtoc полезна для того, чтобы получить наглядное представление обо всей файловой системе или ее части. Чтобы изобразить все доступные каталоги на экране терминала типа Tektronix 4010, достаточно построить конвейер:
Команда vtoc по текстовому представлению оглавления (ТОГ) создает графический образ в виде GPS-файла [см. ]. Графический образ состоит из прямоугольников с текстом, образующих древовидную структуру. Если ТОГ_файл не задан, используется стандартный ввод. Каждая строка ТОГ_файла описывает один прямоугольник и имеет следующий вид:
номер [толщина,тип] "текст" [метка]
номер
Чередующаяся последовательность чисел и точек, задает положение элемента оглавления в иерархии. Номер 0. определяет корень дерева.
толщина
Толщина линий может быть следующей:
n
тонкая линия
m
средняя линия
b
толстая линия
тип
Тип линий может быть следующим:
so
сплошная линия
do
точечная линия
dd
штрихпунктирная линия
da
пунктирная линия
ld
длинно-пунктирная линия
текст
Текст - это цепочка символов, заключенная в кавычки. Текст между кавычками становится содержимым прямоугольника. Чтобы включить в текст кавычку, ее нужно экранировать (\").
метка
Метка - это цепочка символов. Метка надписывается над правым верхним углом прямоугольника. Символы метки, интерпретируемые shell'ом, должны быть экранированы.
Пример элемента оглавления:
1.1 b,da "udd" USER
Элементы оглавления могут занимать больше одной строки, если промежуточные переводы строк экранированы.
В произвольном месте ТОГ_файла могут располагаться комментарии, окруженные парами символов /* и */.
Опции команды vtoc:
-c Использовать текст так, как он введен (по умолчанию все буквы преобразуются в строчные).
Эти фaйлы coдepжaт тoпoлoгичecкyю инфopмaциию, т.e. инфopмaцию o тoм, кaк oтдeльныe cиcтeмы в ceти cвязaны, кaким пyтeм пepeдaeтcя cooбщeниe oт oднoй cиcтeмы к дpyгoй. Kaждый фaйл coдepжит oднy или бoлee тeкcтoвыx cтpoк, oпpeдeляющиx cвязь или пyть пepeдaчи.
Фaйл top oпpeдeляeт cвязь мeждy cиcтeмaми в ceти. Kaждaя cтpoкa в фaйлe coдepжит имeнa мaшин cвязaнныx cиcтeм, пocлeдoвaтeльнyю линию, иcпoльзyeмyю для cвязи, и cкopocть пepeдaчи в бoдax. Cтpoкa имeeт фopмaт:
touch - изменение времени доступа и модификации файла
СИНТАКСИС
touch [-a] [-m] [-c] [время] файл ...
ОПИСАНИЕ
Команда touch изменяет времена доступа и модификации всех файлов-аргументов. Если файл с указанным именем не существует, то он создается. Время задается в том же формате, что и для команды :
ммддччмм[гг]
(месяц, день, часы, минуты, год). Если время не указано, то используется текущее время.
Опциям команды touch приписан следующий смысл:
-a
Изменить только время последнего доступа.
-m
Изменить только время последней модификации.
-c
Не создавать файлы, если они не существуют.
Кодом завершения команды touch является количество файлов, у которых времена не могут быть успешно изменены (включая файлы, которые не удалось создать).
Команда tplot считывает команды графопостроителя [см. ] со стандартного ввода и выдает на стандартный вывод графические команды, ориентированные на определенный тип терминала (особым образом обрабатывается терминал ver). Если терминал не задан, используется значение переменной окружения $TERM [см ].
Допустимы следующие типы терминалов:
300
DASI 300.
300S
DASI 300s.
450
DASI 450.
4014
Tektronix 4014.
ver
Принтер-плоттер Versatec D1200A. В этом случае растровый образ запоминается в файле /usr/tmp/raster$$ и тут же выдается на устройство, а не на стандартный вывод. Смысл опции:
-e файл
Вывести на плоттер растровый образ, предварительно сохраненный в файле.
С помощью команды tput, использующей базу данных , shell [см. ] получает доступ к информации и характеристикам, зависящим от типа конкретного терминала. Посредством этой команды можно также инициализировать или переустановить терминал, получить длинное имя запрашиваемого типа терминала. Если атрибут с заданным именем является цепочкой символов, то команда tput возвращает цепочку символов; если атрибут является целым числом, то возвращается целое число. Если же атрибут логического типа, то tput просто устанавливает код завершения [0 (истина), если терминал имеет данную характеристику; 1 (ложь), если он ее не имеет] и ничего не выводит. Прежде чем использовать выданное на стандартный вывод значение, следует проверить код завершения [$?, см. ]. Полный список атрибутов (характеристик) терминалов и их имен можно найти в .
-T тип_терминала
Явное задание типа терминала. Обычно данная опция не нужна, так как по умолчанию используется значение переменной окружения $TERM. Если опция -T задана, то переменные shell'а LINES и COLUMNS не используются.
имя_атрибута
Обозначает атрибут базы данных .
аргумент
Если атрибут есть цепочка символов и требует аргументов, они берутся из командной строки. Чисто числовой аргумент передается как число.
init Если база данных существует и пользовательский терминал в ней описан (см. выше опцию -T), то происходит следующее:
Выводятся (если они есть) цепочки символов, инициализирующие терминал (is1, is2, is3, if, iprog). Любые задержки (например, перевод строки), указанные в описании, будут установлены в драйвере tty. В соответствии со спецификацией будет включен или выключен режим преобразования табуляции в последовательность пробелов. Если символы табуляции не преобразуются в последовательность пробелов, будут установлены стандартные позиции табуляции (каждая восьмая).
Если описание не содержит информации, необходимой для какого-либо шага, этот шаг просто опускается.
reset Вместо вывода символов инициализации будут выве дены (если они есть) цепочки символов переуста новки (rs1, rs2, rs3, rf). Если таких цепочек нет, но есть цепочки инициализации, то будут вы ведены последние. Во всем остальном reset дейст вует аналогично init.
longname
Если база данных существует и пользовательский терминал в ней описан (см. выше опцию -T), то выводится длинное имя терминала. Длинное имя - это последнее имя в первой строке описания терминала в базе [см. ].
ПРИМЕРЫ
Инициализировать терминал в соответствии с его типом, заданным переменной окружения TERM. Данную команду следует включать в профайл после экспортирования переменной TERM [см. ]:
tput init
Переустановить терминал типа vt100, не принимая во внимание переменную окружения TERM:
tput -T vt100 reset
Послать управляющую последовательность для установки курсора в левый верхний угол экрана:
Вывести число колонок на экране используемого терминала:
tput cols
Установить код завершения, отражающий возможность получения на текущем терминале твердой копии экрана:
tput hc
Выдать из базы длинное имя для типа терминала, задаваемого переменной окружения TERM.
tput longname
ФАЙЛЫ
/usr/lib/terminfo/?/* Скомпилированная база данных описаний терминала. /usr/include/curses.h Файл заголовка для . /usr/include/term.h Файл заголовка для . /usr/lib/tabset/* Установки позиций табуляции для некоторых терминалов в формате, приемлемом для вывода (управля- ющие последовательности, уста- навливающие границы и позиции табуляций) [см. ].
СМ. ТАКЖЕ
, . , в Справочнике программиста.
КОДЫ ЗАВЕРШЕНИЯ
Если атрибут - логического типа, то 0 обозначает значение истина, а 1 - ложь.
Если атрибут имеет тип цепочки символов, то устанавливается значение 0 в случае, если этот атрибут определен для данного типа терминала (значение атрибута выдается на стандартный вывод); значение 1 устанавливается, если атрибут не определен для данного типа терминала (на стандартный вывод выдается пустое значение).
Если атрибут - целого типа, то всегда устанавливается значение 0, независимо от того, определен ли атрибут для данного типа терминала. Для того, чтобы выяснить, определен ли атрибут, надо проверить выдаваемое на стандартный вывод значение. -1 означает, что атрибут не определен для данного типа терминала.
Любой другой код завершения означает ошибку.
ДИАГНОСТИКА
Команда tput при ошибках выдает в стандартный протокол следующие сообщения и возвращает такие коды завершения:
Код Сообщение об ошибке
0
-1 (выдается на стандартный вывод). Атрибут является числовым и для данного типа терминала не определен.
1
Сообщение об ошибке не выводится, см. выше КОДЫ ЗАВЕРШЕНИЯ.
Команда tr копирует стандартный ввод на стандартный вывод с заменой либо удалением выбранных символов. Введенные символы, найденные в цепочке_1, заменяются на соответствующие символы из цепочки_2. Допускаются любые комбинации опций -cds:
-c
Цепочка_1 заменяется ее дополнением до множества ASCII-символов с восьмеричными кодами от 001 до 377.
-d
Все входные символы, принадлежащие цепочке_1, будут удалены.
-s
Последовательности одинаковых входных символов, принадлежащих цепочке_2, сжимаются до одного.
Чтобы помещать в цепочки отрезки алфавита и повторяющиеся символы, можно использовать следующие сокращения:
[c1-c2]
Обозначает цепочку символов, коды ASCII которых принадлежат отрезку от кода символа c1 до c2.
[c*n]
Обозначает символ c, повторенный n раз. Если первая цифра в n есть 0, n рассматривается как восьмеричное число; иначе - как десятичное. Нулевое или отсутствующее n воспринимается как "очень много"; эта возможность полезна при дополнении цепочки_2 до длины цепочки_1.
Управляющий символ \ можно использовать, как и в языке shell, чтобы отменить трактовку символа в цепочке-аргументе как специального. Кроме того, \, за которым идут одна, две или три восьмеричные цифры, обозначает символ, код ASCII которого выражается этими цифрами.
ПРИМЕР
Следующая команда помещает список всех слов из файла f1, по одному на строку, в файл f2. Под словом понимается максимальная последовательность букв. Цепочки-аргументы берутся в кавычки, чтобы shell не интерпретировал специальные символы; 012 - ASCII-код перевода строки.
tr -cs "[A-Z][a-z]" "[\012*]" f2
СМ. ТАКЖЕ
, .
в Справочнике программиста.
СЮРПРИЗЫ
Символ ASCII NUL (код 000) не может входить ни в цепочку_1, ни в цепочку_2; всегда удаляется из ввода.
translate - преобразовывает файлы из одного формата в другой.
СИНТАКСИС
translate option [infile][outfile]
ОПИСАНИЕ
Команда translate преобразовывает файлы согласно определенным опциям. Преобразование выполняется согласно опциям, описанным ниже.
Под параметром format понимается файл, размещенный в каталоге /usr/lib/mapchan/translate, если не задано полное имя пути.
Команда translate использует стандартный ввод и стандартный вывод до тех пор, пока не будут определены другой источник и получатель через необязательные аргументы имени файла.
ОПЦИИ
-ea
из формата EBCDIC в формат ASCII.
-ae
из формата ASCII в формат EBCDIC.
-fe
format из формата, определенного пользователем, в формат EBCDIC.
-fa
format из формата, определенного пользователем, в формат ASCII.
-ef
format из формата EBCDIC в формат, определенный пользовалем.
-af
format из формата ASCII в формат, определенный пользователем.
-bm
из двоичного/объектного кода в доступный для передачи формат ASCII uuencode.
-mb
из формата ASCII uuencode в первоначальный двоичный формат.
ФАЙЛЫ
/usr/lib/map/translate/*
СМ. ТАКЖЕ
, , , .
ЗАМЕЧАНИЯ
Опции -bm и -mb, например, используются для преобразования объектного выполняемого кода в код ASCII для передачи через сети связи.
Синтаксис для файла, имеющего формат, определенный пользователем, совпадает с синтаксисом для отображения файлов, применяемого командами mapchar(5) и trchan.
Используйте опцию 'dd' для преобразования форматов файлов и символов (особенно для ленты) в указанный формат. Пример:
Эта команда читает ленту в формате EBCDIC, содержащую десять 80-байтовых карточных образов в коде EBCDIC на одну запись, и переписывает ее в файл outfile в формате ASCII. Для более детального описания опций преобразования посмотрите команду в Руководстве по системе XENIX (XENIX Reference).
Команда trap используется, когда надо выполнить заданную команду command по получении определенного сигнала или события в системе. Аргумент condition задает различные условия.
Могут быть следующие ситуации:
command отсутсвует или равен "-"
восстанавливается стандартная реакция на сигналы;
command - пустая строка
сигналы игнорируются;
condition = 0 или exit
команда command выполняется при завершении интерпретатора;
condition = err
команда command выполняется при обнаружении ошибки;
condition - символическое или числовое обозначение сигнала
команда command выполняется при получении указанного сигнала.
trchan представляет отображение как фильтр, использующий такой же формат mapfile, как и (описанный в mapchan (3)). Это позволяет файлу, содержащему один набор внутренних символов для "передачи" в другой набор внутренних символов.
trchan считывает стандартный ввод, отображает его и записывает в стандартный символ. Файл mapfile должен задаваться командной строкой.Ошибки вызывают trchan для того, чтобы остановить обработку, иначе определяется -с.
Следующие параметры могут использоваться с trchan:
-c
вызывает ошибки для отражения на stderr, и обработка продолжается.
-i
определяет, что область "ввода" mapfile используется при передаче данных.
-k
определяет, что "мертвые" и "составные" области mapfile используются при передаче данных.
-o
определяет, что область "вывода" mapfile используется при передаче данных.
Параметры -i, -k и -o могут определяться в любой комбинации; если ни один не определяется, trchan использует ввод mapfile, как если бы все три были определены вместе.
ФАЙЛЫ
/usr/lib/mapchan/*
СМ. ТАКЖЕ
, mapchan(3),
ПРИМЕЧАНИЯ
trchan в настоящий момент игнорирует области control в mapfile.
trig: sin, cos, tan, asin, acos, atan, atan2 - тригонометрические функции
СИНТАКСИС
#include <math.h>
double sin (x) double x;
double cos (x) double x;
double tan (x) double x;
double asin (x) double x;
double acos (x) double x;
double atan (x) double x;
double atan2 (y, x) double x, y;
ОПИСАНИЕ
Функции sin, cos и tan возвращают, соответственно, синус, косинус и тангенс своего аргумента, заданного в радианах.
Функция asin возвращает значение arcsin (x) в диапазоне от - П/2 до П/2.
Функция acos возвращает значение arccos (x) в диапазоне от 0 до П.
Функция atan возвращает значение arctg (x) в диапазоне от - П/2 до П/2.
Функция atan2 возвращает значение arctg (y/x) в диапазоне от - П до П, используя знаки обоих аргументов для определения квадранта, которому должно принадлежать возвращаемое значение.
СМ. ТАКЖЕ
.
ДИАГНОСТИКА
При вычислении значений функций sin, cos и tan для значений аргумента, далеких от нуля, происходит потеря точности. При достаточно больших значениях аргумента, когда происходит полная потеря значимости, эти функции возвращают нулевое значение; при этом в стандартный протокол будет выдано соответствующее сообщение. В не столь крайнем случае, когда происходит лишь частичная потеря значимости, сообщение об ошибке не выдается. В обоих случаях переменной errno присваивается значение ERANGE.
Если абсолютная величина аргумента функций asin или acos превышает 1, либо оба аргумента функции atan2 равны нулю, то будет возвращено нулевое значение, а переменной errno присвоено значение EDOM. Кроме того, в стандартный протокол будет выдано сообщение о выходе за границы области определения.
Изложенная процедура обработки ошибок может быть изменена посредством функции .
Функции tsearch, tfind, tdelete и twalk предназначены для выполнения операций над бинарными деревьями поиска. Функции реализованы на основе алгоритмов, описанных в книге Д. Кнута: Искусство программирования для ЭВМ. Т. 3. Сортировка, поиск. - М.: Мир, 1978. Раздел 6.2.2, алгоритмы T и D. Операции сравнения выполняются с помощью функции, предоставляемой пользователем. Функция сравнения вызывается с двумя аргументами - указателями на сравниваемые элементы. В соответствии с тем, какое целое число она возвращает: меньшее нуля, равное нулю или большее нуля, первый аргумент считается меньшим, равным или большим по отношению ко второму. В сравнении не обязательно должен участвовать каждый байт, поэтому элементы, в дополнение к сравниваемым величинам, могут содержать произвольные данные.
Функция tsearch используется для построения дерева и доступа к нему. Аргумент key является указателем на искомые данные (ключ). Если в дереве есть узел с данными, равными искомым, то результатом функции служит указатель на этот узел, первым полем которого является указатель на данные. В противном случае в дерево вставляется узел со ссылкой на искомые данные и возвращается указатель на него. Отметим, что копируются только указатели, поэтому вызываемая программа сама должна хранить данные. Аргумент rootp указывает на переменную, которая является указателем на корень дерева. Значение NULL переменной, на которую указывает rootp, означает пустое дерево; в этом случае переменная устанавливается равной указателю на данные, которые окажутся в корне нового дерева.
Подобно функции tsearch, функция tfind осуществляет поиск данных в дереве, возвращая в случае успеха указатель на узел. Однако в случае неудачного поиска функция tfind возвращает пустой указатель NULL. Аргументы для функции tfind такие же, как и для функции tsearch.
Функция tdelete удаляет узел из бинарного дерева поиска. Аргументы такие же, как и для функции tsearch. Переменная, на которую указывает rootp, изменяется, если удаляемый узел является корнем дерева. Функция tdelete возвращает указатель на предка удаляемого узла или пустой указатель NULL, если узел не найден.
Функция twalk осуществляет обход бинарного дерева поиска. Аргумент root указывает на корень обрабатываемого дерева. Любой узел может быть использован в качестве корня для обхода соответствующего поддерева. Аргумент action - это функция, которая вызывается для каждого узла. Она в свою очередь имеет три аргумента. Первым аргументом служит адрес текущего узла. Второй аргумент - это значение перечисляемого типа данных, определенного во включаемом файле <search.h> как
Команда tset обеспечивает зависимые от типа терминала установки, такие как установку символов erase и kill, установки или сброс задержек и т.д. Они задаются файлами /etc/ttytype и /etc/termcap.
Тип терминала определяется аргументом type. Он может быть любым типом, имеющимся в файле /etc/termcap. Если аргумент type не определен, то типу терминала присваивается значение переменной среды TERM, если не установлен флаг -h или не задан аргумент -m. В этом случае значение типа читается из файла /etc/ttytype (это имя порта в базе данных, описывающую тип терминала). Имя порта определяется вызовом ttyname(2) в диагностическом выводе. Если в файле /etc/ttytype порт не найден, то типу терминала присваивается значение unknown (неизвестный).
Порты, для которых тип терминала не определен, обозначаются в файле /etc/ttytype как dialup, plugboard и т.д. Пользователь может определить, как эти идентификаторы будут отображаться на действительный тип терминала. За флагом отображения -m следует соответствующий идентификатор (подстрока из четырех или более символов), необязательная тестовая последовательность для проверки скорости передачи и тип терминала, которые будут использованы, если условия отображения удовлетворены. Если определено более одного отображения, то используется первое корректирующее отображение. Пропущенный идентификатор выравнивает все идентификаторы. Скорости передачи (в бодах) определяются как в команде и сравниваются со скоростью диагностического вывода. Тестовая последовательность может быть любой комбинацией из знаков >, =, <, @ , ! (Замечание: знак @ является синонимом '=', а '!' инвертирует последовательность теста. Обратите внимание, что исключающие символы имеют важное значение в интерпретаторе shell).
Если аргумент type, определенный как описано выше, начинается со знак вопроса, пользователю выдается запрос, действительно ли он хочет работать с терминалом данного типа. Пустой ответ означает использование этого типа; иначе, может быть введен другой тип, который будет использован вместо предложенного. (Знак вопроса должен быть исключен для предохранения расширения имени файла интерпретатором shell).
Команда tset наиболее удобна, когда включается в файлы .login (для команды ) или .profile (для команды ), автоматически выполняемые при регистрации, с флагом отображения -m, используемым для определения типа терминала, который вы считаете наиболее удобным для подключения.
ОПЦИИ
-e
эта опция устанавливает соответствие между символом erase и указанным символом 'c', который по умолчанию равен Ctrl-H.
-E
этот флаг идеинтичен флагу -e, кроме того, что он используется на терминалах, которые допускают забой.
-k
эта опция устанавливает соответствие между символом kill и указанным символом 'c', который по умолчанию равен Ctrl-U. Во всех этих флагах '^X' (X - любой символ) эквивалентно Ctrl-X.
-
эта опция печатает тип терминала на стандартном устройстве вывода; это может быть использовано с целью получения информации о типе терминала; для этого наберите:
set termtypy = 'test-'
Если другие опции не заданы, команда test выполняется в быстром режиме ("fast mode") и выводит только тип терминала, пропуская все остальные данные.
-h
вынуждает команду test осуществлять поиск информации в файле /etc/ttytype и пересмотр переменной среды TERM.
-s
эта опция выводит команды setenv (если ваш интерпретатор shell по умолчанию - ) или команды назначения и команды export (если ваш стандартный shell - ). Для опции -s с интерпретатором Bourne shell наберите:
tset -s .>/tmp/tset$$ /tmp/tset$$ rm /tmp/tset$$
-S
эта опция только печатает строки, размещенные в переменной среды. Если вы используйте csh, наберите:
set noglob set term = ('tset -S .' setenv TERM $term[1] setenv TERMCAP "$term[2] unset term unset noglob
-r
эта опция высвечивает тип терминала на диагностическом устройстве вывода.
-Q
эта опция подавляет высвечивание предложений "Erase set to" и "Kill set to".
-I
эта опция подавляет вывод строк, описывающих инициализацию терминала.
-m
эта опция является флагом отображения. Она используется для определения типа терминала, который вы наиболее часто используйте. За ним следует соответствующий идентификатор вашего терминала, находящийся в файле /etc/ttytype. Когда вы подключаетесь к системе, этот флаг присваивает типу терминала значение ident, если вы не определили иначе.
ПРИМЕРЫ
tset gt42
Присваивает типу терминала значение gt42.
tset -m dialup\>300:adm3a -m dialup:dw2 -Qr -e#
Если элемент в файле /etc/ttytype, соответствующий порту регистрации, имеет имя dialup, а скорость передачи порта больше 300 бод, тип терминала будет иметь значение adm3a. Если тот-же элемент в том же файле имеет имя dialup, но скорость передачи меньше или равна 300 бод, то тип терминала будет иметь значение dw2. Символу erase присвоено значение символа #, а тип терминала (но не символ erase) высвечивается на стандартном устройстве вывода.
Если элемент файла /etc/ttytype начинается с dial, тип терминала имеет значение ti733. Если элемент начинается с plug, то команда test выдает подсказку:
TERM = (hp2621)
Если он отличается от желаемого, то наберите новый тип терминала. Если элемент - unknown, то будет выдано сообщение:
TERM = (unknown)
В любом случае символу "пробел" присвоено значение символа erase, тип терминала будет высвечен на стандартном устройстве вывода ошибок, а комбинации Ctrl-U присвоено значение символа kill.
ФАЙЛЫ
/etc/ttytype Имя порта в базе данных, содержащей типы терминалов /etc/termcap База данных, описывающая возможности те- рминала
СМ. ТАКЖЕ
, termcap(5), .
РАЗРЕШЕНИЕ
Эта утилита была разработана в Калифорнийском Университете, г.Беркли, и разрешена к использованию.
Команда tsort выдает на стандартный вывод полностью упорядоченный список элементов в соответствии с частичным порядком, заданным во входном файле. Если файл не указан, то данные берутся со стандартного ввода.
Исходными данными служат пары элементов (непустых цепочек символов), разделенных пробелами. Упорядоченность задается парами различных элементов. Пара одинаковых элементов означает лишь наличие элемента и никакой упорядоченности не задает.
СМ. ТАКЖЕ
.
ДИАГНОСТИКА
Odd data:
В исходном файле нечетное число элементов.
Cycle in data:
Заданная упорядоченность содержит циклы.
СЮРПРИЗЫ
Если программа tsort встречает цикл более чем из двух элементов, она зацикливается без выдачи диагностики.
Команда tstmode передает командный запрос драйверу устройства и устанавливает заданный шестнадцатеричный режим_тестирования. Работает ли режим тестирования и как именно это происходит, целиком зависит от драйвера устройства. Во включаемом файле перечислены известные биты режимов тестирования. Драйверы дисков способны работать в тестовом режиме.
В каждом процессе специальный файл /dev/tty является синонимом управляющего терминала для данной группы процессов (если, конечно, управляющий терминал существует). Полезно обращаться к этому файлу для выдачи сообщений на терминал, когда стандартный вывод может быть переназначен, или когда трудно определить, какой именно терминал используется.
ttycp - копирование между последовательными портами
СИНТАКСИС
ttycp [источник [приемник]]
ОПИСАНИЕ
Команда ttycp копирует информацию из указанного файла-источника (по умолчанию - со стандартного ввода) в файл-приемник (по умолчанию на стандартный вывод). И источник, и приемник могут быть как последовательным интерфейсом, так и обычным файлом. В противоположность команда ttycp позволяет организовать "наглядное" копирование данных между последовательными портами.
ПРИМЕРЫ
Копировать ввод из /dev/tty1 в файл test.out:
ttycp /dev/tty1 test.out
Передать данные из файла test.out в /dev/tty2:
ttycp test.out /dev/tty2
Передать данные из /dev/tty1 в /dev/tty2:
ttycp < /dev/tty1 > /dev/tty5
ФАЙЛЫ
/dev/tty* Последовательные порты.
СМ. ТАКЖЕ
.
СЮРПРИЗЫ
Необходимо обладать правами, достаточными для открытия файла /dev/ttyномер_порта.
Функция ttyname возвращает указатель на цепочку символов, оканчивающуюся нулем и содержащую маршрутное имя терминального устройства, ассоциированного с дескриптором файла fildes.
Функция isatty возвращает 1, если fildes ассоциирован с терминалом, и 0 в противном случае.
ФАЙЛЫ
/dev/*
ДИАГНОСТИКА
Функция ttyname возвращает пустой указатель NULL, если fildes не описывает терминальное устройство в каталоге /dev.
ОГРАНИЧЕНИЯ
Значение, возвращаемое функцией ttyname, указывает на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.
B фaйлe /etc/ttys coдepжитcя cпиcoк cпeциaльныx фaйлoв, cвязaнныx c тepминaлaми, дocтyпными для peгиcтpaции, и oпpeдeляeтcя кaкиe из фaйлoв oткpывaютcя пpoгpaммoй вo вpeмя зaгpyзки.
Фaйл coдepжит oднy или нecкoлькo cтpoк в фopмaтe:
state mode name
Name - имя cпeциaльнoгo фaйлa ycтpoйcтвa (тpeбyeтcя тoлькo имя, пoдpaзyмeвaeтcя кaтaлoг /dev). Peгиcтpaция paзpeшeнa, ecли state paвнo "1", и зaпpeщeнa, ecли state paвнo "0". Mode иcпoльзyeтcя кaк apгyмeнт пpoгpaммы .
ttyslot - поиск элемента, соответствующего текущему пользователю, в файле utmp
СИНТАКСИС
int ttyslot ( )
ОПИСАНИЕ
Результатом функции ttyslot является номер элемента, соответствующего текущему пользователю, в файле /etc/utmp. Для этого просматривается файл /etc/inittab в поисках имени терминала, ассоциированного со стандартными вводом, выводом или протоколом (дескрипторы файлов 0, 1 или 2).
ФАЙЛЫ
/etc/inittab /etc/utmp
СМ. ТАКЖЕ
, .
ДИАГНОСТИКА
Если в процессе поиска имени терминала происходит ошибка, или ни один из указанных выше дескрипторов файлов не связан с терминалом, возвращается значение 0.
В файле /etc/ttytype содержатся определения типов терминалов для специальных файлов из каталога /dev. При входе в систему выполняется файл /etc/profile. Этот файл содержит последовательность команд:
в результате выполнения которой устанавливается переменная окружения TERM. Программы, использующие специальные возможности терминала [например, ], читают значение переменной TERM и используют его в качестве ключа для базы данных termcap или .
Типы данных, определенные в этом включаемом файле, используются в системных программах; некоторые данные этих типов доступны пользовательским программам:
typedef struct { int r[1]; } * physadr; typedef long daddr_t; typedef char * caddr_t; typedef unsigned char unchar; typedef unsigned short ushort; typedef unsigned int uint; typedef unsigned long ulong; typedef ushort ino_t; typedef short cnt_t; typedef long time_t; typedef int label_t[10]; typedef short dev_t; typedef long off_t; typedef long paddr_t; typedef long key_t; typedef unsigned char use_t; typedef short sysid_t; typedef short index_t; typedef short lock_t; typedef unsigned int size_t;
Тип daddr_t используется для адресации диска, кроме адресов в описателях файлов; см. . Время измеряется в секундах, начиная с 00:00:00 1 января 1970 года (по Гринвичу). Старшие и младшие номера устройств определяют вид и номер устройства и зависят от конкретной конфигурации. Смещение измеряется в байтах от начала файла. Переменные типа label_t используются для сохранения состояния процессора на время выполнения другого процесса.
Пepeмeннaя кoмaнднoй cpeды TZ пpeднaзнaчeнa для зaдaния чacoвoгo пoяca, ee знaчeниe мoжeт быть ycтaнoвлeнo в фaйлax /etc/rc, /.profile, /etc/default/login.
Фaйл /etc/tz, выпoлняeмый, глaвным oбpaзoм, вo вpeмя нacтpoйки, зaпpaшивaeт чacoвo пoяc и выпoлняeт нeoбxoдимыe измeнeния в cooтвeтcтвyющиx фaйлax.
Зaпpaшивaютcя тaкжe дaты пepexoдa нa лeтнee вpeмя и oбpaтнo, чacoвaя paзницa мeждy лeтним и cтaндapтным вpeмeнeм.
Команда unix2dos служит для преобразования форматов текстовых файлов UNIX к MSDOS формату. Известно, что форматы текстовых файлов в DOS и в UNIX немного отличаются: в DOS все строки заканчиваются парой символов CR и LF (возврат каретки и перевод строки), а UNIX использует только символ LF (перевод строки), справедливо полагая, что второй символ совершенно излишен. В командной строке аргумент infile служит для определения UNIX - файла, а аргумент outfile используется для задания имени ничем не отличающегося по содержанию текстового файла, но уже в DOS формате.
-z
служит для записи символа конца файла EOF.
-?, -h
используются для выдачи на печать списка доступных опций.