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 Кобол, второй компактный формат. -f 1,7,11,15,19,23 Фортран. -p 1,5,9,13,17,21,25,29,33,37,41,45,49,53,57, 61 ПЛ/1. -s 1,10,55 Снобол. -u 1,12,20,44 Ассемблер, UNIVAC 1100.
-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 может также использоваться для копирования каталогов вместе с иерархической структурой подкаталогов при помощи следующей конструкции:
cd fdir; /etc/tar cf - . |(cd tdir; /etc/tar xf -)
b Если указан этот модификатор, то аргумент блок используется, как коэффициент блокирования для записей на ленте. По умолчанию он равен 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?Описание
aestr(P)Закончить альтернативный набор символов
alstr(P*)Добавить новую чистую строку
ambool Терминал имеет автоматические поля
asstr(P)Начать альтернативный набор символов
bcstr Backspace, если не ^H
bsbool Можно backspace c ^H
btstr(P)Обратный табулятор
bwbool(P)Переходы по backspace c позиции 0 на последнюю
CCstr Командный символ в прототипе, если
cdstr(P*)Очистить до конца терминала
cestr(P)Очистить до конца строки
CFstr Курсор из
chstr(P) Как cm, но только горизонтальное движение, строка остается такой же
CLstr Посылается с помощью ключа CHAR LEFT
clstr(P*)Очистить экран
cmstr(P)Движение курсора
conum Номер позиции строки
COstr Курсор на
crstr(P*)Вернуть каретку (по умолчанию ^M)
csstr(P)Изменить область просматривания (vt100), как cm
cvstr(P)Как ch, но только по вертикали
CWstr Посылается с помощью клавиши CHANGE WINDOW
dabool Дисплей может сохраняться выше
DAbool Удалить атрибутивную строку
dbbool Дисплей может быть сохранен ниже
dBnum Необходимое количество миллисекунд bs задержки
dCnum Необходимое количество миллисекунд cr задержки
dcstr(P*)Удалить символ
dFnum Необходимое количество миллисекунд ff задержки
dlstr(P*)Удалить строку
dmstr Удалить режим (ввода)
dNnum Необходимое количество миллисекунд nl задержки
dostr Спуститься на одну строку
dTnum Необходимое количество миллисекунд tab задержки
edstr Закончить режим удаления
eistr Закончить режим вставки; дается ':ei=:', если ic
ENstr Посылается ключем END
eobool Можно удалить лишние удары, вместо них пробелы
ffstr(P*)Выброс документальной копии страницы терминала (по умолчанию ^L)
G1str Верхний правый (1ый квадрант) угловой символ
G2str Верхний левый (2ой квадрант) угловой символ
G3str Нижний левый (3ий квадрант) угловой символ
G4str Нижний првый (4ый квадрант) угловой символ
GCstr Центрирует графический символ (аналогично +)
GDstr Символ нижнего кармана
GEstr Конец графического режима
GGnum Количество символов, забираемое GS и GE
GHstr Горизонтальный штриховой символ
GLstr Символ левого кармана
GRstr Символ правого кармана
GSstr Начало графического режима
GUstr Символ верхнего кармана
MPstr Многократная инициализация строки
MRstr Многократный сброс строки
GVstr Вертикальный штриховой символ
hcbool Терминал документальных копий
hdstr На полстроки вниз (прогонка на 1/2 вперед)
HMstr Посылается клавишей HOME (если нет kh)
hostr Курсор в начало (если нет cm)
hustr Полстроки вверх (прогонка на 1/2 назад)
hzstr Hazeltine; не может печатать ~'
icstr(P)Символ вставки
ifstr Имя файла, содержащее is
imstr Режим вставки (вход); дается ':im=', если ic
inbool Режим вставки различает нули на дисплее
ipstr(P*)Вспомогательный символ вставки после вставленного символа
isstr Строка инициализации терминала
k0-k9str Посылается другими функциональными клавишами 0-9
kbstr Посылается клавишей backspace
kdstr Посылается нижней клавишей управления курсором
kestr Выход из режима 'keypad transmit'
khstr Посылается клавишей HOME
klstr Посылается левой клавишей управления курсором
knnum Количество 'других' ключей
kostr Вводы termcap для других нефункциональных клавиш
krstr Посылается правой клавишей управления курсором
ksstr Установить терминал в режим 'keypad transmit'
kustr Посылается верхней клавишей управления курсором
10-19str Метки на 'других' функциональных клавишах
LDstr Посылается клавишей удаления строки
LFstr Посылается клавишей line feed
linum Количество строк на экране или странице
llstr Последняя строка, первая колонка (если не cm)
mastr Отображение клавиши управления курсором, используемое vi только версией 2
mibool Безопасно для движения, пока в режиме вставки
mlstr Замок памяти на курсоре выше
MPstr Многократная инициализация строки
MRstr Многократный сброс строки
msbool По желанию переход в режим stand out
mustr Нет замка памяти (закрыть замок памяти)
ncbool Неправильно возвращение рабочей каретки (DM2500,H2000)
ndstr Неразрушенная область (курсор вправо)
nlstr(P*)Символ новой строки (по умолчанию \n)
nsbool Терминал - CRT, но не прoсматривает
NUstr Посылается клавишей NEXT UNLOCKED CELL
osbool Терминал набирает лишние удары (на клавиатуре)
pcstr Символ вспомогательной клавиатуры (лучше нуля)
PDstr Посылается клавишей PAGE DOWN
PNstr Начало местной печати
PSstr Конец местной печати
ptbool Имеет символы табуляции аппаратуры (может понадобиться для установки is)
PUstr Посылается клавишей PAGE UP
RCstr Посылается клавишей RECALC
RFstr Посылается клавишей TOGLE REFERENCE
GDstr Символ нижнего кармана
GEstr Конец графического режима
GGnum Количество символов, забираемое GS и GE
GHstr Горизонтальный штриховой символ
GLstr Символ левого кармана
GRstr Символ правого кармана
GSstr Начало графического режима
GUstr Символ верхнего кармана
MPstr Многократная инициализация строки
MRstr Многократный сброс строки
GVstr Вертикальный штриховой символ
RTstr Посылается клавишей RETURN
sestr Закончить режим stand out
sfstr(P)Просмотр вперед
sgnum Количество пробелов, разрешенных so или se
sostr Начать режим stand out
srstr(P)Обратный просмотр (слова наоборот)
tastr(P)Символ табуляции (отличный от ^I 0 или наполнения)
tcstr Ввод подобного терминала - должен осуществляться позже
testr Строка для окончания программ, использующая cm
tistr Строка для начала работы программ, использующая cm
ucstr Подчеркнуть один символ и двигать мимо него
uestr Закончить режим подчеркивания
ugnum Количество пробелов, разрешенных us или ue
ulbool Терминал подчеркивает четные, хотя не делает лишних ударов
upstr Подняться на строку (курсор вверх)
UPstr Посылается клавишей up-arrow (альтернативно ku)
usstr Включить режим подчеркивания
vbstr Очевидный звонок (не может двигаться курсор)
vestr Последовательность для выключения режима open/visual
vsstr Последовательность для выключения режима open/visual
WLstr Посылается клавишей WORD LEFT
WRstr Посылается клавишей WORD RIGHT
xbbool Beehive (f1=escape, f2=ctrl C)
xnbool Новая строка опускается после перехода (Concept)
xrbool Возвращает действия аналогично ce \r \n (Della Data)
xsbool Стандартный выход не убирается при записи над ним (HP 264?)
xtbool Символы табуляции разрушены, магический символ 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)
%BBCD(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. Оно показывает, какие коды генерируют ввод информации с клавиатуры в программу, считывающую содержимое клавиатуры, и какие коды генерируют вывод информации из программы на экран.
ИмяВвод/выводОписание
CFstrКурсор из
CLstrПосылается с помощью клавиши CHAR LEFT
CLstrКурсор на
DAboolУдалить аттрибутивную строку
ENstrПосылается с помощью клавиши END
G1strВерхний правый (1ый квадрант) угловой символ
G2strВерхний левый (2ой квадрант) угловой символ
G3strНижний левый (3ий квадрант) угловой символ
G4strНижний правый (4ый квадрант) угловой символ
GCstrЦентрирует графический символ (аналогично +)
GDstrСимвол нижнего кармана
GEstrКонец графического режима
GGnumКоличество символов, забираемое GS и GE
GHstrГоризонтальный штриховой символ
GLstrСимвол левого кармана
GRstrСимвол правого кармана
GSstrНачало графического режима
GUstrСимвол верхнего кармана
GVstrВертикальный штриховой символ
HMstrПосылается с помощью клавиши HOME(если нет kh)
MPstrМногократная инициализация строки
MRstrМногократный сброс строки
NUstrПосылается клавишей NEXT UNLOCKED CELL
PDstrПосылается клавишей PAGE DOWN
PUstrПосылается клавишей PAGE UP
RCstrПосылается клавишей RECALC
RFstrПосылается клавишей TOGLE REFERENCE
RTstrПосылается клавишей RETURN
UPstrПосылается клавишей up-arrow (альтернативно ku)
WLstrПосылается клавишей WORD LEFT
WRstrПосылается клавишей 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р для терминалов, не поддерживающихся в настоящее время.
ИмяТерминал
33телетайп 33 модели
37телетайп 37 модели
43телетайп 43 модели
300terminet 300
1200terminet 1200
1620diablo 1620
1640diablo 1640
2392239x серии
2392anhp 239x в режиме ansi
2392ne239x серии
2621hp 2621
2621k45hp 2621 c клавиатурой 45
2621nlhp 2621 без меток
2621nthp 2621 w/no символы табуляции
2621wlhp 2621 c метками
2622hp 2622
262xhp 262x серии
2640hp 2640a
2640bhp 264x серии
3045datamedia 3045a
3151ibm3151
3161ibm3161
3163ibm3163
3164ibm3164
4025Tertronix 4024/4025/4027
4025-17Tek 4025 окно 17 линии
4025-17wstek 4025 окно 17 линии в рабочей области
4025exTek 4025
5425AT&T Teлетайп 5425
5425-wAT&T Teлетайп 5425 со 132 колонками
7900NCR 7900-1
8001ISC8001
912bновый Televideo
925новейший Televideo
925soновейший Televideo с
Ma2Ampex Model 232 со 132 линиями
TWO Altos Computer Systems II
a980добавляет consul 980
aaAnn Arbor
aaaAnn Arbor Ambassador/48 линий
aaa30Ann Arbor Ambassador 30/разрушающий backspace
aaadbAnn Arbor Ambassador 48/разрушающий backspace
aaa48dbAnn Arbor Ambassador 48/разрушающий backspace
act5s"худой" act5
adds добавляется точка наблюдения
adds25 добавляется регент 25 с местной печатью
adm11lsi adm11
adm12lsi adm12
adm2lsi adm2
adm3lsi adm3
adm3alsi adm3a
adm3a+lsi adm3a+
adm3a19.2lsi adm3a на 19.2 бод
adm3asolsi adm3a c {} для standout
adm5lsi adm5
adm31Lear Siegler ADM31
adm42lsi adm42
aj830Anderson Jacobson
altos3Altos III
altos4Altos IV
altos5Altos V
amp219Ampex with Automargins
am219wAmpex with 132 колонками
amp232Ampex Model 232
ampexAmpex dialogue
ansiXENIX standart crt
ansi-namXENIX standart crt без автоматического доступа
arpanetсеть
ataristAtari ST vt52
b26Burrough anci монитор с 29 линиями
bh3mBeehive IIIm
big262148-строковый 2621
с100Сoncept 100
c1004pc100w/4 страницы
c100rvc100 rev video
c100rv4pc100 w/4 страницы
c100rv4pnac100 with no arrows
c100rv4pppc100 с портом принтера
c100rvsмедлительный противоположный Cocept 100
c100sмедлительный Cocept 100
c3102Cromenco 3102
carlockkls
ccicci 4574
cdc456cdc
cdc456tstdc456tst
cdicdi1203
cie467C.Itoh 467,414 Graphics terminal
cie80C.Itoh 80
cie80namC.Itoh 80 without automargins
compucolorCompucolor II
d132Datapoint 3360
deltaDelta data 5000
dgDelta general 6053
digilogDigilog 333
dm1520Datamedia 1520
dm1521Datamedia 1521
dm2500Datamedia 2500
dm3025Datamedia 3025a
dmtermTandy Deskmate terminal
dosansiANSY.SYS standart crt
dt100Tandy DT-100 terminal
dt100wTandy DT-100 terminal
dt200Tandy DT-200
dt80Datamedia dt80/1
dt80132Datamedia dt80/1 в режиме 132char
dtc300sdtc 300s
dudialup
dumpнеизвестный
dw1Decwriter I
dw2Decwriter II
ep40Execuport 4000
ep48Execuport 4080
espHAZEsprit 6310 в режиме Hazeltine emulation
ethernetсеть
exidyExidy sorcerer как 2500
fosсистема Fortune
foxPerkin elmer 1100
free100Freedom 100
free110Freedom 110
ft1024Forward Technology графический контроллер
gt40Dec gt40
gt42Dec gt42
h1500Hazeltine 1500
h1510Hazeltine 1510
h1520Hazeltine 1520
h1552Hazeltine 1552
h1552rvHazeltine 1552 reverse video
h2000Hazeltine 2000
h19Heathkit h19 w/ функциональной клавиатуры
h19aHeathkit h19 в режиме ansi
h19nkHeathkit h19 w/ цифровой клавиатуры (нет функциональных ключей)
hphp 264x серия
hp2626hp 2626
hp2648HP 2648 графический терминал
hpansiHewlett Parkard 700/44 в режиме HP-PCterm
hpsubhp терминалы -- подмножество возможностей
i100General Terminal 100A (прежде Infoton 100)
ibm3101IBM 3101-10
intextISC modified owl 1200
ipcIntel IPC
k10Kaypro 10
kt7ixKimtron kt-7
lisa AppleLisa XENIX дисплей терминала (белый на черном)
m100Radio Shack model 100
mastermMicroterm act iv
masterm5Microterm act v
mimeMicroterm mime1
mime2aMicroterm mime2a (эмулируя модернизированный vt52)
mime2asMicroterm mime2a (эмулируя модернизированный soroc iq120)
mime3amime1 эмулируя 3а
mime3axmime1 эмулируя модернизированный3а
mimefbmime1 полной яркости
mimehbmime1 половинной яркости
mt70Morrow mt70
nabuтерминал Nabu
netxnetronics
nuctermNUC homebrew
oadm31старый adm31
omronOmron 8025AG
ot80Onyx ot80
owl Perkin elmer 1200
pe550Perkin elmer 550
pixelтерминал Pixel
plasmaplasma panel
pt1500Convergent Technologies PT
pt210Tandy TRS-80 PT-210 печатющий терминал
qume5Qume Sprint 5
qvt101Qume vt101
qvt101+Qume vt101 Plus vers c
qvt101+soQume vt101+ с защищенным режимом/standout
qvt101bQume vt101 с набором мигающего курсора
qvt102Qume vt102
qvt103Qume vt103
qvt108Qume vt108
qvt109Qume vt109
qvt119Qume vt119
qvt119+Qume vt119 + vers c
qvt201Qume vt201
qvt202Qume vt202
qvt203Qume vt203 PLUS
regentдобавляет серию регента
regent20добавляет регент 20
regent25добавляет регент 25
regent25адобавляет регент 25а
regent40добавляет регент 40
regent60добавляет регент 60
regent60naрегент 60 w/нет отмечает ключи
regent100добавляет регент 100
rx303терминал Rexon 303
sb1Beehive superbee
sb2фиксированный superbee
sexidyинтеллектуальный Exidy
sk8620Seiko 8620
sorocSoroc 120
sunSun Microsystems Workstation монитор
superbeeicsuperbee со вставленным символом
switchинтеллигентный переключатель
swtpSouthwest Technical Products ct82
t1061Teleray 1061
t1061fTeleray 1061 со скорoстными PROM
t3700немой Teleray 3700
t3800Teleray 3800 серии
td200Tandy 200
tekTektronix 4012
tek4013Tektronix 4013
tek4014Tektronix 4014
tek4014smTektronix 4014 с мелким шрифтом
tek4015Tektronix 4012
tek4014smTektronix 4014 с мелким шрифтом
tek4023Tektronix 4023
teletecTeletec Datascreen
terakTerak emulating Datamedia 1520
tiTexas Instruments silent 700
ti745Texas Instruments silent 745
ti924Texas Instruments 924 VDT 7 байтовый
ti924-8Texas Instruments 924 VDT 8 байтовый
ti926Texas Instruments 926 VDT
ti931Texas Instruments 931 VDT
trs100Tandy TRS-80 Model 100
trs16Tandy trs-80 model 16 console
trs600Tandy Model 600
tvi910старый Televideo 910
tvi910+Televideo 910 PLUS
tvi912старый Televideo
tvi924Televideo924
tvi950Televideo950
tvi950-2pTelevideo950 w/2 страницы
tvi950-4pTelevideo950 w/4 страницы
tvi950-apTelevideo950 w/alt страницы
tvi950bTelevideo950 не бывает
tvi950nsTelevideo950 w/не в режиме standout
tvi9220Televideo9220 w/строка состояния @ внизу
tvi9220wTelevideo9220 132 col w/строка состояния @ внизу
v50Visuai 50 эмуляция DEC vt52
v55Visuai 55 эмуляция DEC vt52 (называемая V55)
vi50Visuai 50 в ADD эмуляции viewpoint
vi55Visuai 55, использующая ADDS эмуляцию
vi200Visuai 200 с функциональными клавишами
vi200fVisuai 200 без функциональныч клавиш
vi200icVisuai 200, использующий символ вставки
vi200rvicVisuai 200 инверсионный видео, использующий символ вставки
vi200rvVisuai 200 инверсионный видео
vis613Visual 613
vt50DEC vt50
vt50hDEC vt50h
vt52DEC vt52
vt50soDEC vt52 со скобками, добавляющимися при использовании режима standout
vt100DEC vt100
vt100-namDEC vt100 без автоматического выравнивания
vt100nDEC vt100 w/ нет init
vt100sDEC vt100 132 колонки 14 строк
vt100DEC vt100 132 колонки
vt102DEC vt102
vt131DEC vt131
vt132DEC vt132
vt220DEC vt220 generic
vtz Zilog vtz 2/10
w2110AWang 2110 Asynch Data Entry Terminal - 80 колонок
ws584Olivetti WS584
ws584frOlivetti WS584 с клавиатурой на французском языке
ws584grOlivetti WS584 с клавиатурой на немецком языке
ws584nrOlivetti WS584 с клавиатурой на датско-норвежском языках
ws584spOlivetti WS584 с клавиатурой на испанском языке
ws584swOlivetti WS584 с клавиатурой на шведско-финском языках
ws584ukOlivetti WS584 с канадской клавиатурой
ws584usOlivetti WS584 с клавиатурой на американском языке
ws685Olivetti WS685
wy30Wyse 30
wy50Wyse 50
wy50nWyse 50 - 80 колонок на экране, нет автоматического выравнивания
wy50vbWyse 50 c видимым сигналом
wy50wWyse 50 со 132 колонками
wy60Wyse 60 с 80 колонками/24 строками экрана в режиме wy60
wy60wWyse 60 сo 132 колонками/24 строками экрана в режиме wy60
wy75Wyse 75 с 80 колонками в строке
wy75арWyse 75 с режимами Applications and Cursor keypad
wy75wWyse 75 в режиме со 132 колонками
wy75хWyse 75 в режиме со 132 колонками в режиме редактора vi
wy85Wyse 85 в режиме 80 колонок, vt100 эмуляция
wy85wWyse 85 в режиме 132 колонок, vt100 эмуляция
wy100Wyse 100
wy350Wyse 350 80 колонок цветной терминал, эмулирующий wy50
wy350wWyse 132 80 колонок цветной терминал, эмулирующий wy50
wy501Wyse 60 с 80 колонками/43 строки экрана в режиме WY50+
x1720Xerox 1720
xitexXitex sct-100
z29Zenith z29
zen30zentec 30
zen40zentec 40
zen50zentec 50
zephyrzentec zephyr220 в режиме vt100
zephyrmanzentec zephyr220 в режиме vt100 w/без автоматического выравнивания
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_marginbwbwcub1 переводит курсор из колонки 0 в последнюю колонку
auto_right_marginamamВ терминале есть автоматические границы
beehive_glitchxsbxbТерминал Beehive (f1=escape, f2=ctrl C)
ceol_standout_glitchxhpxsТекст, выведенный в режиме сообщений, не очищается при повторном выводе в то же место (терминал hp)
eat_newline_glitchxenlxnПеревод строки после 80 колонок игнорируется (терминал Concept)
erase_overstrikeeoeoМожет зачищать надпечатку пробелом
generic_typegngnТип терминала может меняться (например, коммутируемая или переключаемая линия)
hard_copyhchcТерминал - печатающее устройство
hard_cursorchtschtsКурсор трудно увидеть
has_meta_keykmkmЕсть ключ МЕТА (если нажат, устанавливается бит четности)
has_status_linehshsИмеется дополнительная служебная строка
insert_null_glitchininПри режиме вставки распознаются пустоты
memory_abovedadaВ терминале запоминается информация, находящаяся выше экрана
memory_belowdbdbВ терминале запоминается информация, находящаяся ниже экрана
move_insert_modemirmiМожно без опасений перемещаться в режиме вставки
move_standout_modemsgrmsМожно без опасений перемещаться в режиме сообщений
needs_xon_xoffnxonnxЗаполнение не работает, требуется xon/xoff
non_rev_rmcupnrrmcNRsmcup не обратен rmcup
no_pad_charnpcNPСимвол-заполнитель не существует
over_strikeososТерминал может производить надпечатку
prtr_silentmc5i5iВвод не изображается на экране
status_line_esc_okeslokesВ служебной строке может использоваться escape
teleray_glitchxtxtВывод символа табуляции портит терминал, не пользуйтесь smso (Терминал Teleray1061)
tilde_glitchhzhzТерминал Hazeltine, нельзя выводить символы ~
transparent_underlineululСимвол _ производит надпечатку
xon_xoffxonxoТерминал использует протокол xon/xoff
<
/p>
Числовые характеристики:
Имя переменнойСокращениеКод termcapОписание
columnscolscoЧисло колонок в строке
init_tabsititШаг позиций табуляции
label_heightlhlhКоличество строк в каждой метке
label_widthlwlwКоличество колонок в каждой метке
lineslinesli Число строк на экране или странице
lines_of_memorylmlmЧисло строк памяти, если > lines. 0 означает переменное число
magic_cookie_glitchxmcsgКоличество пустых символов, остающихся после smso или rmso
num_labelsnlabNlКоличество меток на экране (начиная с 1)
padding_baud_ratepbpbМинимальная скорость обмена, для которой требуется заполнитель
virtual_terminalvtvtНомер виртуального терминала
width_status_linewslwsКоличество колонок в служебной строке
Символьные характеристики:
Имя переменнойСокращениеКод termcapОписание
acs_charsacscacПары символов из графического алфавита aAbBcC (по умолчанию =vt100+)
back_tabcbtbtОбратная табуляция
bellbelblЗвуковой сигнал
carriage_returncrcrВозврат каретки (*)
change_scroll_regioncsrcsУстановить в качестве роллируемой области строки с #1 по #2 (vt100) (G)
char_paddingrmprPАналогично lp, но в режиме замены
clear_all_tabstbcctСбросить все позиции табуляции
clear_marginsmgcMCСбросить левую и правую границы, установленные программно
clear_screenclearclОчистить экран и поместить курсор в начальную позицию (*)
clr_bolel1cbОчистить начало строки, включительно
clr_eolelceОчистить конец строки
clr_eosedcdОчистить конец экрана (*)
column_addresshpachУстановить горизонтальную позицию (в абсолютных координатах) (G)
command_charactercmdchCCУстанавливаемый в терминале символ-команда
cursor_addresscupcmПеремещение курсора в строку #1 колонку #2 (G)
cursor_downcud1doВниз на одну строку
cursor_homehomehoКурсор в начальную позицию (если нет cup)
cursor_invisiblecivisviСделать курсор невидимым
cursor_leftcub1leКурсор влево на один шаг
cursor_mem_addressmrcupCMАдресация курсора относительно памяти
cursor_normalcnormveСделать курсор нормальным (отменить vs/vi)
cursor_rightcuf1ndНеразрушающий пробел (курсор вправо)
cursor_to_llllllПоследняя строка, первая колонка (если нет cup)
cursor_upcuu1upПредыдущая строка (курсор вверх)
cursor_visiblecvvisvsСделать курсор очень хорошо видимым
delete_characterdch1dcУдалить символ (*)
delete_linedl1dlУдалить строку (*)
dis_status_linedsldsОтменить служебную строку
down_half_linehdhdНа полстроки вниз
ena_acsenacsaAРазрешить использование дополнительного алфавита
enter_alt_charset_modesmacsasПерейти к дополнительному алфавиту
enter_am_modesmamSAВключить автоматические границы
enter_blink_modeblinkmbВключить мерцание
enter_bold_modeboldmdВключить режим выделенных символов
enter_ca_modesmcuptiНачальная цепочка для программ, использующих cup
enter_delete_modesmdcdmВойти в режим удаления
enter_dim_modedimmhВключить пониженную яркость
enter_insert_modesmirimВойти в режим вставки
enter_protected_modeprotmpВойти в защищенный режим
enter_reverse_moderevmrВойти в режим инверсии
enter_secure_modeinvismkВойти в режим, в котором не изображаются выводимые символы
enter_standout_modesmsosoВойти в режим сообщений
enter_underline_modesmulusВойти в режим подчеркивания
enter_xon_modesmxonSXВключить xon/xoff протокол
erase_charsechecУдалить #1 символов (G)
exit_alt_charset_modermacsaeВернуться из дополнительного алфавита
exit_attribute_modesgr0meВыключить все атрибуты
exit_ca_modermcupteЗавершающая цепочка для программ, использующих cup
exit_delete_modermdcedВыйти из режима удаления
exit_insert_modermireiВыйти из режима вставки
exit_standout_modermsoseВыйти из режима сообщений
exit_underline_modermulueВыйти из режима подчеркивания
exit_xon_modermxonRXВыключить xon/xoff протокол
flash_screenflashvbВидимый звонок (может не перемещать курсор)
form_feedffffПрогон страницы в терминале-принтере (*)
from_status_linefslfsВозврат из служебной строки
init_1stringis1i1Первая цепочка инициализации терминала
init_2stringis2i2Вторая цепочка инициализации терминала
init_3stringis3i3Третья цепочка инициализации терминала
init_fileififИмя файла, содержащего цепочку инициализации терминала
init_progiprogiPИмя программы, производящей инициализацию терминала
insert_characterich1icВставить символ
insert_lineil1alВставить пустую строку (*)
insert_paddingipipВывести заполнитель после вставки символа (*)
key_a1ka1K1KEY_A1, 0534, слева вверху на дополнительной клавиатуре
key_a3ka3K3KEY_A3, 0535, справа вверху на дополнительной клавиатуре
key_b2kb2K2KEY_B2, 0536, в центре клавиатуры
key_backspacekbskbKEY_BACKSPACE, 0407, посылается клавишей "забой"
key_begkbeg@1KEY_BEG, 0542, посылается клавишей BEG
key_btabkcbtkBKEY_BTAB, 0541, посылается клавишей BTAB
key_c1kc1K4KEY_C1, 0537, слева внизу на дополнительной клавиатуре
key_c3kc3K5KEY_C3, 0540, справа внизу на дополнительной клавиатуре
key_cancelkcan@2KEY_CANCEL, 0543, посылается клавишей CANCEL
key_catabktbckaKEY_CATAB, 0526, посылается клавишей "очистка всех табуляций"
key_clearkclrkCKEY_CLEAR, 0515, посылается клавишей "очистка экрана"
key_closekclo@3KEY_CLOSE, 0544, посылается клавишей CLOSE
key_commandkcmd@4KEY_COMMAND, 0545, посылается клавишей CMD
key_copykcpy@5KEY_COPY, 0546, посылается клавишей COPY
key_createkcrt@6KEY_CREATE, 0547, посылается клавишей CREATE
key_ctabkctabktKEY_CTAB, 0525, посылается клавишей "очистка табуляции"
key_dckdch1kDKEY_DC, 0512, посылается клавишей "удаление символа"
key_dlkdl1kLKEY_DL, 0510, посылается клавишей "удаление строки"
key_downkcud1kdKEY_DOWN, 0402, посылается клавишей "стрелка вниз"
key_eickrmirkMKEY_EIC, 0514, посылается rmir или smir в режиме вставки
key_endkend@7KEY_END, 0550, посылается клавишей END
key_enterkent@8KEY_ENTER, 0527, посылается клавишей ENTER/SEND
key_eolkelkEKEY_EOL, 0517, посылается клавишей "очистка конца строки"
key_eoskedkSKEY_EOL, 0516, посылается клавишей "очистка конца экрана"
key_exitkext@9KEY_EXIT, 0551, посылается клавишей EXIT
key_f0kf0k0KEY_F(0), 0410, посылается функциональной клавишей f0
key_f1kf1k1KEY_F(1), 0411, посылается функциональной клавишей f1
key_f2kf2k2KEY_F(2), 0412, посылается функциональной клавишей f2
key_f3kf3k3KEY_F(3), 0413, посылается функциональной клавишей f3
key_f4kf4k4KEY_F(4), 0414, посылается функциональной клавишей f4
key_f5kf5k5KEY_F(5), 0415, посылается функциональной клавишей f5
key_f6kf6k6KEY_F(6), 0416, посылается функциональной клавишей f6
key_f7kf7k7KEY_F(7), 0417, посылается функциональной клавишей f7
key_f8kf8k8KEY_F(8), 0420, посылается функциональной клавишей f8
key_f9kf9k9KEY_F(9), 0421, посылается функциональной клавишей f9
key_f10kf10k;KEY_F(10), 0422, посылается функциональной клавишей f10
key_f11kf11F1KEY_F(11), 0423, посылается функциональной клавишей f11
key_f12kf12F2KEY_F(12), 0424, посылается функциональной клавишей f12
key_f13kf13F3KEY_F(13), 0425, посылается функциональной клавишей f13
key_f14kf14F4KEY_F(14), 0426, посылается функциональной клавишей f14
key_f15kf15F5KEY_F(15), 0427, посылается функциональной клавишей f15
key_f16kf16F6KEY_F(16), 0430, посылается функциональной клавишей f16
key_f17kf17F7KEY_F(17), 0431, посылается функциональной клавишей f17
key_f18kf18F8KEY_F(18), 0432, посылается функциональной клавишей f18
key_f19kf19F9KEY_F(19), 0433, посылается функциональной клавишей f19
key_f20kf20FAKEY_F(20), 0434, посылается функциональной клавишей f20
key_f21kf21FBKEY_F(21), 0435, посылается функциональной клавишей f21
key_f22kf22FCKEY_F(22), 0436, посылается функциональной клавишей f22
key_f23kf23FDKEY_F(23), 0437, посылается функциональной клавишей f23
key_f24kf24FEKEY_F(24), 0440, посылается функциональной клавишей f24
key_f25kf25FFKEY_F(25), 0441, посылается функциональной клавишей f25
key_f26kf26FGKEY_F(26), 0442, посылается функциональной клавишей f26
key_f27kf27FHKEY_F(27), 0443, посылается функциональной клавишей f27
key_f28kf28FIKEY_F(28), 0444, посылается функциональной клавишей f28
key_f29kf29FJKEY_F(29), 0445, посылается функциональной клавишей f29
key_f30kf30FKKEY_F(30), 0446, посылается функциональной клавишей f30
key_f31kf31FLKEY_F(31), 0447, посылается функциональной клавишей f31
key_f32kf32FMKEY_F(32), 0450, посылается функциональной клавишей f32
key_f33kf33FNKEY_F(33), 0451, посылается функциональной клавишей f33
key_f34kf34FOKEY_F(34), 0452, посылается функциональной клавишей f34
key_f35kf35FPKEY_F(35), 0453, посылается функциональной клавишей f35
key_f36kf36FQKEY_F(36), 0454, посылается функциональной клавишей f36
key_f37kf37FRKEY_F(37), 0455, посылается функциональной клавишей f37
key_f38kf38FSKEY_F(38), 0456, посылается функциональной клавишей f38
key_f39kf39FTKEY_F(39), 0457, посылается функциональной клавишей f39
key_f40kf40FUKEY_F(40), 0460, посылается функциональной клавишей f40
key_f41kf41FVKEY_F(41), 0461, посылается функциональной клавишей f41
key_f42kf42FWKEY_F(42), 0462, посылается функциональной клавишей f42
key_f43kf43FXKEY_F(43), 0463, посылается функциональной клавишей f43
key_f44kf44FYKEY_F(44), 0464, посылается функциональной клавишей f44
key_f45kf45FZKEY_F(45), 0465, посылается функциональной клавишей f45
key_f46kf46FaKEY_F(46), 0466, посылается функциональной клавишей f46
key_f47kf47FbKEY_F(47), 0467, посылается функциональной клавишей f47
key_f48kf48FcKEY_F(48), 0470, посылается функциональной клавишей f48
key_f49kf49FdKEY_F(49), 0471, посылается функциональной клавишей f49
key_f50kf50FeKEY_F(50), 0472, посылается функциональной клавишей f50
key_f51kf51FfKEY_F(51), 0473, посылается функциональной клавишей f51
key_f52kf52FgKEY_F(52), 0474, посылается функциональной клавишей f52
key_f53kf53FhKEY_F(53), 0475, посылается функциональной клавишей f53
key_f54kf54FiKEY_F(54), 0476, посылается функциональной клавишей f54
key_f55kf55FjKEY_F(55), 0477, посылается функциональной клавишей f55
key_f56kf56FkKEY_F(56), 0500, посылается функциональной клавишей f56
key_f57kf57FlKEY_F(57), 0501, посылается функциональной клавишей f57
key_f58kf58FmKEY_F(58), 0502, посылается функциональной клавишей f58
key_f59kf59FnKEY_F(59), 0503, посылается функциональной клавишей f59
key_f60kf60FoKEY_F(60), 0504, посылается функциональной клавишей f60
key_f61kf61FpKEY_F(61), 0505, посылается функциональной клавишей f61
key_f62kf62FqKEY_F(62), 0506, посылается функциональной клавишей f62
key_f63kf63FrKEY_F(63), 0507, посылается функциональной клавишей f63
key_findkfnd@0KEY_FIND, 0552, посылается клавишей FIND
key_helpkhlp%1KEY_HELP, 0553, посылается клавишей HELP
key_homekhomekhKEY_HOME, 0406, посылается клавишей HOME
key_ickich1kIKEY_IC, 0513, посылается клавишей "вставить символ"
key_ilkil1kAKEY_IL, 0511, посылается клавишей "вставить строку"
key_leftkcub1klKEY_LEFT, 0404, посылается клавишей "стрелка влево"
key_llkllkHKEY_LL, 0533, посылается клавишей HOME DOWN
key_markkmrk%2KEY_MARK, 0554, посылается клавишей MARK
key_messagekmsg%3KEY_MESSAGE, 0555, посылается клавишей MESSAGE
key_movekmov%4KEY_MOVE, 0556, посылается клавишей MOVE
key_nextknxt%5KEY_NEXT, 0557, посылается клавишей NEXT
key_npageknpkNKEY_NPAGE, 0522, посылается клавишей NEXT PAGE
key_openkopn%6KEY_OPEN, 0560, посылается клавишей OPEN
key_optionskopt%7KEY_OPTIONS, 0561, посылается клавишей OPTIONS
key_ppagekppkPKEY_PPAGE, 0523, посылается клавишей PREV PAGE
key_previouskprv%8KEY_PREVIOUS, 0562, посылается клавишей PREVIOUS
key_printkprt%9KEY_PRINT, 0532, посылается клавишей PRINT или COPY
key_redokrdo%0KEY_REDO, 0563, посылается клавишей REDO
key_referencekref&1KEY_REFERENCE, 0564, посылается клавишей REFERENCE
key_refresh krfr&2KEY_REFRESH, 0565, посылается клавишей REFRESH
key_replacekrpl&3KEY_REPLACE, 0566, посылается клавишей REPLACE
key_restartkrst&4KEY_RESTART, 0567, посылается клавишей RESTART
key_resumekres&5KEY_RESUME, 0570, посылается клавишей RESUME
key_rightkcuf1krKEY_RIGHT, 0405, посылается клавишей "стрелка вправо"
key_saveksav&6KEY_SAVE, 0571, посылается клавишей SAVE
key_sbegkBEG&9KEY_SBEG, 0572, посылается клавишей SHIFT+BEG
key_scancelkCAN&0KEY_SCANCEL, 0573, посылается клавишей SHIFT+CANCEL
key_scommandkCMD*1KEY_SCOMMAND, 0574, посылается клавишей SHIFT+COMMAND
key_scopykCPY*2KEY_SCOPY, 0575, посылается клавишей SHIFT+COPY
key_screatekCRT*3KEY_SCREATE, 0576, посылается клавишей SHIFT+CREATE
key_sdckDC*4KEY_SDC, 0577, посылается клавишей SHIFT+"удалить символ"
key_sdlkDL*5KEY_SDL, 0600, посылается клавишей SHIFT+"удалить строку"
key_selectkslt*6KEY_SELECT, 0601, посылается клавишей SELECT
key_sendkEND*7KEY_SEND, 0602, посылается клавишей SEND
key_seolkEOL*8KEY_SEOL, 0603, посылается клавишей SHIFT+EOL
key_sexitkEXT*9KEY_SEXIT, 0604, посылается клавишей SHIFT+EXIT
key_sfkindkFKEY_SF, 0520, посылается клавишей SCROLL FORWARD
key_sfindkFND*0KEY_SFIND, 0605, посылается клавишей SHIFT+FIND
key_shelpkHLP#1KEY_SHELP, 0606, посылается клавишей SHIFT+HELP
key_shomekHOM#2KEY_SHOME, 0607, посылается клавишей SHIFT+HOME
key_sickIC#3KEY_SIC, 0610, посылается клавишей SHIFT+"вставить символ"
key_sleftkLFT#4KEY_SLEFT, 0611, посылается клавишей SHIFT+"стрелка влево"
key_smessagekMSG%1KEY_SMESSAGE, 0612, посылается клавишей SHIFT+MESSAGE
key_smovekMOV%bKEY_SMOVE, 0613, посылается клавишей SHIFT+MOVE
key_snextkNXT%cKEY_SNEXT, 0614, посылается клавишей SHIFT+NEXT
key_soptionskOPT%dKEY_SOPTIONS, 0615, посылается клавишей SHIFT+OPTIONS
key_spreviouskPRV%eKEY_SPREVIOUS, 0616, посылается клавишей SHIFT+PREVIOUS
key_sprintkPRT%fKEY_SPRINT, 0617, посылается клавишей SHIFT+PRINT
key_srkrikRKEY_SR, 0521, посылается клавишей SCROLL BACK
key_sredokRDO%gKEY_SREDO, 0620, посылается клавишей SHIFT+REDO
key_sreplacekRPL%hKEY_SREPLACE, 0621, посылается клавишей SHIFT+REPLACE
key_srightkRIT%iKEY_SRIGHT, 0622, посылается клавишей SHIFT+"стрелка вправо"
key_srsumekRES%jKEY_SRSUME, 0623, посылается клавишей SHIFT+RESUME
key_ssavekSAV!1KEY_SSAVE, 0624, посылается клавишей SHIFT+SAVE
key_ssuspendkSPD!2KEY_SSUSPEND, 0625, посылается клавишей SHIFT+SUSPEND
key_stabkhtskTKEY_STAB, 0524, посылается клавишей SET TAB
key_sundokUND!3KEY_SUNDO, 0626, посылается клавишей SHIFT+UNDO
key_suspendkspd&7KEY_SUSPEND, 0627, посылается клавишей SUSPEND
key_undokund&8KEY_UNDO, 0630, посылается клавишей UNDO
key_upkcuu1kuKEY_UP, 0403, посылается клавишей "стрелка вверх"
keypad_localrmkxkeВыход из "прозрачного" режима
keypad_xmitsmkxksВход в "прозрачный" режим
lab_f0lf0l0f0 если на ней написано не f0
lab_f1lf1l1f1 если на ней написано не f1
lab_f2lf2l2f2 если на ней написано не f2
lab_f3lf3l3f3 если на ней написано не f3
lab_f4lf4l4f4 если на ней написано не f4
lab_f5lf5l5f5 если на ней написано не f5
lab_f6lf6l6f6 если на ней написано не f6
lab_f7lf7l7f7 если на ней написано не f7
lab_f8lf8l8f8 если на ней написано не f8
lab_f9lf9l9f9 если на ней написано не f9
lab_f10lf10laf10 если на ней написано не f10
label_offrmlnLFВыключить программируемые надписи на клавишах
label_onsmlnLOВключить программируемые надписи на клавишах
meta_offrmmmoВыключить режим МЕТА (взведение 8-го бита)
meta_onsmmmmВключить режим МЕТА (взведение 8-го бита)
newlinenelnwПеревод строки (возврат каретки и переход к новой строке)
pad_charpadpcСимвол-заполнитель отличный от нуля
parm_dchdchDCУдалить #1 символов (G*)
parm_delete_linedlDLУдалить #1 строк (G*)
parm_down_cursorcudDOКурсор вниз на #1 строк (G*)
parm_ichichICВставить #1 пустых символов (G*)
parm_indexindnSFСроллировать вперед на #1 строк (G)
parm_insert_lineilALВставить #1 пустых строк (G*)
parm_left_cursorcubLEПереместить курсор влево на #1 позиций (G)
parm_right_cursorcufRIПереместить курсор вправо на #1 позиций (G*)
parm_rindexrinSRСроллировать назад на #1 строк (G)
parm_up_cursorcuuUPПереместить курсор вверх на #1 позиций (G*)
pkey_keypfkeypkПрограммировать функциональную клавишу #1 на печать строки #2
pkey_localpflocplПрограммировать функциональную клавишу #1 на выполнение строки #2
pkey_xmitpfxpxПрограммировать функциональную клавишу #1 на выдачу цепочки #2
pkey_normplnpnПрограммировать метку #1 на показ цепочки #2
print_screenmc0psНапечатать содержимое экрана
prtr_nonmc5ppOВключить принтер для печати #1 байт
prtr_offmc4pfВыключить принтер
prtr_onmc5poВключить принтер
repeat_charreprpПовторить символ #1 #2 раз (G*)
req_for_inputrfiRFПослать следующий введенный символ (для pty)
reset_1stringrs1r1Приведение терминала в нормальное состояние
reset_2stringrs2r2Приведение терминала в нормальное состояние
reset_3stringrs3r3Приведение терминала в нормальное состояние
reset_filerfrfИмя файла, содержащего коды для приведения терминала в нормальное состояние
restore_cursorrcrcВосстановить позицию курсора (при последней команде sc)
row_addressvpacvАбсолютная вертикальная позиция (G)
save_cursorscscСохранить позицию курсора
scroll_forwardindsfСроллировать текст вверх
scroll_reverserisrСроллировать текст вниз
set_attributessgrsaЗадать атрибуты изображения #1-#9 (G)
set_left_marginsmglMLУстановить левую границу
set_right_marginsmgrMRУстановить правую границу
set_tabhtsstУстановить остановку по табуляции во всех строках в текущей колонке
set_windowwindwiУстановить текущее окно в строках #1-#2, колонках #3-#4 (G)
tabhttaПереместиться к следующей остановке по табуляции
to_status_linetsltsПерейти в служебную строку, колонку #1
underline_charucucПодчеркнуть один символ и встать за ним
up_half_linehuhuНа полстроки вверх
xoff_characterxoffcXFСимвол XOFF
xon_characterxoncXNСимвол XON
<
/p>
Пример задания элемента исходного файла
Следующий элемент, описывающий терминал Concept-100, в момент написания настоящего руководства являлся одним из самых сложных в файле terminfo.
Элементы могут располагаться на нескольких строках, каждая строка, кроме первой, должна начинаться с пробела. Строки, начинающиеся с символа #, считаются комментариями.
Типы характеристик
Характеристики 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)
%lpush(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+Новый терминал
левый верхний уголlR
левый нижний уголmF
правый верхний уголkT
правый нижний уголjG
горизонталь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. Ниже приведены номера, приписанные функциям, и подразумеваемые символы:
0VINTRDEL
1VQUITFS
2VERASE#
3VKILL@
4VEOF (VMIN)EOT
5VEOL (VTIME)NUL
6VEOL2
7VSWTCHSUB
Поле c_iflag описывает основные параметры терминального ввода:
IGNBRK0000001Игнорировать ошибки протокола.
BRKINT0000002При ошибках протокола генерировать сигнал прерывания.
IGNPAR0000004Игнорировать символы с ошибками четности.
PARMRK0000010Отмечать ошибки четности.
INPCK0000020Разрешить контроль четности.
ISTRIP0000040Отбрасывать старший бит.
INLCR0000100Преобразовывать перевод строки в возврат каретки.
IGNCR0000200Игнорировать возвраты каретки.
ICRNL0000400Преобразовывать возврат каретки в перевод строки.
IUCLC0001000Преобразовывать большие буквы в малые.
IXON0002000Разрешить старт/стопное управление выводом.
IXANY0004000Разрешить любому символу возобновлять вывод.
IXOFF0010000Разрешить старт/стопное управление вводом.
<
/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 определяет системную обработку вывода:
OPOST0000001Постпроцессировать вывод.
OLCUC0000002Преобразовывать малые буквы в большие.
ONLCR0000004Преобразовывать перевод строки в пару (перевод строки, возврат каретки).
OCRNL0000010Преобразовывать возврат каретки в перевод строки.
ONOCR0000020Не выдавать возврат каретки в нулевой колонке.
ONLRET0000040Перевод строки выполняет функции возврата каретки.
OFILL0000100Использовать для задержки передачу символов-заполнителей.
OFDEL0000200Символом-заполнителем является DEL (по умолчанию - NUL).
NLDLY0000400Выбрать задержку для перевода строки:
NL00
NL10000400
CRDLY0003000Выбрать задержку для возврата каретки:
CR00
CR10001000
CR20002000
CR30003000
TABDLY0014000Выбрать задержку для горизонтальной табуляции:
TAB00
TAB10004000
TAB20010000
TAB30014000 Разворачивать табуляцию в пробелы.
BSDLY0020000Выбрать задержку для возврата на шаг:
BS00
BS10020000
VTDLY0040000Выбрать задержку для вертикальной табуляции:
VT00
VT10040000
FFDLY0100000Выбрать задержку для перехода к новой странице:
FF00
FF10100000
<
/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 описывает аппаратные характеристики линии и терминала:
CBAUD0000017Скорость передачи:
B00Освобождение линии.
B50000000150 бод.
B75000000275 бод.
B1100000003110 бод.
B1340000004134 бода.
B1500000005150 бод.
B2000000006200 бод.
B3000000007300 бод.
B6000000010600 бод.
B120000000111200 бод.
B180000000121800 бод.
B240000000132400 бод.
B480000000144800 бод.
B960000000159600 бод.
B19200000001619200 бод.
EXTA0000016Внешний A.
B38400000001738400 бод.
EXTB0000017Внешний B.
CSIZE0000060Размер символа:
CS505 бит.
CS600000206 бит.
CS700000407 бит.
CS800000608 бит.
CSTOPB0000100Посылать два стоп-бита, иначе один.
CREAD0000200Разрешить прием символов.
PARENB0000400Контролировать четность.
PARODD0001000Проверка на нечетность, иначе на четность.
HUPCL0002000Освобождение линии при последнем закрытии.
CLOCAL0004000Локальная линия связи, иначе коммутируемая.
RCV1EN0010000
XMT1EN0020000
LOBLK0040000Блокировать вывод экземпляра shell'а.
Биты CBAUD определяют скорость передачи данных. Нулевая скорость передачи, B0, используется для прекращения связи и освобождения линии. При нулевой скорости не будет выставляться сигнал готовности терминала к обработке данных, что обычно ведет к разрыву связи. Для любого вида аппаратуры игнорируются не поддерживаемые ею изменения скорости.
Биты CZISE задают размер символа в битах как для передачи, так и для приема данных. В этом размере не учитывается бит четности, если он есть. Если установлен режим CSTOPB, то используется два стоп-бита, в противном случае один. Например, при скорости 110 бод требуется два стоп-бита.
Если установлен режим PARENB, то действует как контроль четности, так и добавление к каждому символу бита четности. Если при этом установлен бит PARODD, выполняется проверка на нечетность, в противном случае - на четность.
Если установлен бит CREAD, то разрешен прием данных, в противном случае символы приниматься не будут.
Если установлен бит HUPCL, то линия связи будет освобождена, когда последний процесс, открывавший ее, закроет линию или завершится. В результате сигнал готовности терминала к обработке данных пропадет.
Если установлен бит CLOCAL, то считается, что линия связи локальная, с прямым соединением без модемного управления. В противном случае предполагается модемное управление.
Если установлен бит LOBLK, то вывод экземпляров shell'а, не являющихся текущими, будет блокироваться. В противном случае вывод разных экземпляров будет мультиплексироваться.
После открытия терминального файла будут установлены следующие аппаратные характеристики: B300, CS8, CREAD, HUPCL.
Поле c_lflag структуры termio используется для детализации режима работы с терминальной линией. Базовый режим (0) обеспечивает следующие возможности:
ISIG0000001Разрешить сигналы.
ICANON0000002Канонический ввод (обработка забоя и уничтожения).
XCASE0000004Каноническое представление больших/малых букв.
ECHO0000010Разрешить эхо.
ECHOE0000020Отображать символ забоя как тройку: возврат на шаг, пробел, возврат на шаг.
ECHOK0000040Выдавать перевод строки после символа уничтожения.
ECHONL0000100Отображать перевод строки.
NOFLSH0000200Запретить сброс после прерывания или выхода.
Если установлен бит 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 Сообщение об ошибке не выводится, см. выше КОДЫ ЗАВЕРШЕНИЯ. 2 Неверное использование команды. 3 Неизвестный тип терминала или нет базы данных . 4 Неизвестное для имя_атрибута.
Команда 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 передает командный запрос драйверу устройства и устанавливает заданный шестнадцатеричный режим_тестирования. Работает ли режим тестирования и как именно это происходит, целиком зависит от драйвера устройства. Во включаемом файле перечислены известные биты режимов тестирования. Драйверы дисков способны работать в тестовом режиме.
Команда tty выдает полное имя терминала пользователя.
-l Выдается номер синхронного канала, к которому подсоединен терминал, если этот канал активен. -s Подавляется вывод полного имени терминала. Возможность проверки значения кода завершения сохраняется.
КОДЫ ЗАВЕРШЕНИЯ
0 Стандартный ввод осуществляется с терминала. 1 Во всех остальных корректных случаях. 2 Указаны недопустимые опции.
ДИАГНОСТИКА
not on an active synchronous line
Возникает при задании опции -l, если стандартный ввод осуществляется не с синхронного терминала.
not a tty
Возникает в отсутствие опции -s, когда стандартный ввод осуществляется не с терминала.
В каждом процессе специальный файл /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 используются для выдачи на печать списка доступных опций.