Man pages на русском

         

CONFIGURE(8)


НАЗВАНИЕ

configure - программа установки конфигурации в файле /kernel

СИНТАКСИС

configure [options] [parm=val ...]

ОПИСАНИЕ

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

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

В следующих параграфах объясняется, как использовать configure в интерактивном режиме. Опции командной строки обсуждаются в разделе "Опции".

Использование интерактивного режима

configure функционирует в интерактивном режиме, если в командной строке не задано никаких опций или задана только опция -f.

Когда вы вызываете configure в интерактивном режиме, вы увидите вначале меню следующего вида:

1. Disk Buffers 2. Character Buffers 3. Files, Inodes, and Filesystems 4. Processes, Memory Management & Swapping 5. Clock 6. MultiScreens 7. Message Queues 8. Semaphores 9. Shared Data 10. System Name 11. Streams Data 12. Event Queues and Devices 13. Hardware Dependent Parameters

Выберите категорию для изменения конфигурации, введя число от 1 до 13 или 'q' для выхода:

Для выбора категории введите ее номер (например, "1" для категории "Disk Buffers") и нажмите RETURN.

Каждая категория содержит ряд конфигурируемых ресурсов. Каждый ресурс представляется высвечиванием его действительного имени, краткого описания и текущего значения. Например, для категории "Disk Buffers" вы могли бы увидеть:

NBUF: total disk buffers. Currently determined at system start up: NSABUF: system-addressable (near) disk buffers. Currently 10: NHBUF: hash buffers (for disk block sorting). Currently 128:


Для сохранения текущего значения нажмите просто RETURN. В противном случае введите подходящее значение для соответсвующего ресурса и нажмите RETURN. configure проверяет каждое значение, попадает ли оно в соответствующий диапазон или нет. Если нет, то configure предупредит вас об этом и попросит подтверждения, не хотите ли вы изменить рекомендуемое значение.

Для выхода из configure введите 'q' на подсказку меню. Если были внесены какие-либо изменения, configure спросит, не надо ли модифицировать файлы конфигурации в соответствии с этими изменениями. Для сохранения старой конфигурации нажмите на эту подсказку 'n', и изменения не будут учтены. В противном случае введите 'y', и configure исправить нужные файлы системной конфигурации. После завершения работы configure ядро системы готово к компоновке.

Для компоновки ядра введите:



link_kernel

Компоновка может занять несколько минут. После завершения компоновки ядра введите следующие команды для перенесения нового ядра (xenix.new) в корневой каталог и перегрузите систему:

cp /usr/sys/conf/kernel /kermel.new /etc/shatdown

Затем вы увидите загрузочную подсказку:

Boot :

Для выполнения тестирования нового ядра введите на эту подсказку

kernel.new

Теперь система будет работать с новым ядром. Когда вы будете удовлетворены функционированием нового ядра, введите для установки этого ядра на жесткий диск следующую команду:

/usr/sys/conf/hdinstall

Программа выполняет резервное копирование старого файла /kernel и записывает на его место /usr/sys/conf/kernel.

Удалите kernel.new введением следующей команды:

rm /kernel.new

Перезагрузите систему с новым ядром.

Опции

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

configure использует следующие опции:

-a [func1 func2 ...] -d [func1 func2 ...] -b -c -d [func1 func2 ...] -f master_file [dfile] -g dev_name handler | dev_name -j [prefix] [NEXTMAJOR] -l priority_level -m major -n -q -r -t -v interrupt_vector [interrupt_vector2 ...] -w -x -y resource



-m, -b и -c Эти опции используется для конкретизации ссылки на драйвер. Вслед за опцией -m должен идти главное число устройства драйвера. Если вы конфигурируете блочный драйвер, то нужно указывать это опцией -b; если же вы конфигурируете символьный драйвер, то ему соответствует опция -с. Обе опции используются при конфигурировании драйвера с обоими типами интерфейса.

-a и -d Каждая из этих опций сопровождается списком добавляемых или удаляемых функций соответственно. Имена этих функций содержатся в bdevsw[] или сdevsw[], ими являются также имена процедур инициализации, опроса, остановки и прерываний, если они имеются, плюс имена терминала, потока и указателей табличных структур. configure вводит в действие правила, по которым все функции драйвера должны иметь общий префикс, который должен быть 2-4 символа длиной.

-jЕсли за этой опцией следует префикс, используемый драйвером, то высвечивается главное число этого драйвера. Если же за ней следует NEXTMAJOR, то выводится самое маленькое главное число драйверов. -rЭта опция задает принудительную перезапись файлов конфигурации независимо от того, внесены ли в конфигурацию какие-либо изменения или нет. -vЭта опция модифицирует задание векторов прерывания данного устройства. Устройство может использовать до четырех векторов прерывания. -lЭта опция устанавливает приоритет прерывания для данного устройства, который почти всегда совпадает с используемым при вызове spl(): драйвер осуществляющий блокировку с использованием sp5() почти всегда имеет приоритет прерывания 5. -qЕсли задается опция -q, то после возвращения из прерывания использование qswtch() невозможно. Использование этой опции в новых драйверах не рекомендуется. -fКонфигурация поддерживается с помощью двух файлов данных master и unixconf. Опцию -f можно использовать для задания других имен. Обратите внимание, что это единственная опция, при введении которой в командную строку программа все равно запускается в интерактивном режиме. -nЕсли присутствует эта опция, то два упомянутых конфигурационных файла модифицируются,но никаких файлов '.o' не создается. Эта опция полезна при конфигурировании пакета драйверов, содержащего несколько драйверов. -wЭта опция подавляет сообщения-предупреждения. -xЭта опция задает выдачу полной информации по всем характеристикам ресурса, известным для configure. При этом выявляется имя, описание и текущее значение каждого конфигурируемого параметра. Подсказки категорий не дампируются. -yЭта опция задает печать текущего значения требуемого ресурса. -tЭта опция не печатает ничего (кроме, быть может, сообщений об ошибках). Однако, она возвращает 1, если уже сконфигурирован драйвер, соответствующий комбинации опций -m, -b, -c, и 0 - если такого драйвера нет. -gЭта опция используется для добавления или удаления программ-обработчиков для устройств графического ввода (GIN). Эти программы могут направить ввод данных с таких устойств, как "мыши", графические планшеты и клавиатуры, внутрь "событий". Флагу -g может быть придан один аргумент, который интерпретируется как имя устройства. Это GIN-устройство удаляется из конфигурационных файлов. Если флагу -g придается два аргумента, то второй из них задает программу-обработчика, и устройство добавляется в конфигурационные файлы. Если оно уже имеется, то его обработчик модифицируется, а пользователю посылается сообщение. Задавая -g несколько раз, можно добавлять или удалять несколько устройств. <



/p>

Установка параметров командной строки

В командную строку может быть введено любое количество аргументов вида resource=value. Эти аргументы могут быть заданы одновременно с запросом драйвера на добавление или удаление, но должны идти вслед за всеми аргументами конфигурации драйвера в командной строке.

Некоторые ресурсы имеют в качестве своих значений символьные строки. В этом случае эти значения должны заключаться внутри символов \". Кавычки синтаксически необходимы, чтобы они использовались как строки языка Си, а обратные косые черточки предохраняют эти кавычки от их удаления программой-оболочкой.

ПРИМЕРЫ

Напечатайте текущее значение NCLIST:

configure -y NCLIST

Обеспечьте возврат 1, если доступны главное число символьного устройства 7 и вектор 3:

configure -t -v 7 -m 3 -c

Добавьте выполнение опроса по часам и процедуру инициализации к уже сконфигурированному драйверу "foo", гипотетическому символьному драйверу с главным числом устройства #17:

configure -a foopoll fooinit -c -m 17

Удалите драйвер "foo":

configure -m 17 -d -c

Добавьте новы й драйвер "hypo", драйвер блочного типа с символьным интерфейсом. Он использует три различных вектора прерывания с приоритетом 6:

configure -a hypoopen hypoclose hyporead hypowrite hypoioctl\ hypostrategy hypotab hypointr -b -c -l 6 -v 17 42 49

ПРИМЕЧАНИЯ

Ограничения на область данных ядра системы

Если общий объем всех зарезервированных ресурсов становится слишком большим, то группа не уместится в пределах 64K сегмента данных ближней зоны ядра системы. Вы не дождетесь никаких сообщений о превышении размера от configure, но вы можете получить их от компоновщика при попытке скомпоновать ядро.

ФАЙЛЫ

/usr/sys/conf/master /usr/sys/conf/unixconf /usr/sys/conf/config

СМ. ТАКЖЕ

master(3), , event(5),









CONSOLE(7)


НАЗВАНИЕ

console - интерфейс с оператором

ОПИСАНИЕ

Драйвер console обеспечивает интерфейс оператора с компьютером.

Файл /dev/console является системной консолью и соответствует асинхронной линии, подключенной к системной плате. Это устройство обладает всеми возможностями, описанными в .

ФАЙЛЫ

/dev/console

СМ. ТАКЖЕ

.



CONSOLEPRINT(8)


НАЗВАНИЕ

consoleprint - направляет /usr/adm/messages или любой другой файл на последовательный принтер, присоединенный к порту печати на последовательной консоли.

СИНТАКСИС

consoleprint [file]

ОПИСАНИЕ

console(1) направляет /usr/adm/messages на последовательный принтер, присоединенный к порту печати на последовательной консоли. Если задается имя файла, то тогда печатается этот файл. consoleprint обычно используется администратором системы для того, чтобы иметь копию системных сообщений с консоли на бумаге.

Эта команда использует файл /etc/termcap.

ФАЙЛЫ

/etc/termcap

СМ. ТАКЖЕ

ПРИМЕЧАНИЯ

Единственными поддерживаемыми в этой версии посредством записей в файле /etc/termcap терминалами являются Tandy DT-100 и DT-1, а также Hewlett-Packard HP-92.

Параметры связи с терминалами (такие как скорость передачи данных и контроль четности) должны быть установлены на терминале пользователем.



CONV(1)


НАЗВАНИЕ

conv - преобразование об ектного файла

СИНТАКСИС

conv [-] [-a] [-o] [-p] [-s] -t целевая_машина файл ...

ОПИСАНИЕ

Команда conv преобразует об ектные файлы из текущего формата в формат целевой_машины. Преобразованный файл записывается под именем файл.v.

Команда имеет следующие опции:

-Чтение файлов со стандартного ввода. -aЕсли входной файл - архивный, создавать выходной файл в мобильном архивном формате версии 5 ОС UNIX. -oЕсли входной файл - архивный, создавать выходной файл в старом архивном формате. -pЕсли входной файл - архивный, создавать выходной файл в архивном формате со случайным доступом. -sВыполняет "опережающую перестановку" всех символов об'ектного файла, что целесообразно только для об'ектных файлов 3B20, которые должны быть "сброшены с перестановкой" с машины DEC на 3B20. -t целевая_машина

Преобразование об'ектного файла в формат для целевой_машины с подходящим упорядочением байт. Допустимые значения целевой_машины: pdp, vax, ibm, i80, x86, b16, n3b, m32, mc68.

Команда conv может использоваться для приведения всех об ектных файлов к общему формату. Ее можно выполнять либо на исходной ("передающей") машине, либо на целевой ("принимающей").

Команда conv задумана как средство облегчения проблем, возникающих в условиях кросскомпиляции с несколькими ведущими машинами. Ее лучше всего использовать в процедурах переноса об'ектных файлов с одной машины на другую.

Команда conv распознает и создает архивные файлы в трех форматах: старом, со случайным доступом и мобильном. По умолчанию выходной архивный файл создается в том же формате, что и входной. Чтобы создать файл в другом формате, предусмотрены опции -a, -o, -p. Если форматы входного и выходного архивных файлов совпадают, то архивная таблица имен преобразуется, в противном случае она удаляется из архива. Для ее восстановления на целевой машине следует применить команду с опциями -t и -s.

ПРИМЕР

Для переноса об ектных файлов с компьютера VAX на 3B2 нужно выполнить следующие команды:

conv -t m32 *.out uucp *.out.v my3b2!~/rje/

СМ. ТАКЖЕ

.

a.out(4), в Справочнике программиста.

ДИАГНОСТИКА

Смысл всех диагностических сообщений команды conv самоочевиден. Фатальные ошибки в командной строке вызывают завершение. Фатальные ошибки во входном файле вызывают переход к обработке следующего файла.

ПРЕДОСТЕРЕЖЕНИЯ

Команда conv не преобразует архивы из одного формата в другой, если нумерация байт на исходной и целевой машинах одинакова.



CONV(3C)


НАЗВАНИЕ

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-символа; эта функция предназначается для достижения совместимости с другими системами.

СМ. ТАКЖЕ

, .



COPALL(1M)


НАЗВАНИЕ

copall - копирование файлов на магнитную ленту

СИНТАКСИС

copall [список_поиска] [выражение]

ОПИСАНИЕ

Процедура copall, написанная на языке shell, используется для создания логической копии файлов на магнитной ленте [см. ]. Аргументы список_поиска и выражение имеют тот же смысл, что и для команды ; они служат для организации выборочного копирования. Если аргументы не заданы, копируется содержимое каталогов, указанных в тексте copall.

Процедура copall рассчитана на то, что копирование выполняется поочередно на один из двух комплектов лент. При запуске Вам предлагается вставить в магнитофон кассету с соответствующим номером и нажать клавишу перевода строки для выполнения копирования или CTRL+C для прекращения работы.

Процедура copall записывает в файл /util/copall.log сообщение о произведенном копировании.

ФАЙЛЫ

/util/copallN Файл с номером последнего использо- ванного набора лент. /util/copall.log Журнал копирований.

СМ. ТАКЖЕ

, .

, в Справочнике пользователя.

ПРЕДОСТЕРЕЖЕНИЯ

Текст процедуры может не соответствовать Вашим требованиям, либо неверно отображать информацию на терминале имеющегося у Вас типа.

Предполагается, что сетевое имя Вашей системы имеет вид

Uxx

и что Вы имеете два комплекта лент.



COPY(1)XENIX System V (1 aпpeля 1987)


НАЗВАНИЕ

copy - кoпиpoвaниe гpyпп фaйлoв.

СИНТАКСИС

copy [options]... source... dest

ОПИСАНИЕ

Koмaндa copy кoпиpyeт coдepжимoe кaтaлoгa в дpyгoй кaтaлoг. Boзмoжнo тaкжe выпoлнять кoпиpoвaниe цeлыx фaйлoвыx cиcтeм, пpи этoм пo мepe нeoбxoдимocти coздaютcя кaтaлoги нижниx ypoвнeй.

Ecли кoпиpyeмыe фaйлы, кaтaлoги или cпeциaльныe фaйлы eщe нe cyщecтвyют в кaтaлoгe-пpиeмникe (dest), тo oни coздaютcя c coxpaнeниeм вcex пapaмeтpoв иcтoчникa (source). Дoпoлнитeльнo, пpивeлeгиpoвaнный пoльзoвaтeль мoжeт ycтaнoвить идeнтификaтopы пoльзoвaтeля и гpyппы. Ecли в кaтaлoгe-пpиeмникe фaйл c yкaзaнным имeнeм yжe cyщecтвyeт, тo для нeгo coxpaнaютcя ycтaнoвлeнныe peжимы дocтyпa, тaк жe имя влaдeльцa.

Зaмeтим, чтo мoжeт быть зaдaнo бoлee oднoгo иcxoднoгo кaтaлoгa. B тaкoм cлyчae эффeкт бyдeт тoт жe, кaк oт пoвтopнoгo иcпoльзoвaния copy для кaждoгo иcxoднoгo кaтaлoгa в oтдeльнocти c oдним и тeм жe пpиeмникoм.

Флaги (options) дoлжны быть зaдaны тoлькo в cooтвeтcтвии c oпepдeлeнным coглaшeниeм и нe мoгyт иcпoльзoвaтьcя кaк oтдeльныe apгyмeнты. Дoпycтимы cлeдyющиe флaги:

-aЗaпpaшивaeт пoдтвepждeния пepeд выпoлнeниeм кoпиpoвaния. Ecли oтвeт нe "y", кoпиpoвaниe нe выпoлняeтcя. -lBeздe, гдe тoлькo вoзмoжнo cтapaeтcя иcпoльзoвaть cвязи. Пpи oтcyтcтвии дaннoгo флaгa выпoлняeтcя кoпиpoвaниe. Зaмeтим, чтo для cпeциaльныx фaйлoв и кaтaлoгoв cвязи никoгдa нe opгaнизyютcя. -nTpeбyeт, чтoбы фaйл-пpиeмник был нoвым. Coдepжимoгo cyщecтвyющeгo фaйлa-пpиeмникa кoмaндa copy нe измeняeт. Дaнный флaг нe имeeт cмыcлa для кaтaлoгoв. Для cпeциaльныx фaйлoв флaг дoпycтим (пpи ycлoвии, чтo фaйл-пpиeмник нe дoлжeн cyщecтвoвaть). -oBлaдeлeц и гpyппa для кaждoгo cкoпиpoвaннoгo фaйлa ycтaнaвливaютcя тe жe, чтo y иcxoднoгo фaйлa. Ecли дaнный фaйл нe зaдaн, тo влaдeльцeм фaйлa cчитaeтcя пoльзoвaтeль, вызвaвший пpoгpaммy. -mEcли зaдaн, тo вpeмя мoдификaции и вpeмя дocтyпa кaждoгo cкoпиpoвaннoгo фaйлa ycтaнaвливaютcя тe жe, чтo y иcxoднoгo. B oбpaтнoм cлyчae ycтaнaвливaeтcя вpeмя мoдификaции paвнoe вpeмeни кoпиpoвaния. -rEcли зaдaн, тo peкypcивнo иccлeдyютcя вce вcтpeчaющиecя пoдкaтaлoги. Инaчe вcтpaeчaющиecя пoдкaтaлoги игнopиpyютcя. -adЗaпpaшивaeт пoльзoвaтeля, пpимeнять ли флaг -r, ecли вcтpeчaeтcя пoдкaтaлoг. Ecли oтвeт нe "y", тo пoдкaтaлoг игнopиpyeтcя. -vEcли зaдaн, тo вывoдятcя cooбщeния o xoдe выпoлнeния пpoгpaммы.

<


/p>

Apгyмeнты кoмaнды copy:

source Иcтoчникoм мoжeт быть фaйл, кaтaлoг или cпeциaльный фaйл, кoтopый дoлжeн cyщecтвoвaть. Ecли apгyмeнтoм являeтcя нe кaтaлoг, тo peзyльтaт выпoлнeния кoмaнды тoт жe, чтo peзyльтaт кoмaнды cp. dest Пpиeмникoм мoжeт быть фaйл или кaтaлoг, oтличный oт иcтoчникa.

Ecли иcтoчник и пpиeмник нe являютcя кaтaлoгaми, тo copy paбoтaeт тaкжe кaк кoмaндa cp. Ecли этo кaтaлoги, тo copy выпoлняeт кoпиpoвaниe вcex фaйлoв иcтoчникa в пpиeмник в cooтвeтcтвии c зaдaнными флaгaми.

ПРИМЕР

Дaннaя кoмaндa кoпиpyeт вce фaйлы тeкyщeгo кaтaлoгa в кaтaлoг /tmp/food, c вывoдoм cooбщeний o xoдe выпoлнeния пpoгpaммы:

copy -v . /tmp/food

Cлeдyющaя кoмaндa кoпиpyeт вce фaйлы тeкyщeгo кaтaлoгa, зa иcключeниeм фaйлoв, нaчинaющиxcя c тoчки и кoпиpyeт нeпocpeдcтвeннo coдepжимoe пoдкaтaлoгoв:

copy * /tmp/logic

Дaннaя кoмaндa aнaлoгичнa пpeдыдyщeй, зa иcключeниeм тoгo, чтo peкypcивнo пpocмaтpивaютcя вce пoдкaтaлoги, a тaкжe ycтaнaвливaютcя идeнтификaтopы влaдeльцa и гpyппы тaкиe жe кaк в иcтoчникe:

copy -ro * /tmp/logic

ЗАМЕЧАНИЕ

Moгyт кoпиpoвaтьcя cпeциaльныe фaйлы. Пpи этoм инфopмaция, oтнocящaяcя к кoнкpeтнoмy ycтpoйcтвy нe кoпиpyeтcя.









CORE(4)


НАЗВАНИЕ

core - формат файла, содержащего образ памяти

ОПИСАНИЕ

Система UNIX создает образ памяти терминированного процесса при обнаружении широкого класса ошибок. Причины ошибок описываются в . Типичными ошибками являются:

Нарушение сегментации. Некорректная команда. Ошибка шины. Пользовательский сигнал выхода.

Файл, содержащий образ памяти, называется core и помещается в рабочем каталоге процесса (при условии, что он может быть туда помещен; используется обычный контроль прав доступа). Процесс, действующий идентификатор пользователя которого отличается от реального идентификатора пользователя, не создаст образа памяти.

Первая секция образа памяти является копией системных данных о процессе, включая состояние регистров на момент терминации. Размер секции зависит от параметра usize, определяемого во включаемом файле <sys/param.h>. Остальное представляет собственно содержимое памяти пользователя на момент создания образа памяти. Если сегмент команд доступен только для чтения и является разделяемым или отделенным от области данных, он не включается в образ.

Формат информации в первой секции описан в системной структуре user, определяемой в файле <sys/user.h>. Расположение регистров описано в файле <sys/reg.h>.

СМ. ТАКЖЕ

, .

в Справочнике пользователя.

в Справочнике администратора.



CP(1)


НАЗВАНИЕ

cp - копирование файлов

СИНТАКСИС

cp файл1 [файл2 ...] целевой_файл

ОПИСАНИЕ

Команда cp копирует файл1 в целевой_файл. Файл1 не должен совпадать с целевым_файлом (будьте внимательны при использовании метасимволов shell'а). Если целевой_файл является каталогом, то файл1, файл2,..., копируются в него под своими именами. Только в этом случае можно указывать несколько исходных файлов.

Если целевой_файл существует и не является каталогом, его старое содержимое теряется. Режим, владелец и группа целевого_файла при этом не меняются.

Если целевой_файл не существует или является каталогом, новые файлы создаются с теми же режимами, что и исходные (кроме бита навязчивости, если Вы не суперпользователь). Время последней модификации целевого_файла (и последнего доступа, если он не существовал), а также время последнего доступа к исходным файлам устанавливается равным времени, когда выполняется копирование. Если целевой_файл был ссылкой на другой файл, все ссылки сохраняются, а содержимое файла изменяется.

СМ. ТАКЖЕ

, , , , .



CPIO(1)


НАЗВАНИЕ

cpio - архивизация и извлечение, а также копирование файлов

СИНТАКСИС

cpio -o [-a] [-c] [-B] [-v]

cpio -i [-B] [-c] [-d] [-m] [-r] [-t] [-u] [-v] [-f] [-s] [-S] [-b] [-6 [шаблон ...]

cpio -p [-a] [-d] [-l] [-m] [-u] [-v] каталог

ОПИСАНИЕ

Команда cpio -o (архивизация) читает со стандартного ввода список маршрутных имен и копирует эти файлы на стандартный вывод вместе с маршрутными именами и информацией о файлах. Вывод дополняется до размера, кратного 512 байт.

Команда cpio -i (извлечение) выделяет отдельные файлы из стандартного ввода, который, как предполагается, является результатом работы cpio -o. Извлекаются только файлы, имена которых соответствуют хотя бы одному из указанных шаблонов, построенных по принятым в shell'е правилам для генерации имен файлов. Символу / могут соответствовать в шаблоне метасимволы ?, *, и [...]. Может быть указано несколько шаблонов, а если не указано ни одного, то по умолчанию шаблоном будет * (то есть будут извлечены все файлы). Каждый шаблон должен быть окружен двойными кавычками. Извлекаемые файлы создаются и копируются в текущее дерево каталогов в соответствии с описанными ниже опциями. Режим доступа к файлу будет тем же, что при выполнении команды cpio -o. Владелец файла и группа будут взяты у текущего пользователя, если он не суперпользователь, в противном случае cpio сохранит владельца и группу файла, которые он имел при выполнении команды cpio -o.

Если команда cpio -i пытается создать уже существующий файл, и время последней модификации у извлекаемого файла то же самое или более раннее, чем у существующего, то cpio выдает предупреждение и не изменяет существующий файл. (Используя опцию -u, можно добиться безусловной замены существующего файла, без учета времени последней модификации.)

Команда cpio -p (копирование) читает со стандартного ввода список маршрутных имен и, в соответствии с опциями командной строки, копирует заданные файлы в дерево каталогов с указанным корневым каталогом.

Опциям команды cpio приписан следующий смысл:

-aНе изменять время последнего доступа к исходному файлу при его копировании. -BУстановить размер блока равным 5120 байт. Эта опция не применяется с опцией -p и имеет смысл, только если ввод/вывод происходит на специальное символьное устройство (например /dev/mt). -dСоздавать каталоги в случае необходимости. -cЗаголовки файлов записывать в виде ASCII-символов. Настоятельно рекомендуется использовать эту опцию, если файлы переносятся на компьютер другого типа. -rИнтерактивно переименовывать файлы. Для каждого извлекаемого файла у пользователя запрашивается новое имя, а если пользователь ответил пустой строкой, то файл пропускается. Опция не применяется с опцией -p. -tВывести оглавление архива, ранее созданного с помощью команды cpio. Никакие файлы не создаются. -uБезусловно заменять существующий файл архивным с тем же именем (обычно старый файл не заменяет файл, изменявшийся позднее). -vВывести список имен обработанных файлов. Если использована опция -t, то оглавление выглядит как вывод команды ls -l [см. ]. -lВезде, где это возможно, не копировать файлы, а создавать ссылки. Эта опция употребляется только с опцией -p. -mСохранять прежнее время последней модификации (то есть то время, которое указано в заголовке файла). При отсутствии этой опции время последней модификации устанавливается равным текущему времени. Эта опция не действует на время последней модификации скопированных каталогов. Заметим, что в команде cpio смысл опции -m противоположен ее смыслу в команде tar. -fИзвлекать все файлы, кроме тех, имена которых соответствуют шаблонам. -sПереставлять байты в каждой половине слова. Эта опция используется только с опцией -i. -SПереставлять половины слов в слове. Предполагается, что слово содержит четыре байта. Опция -S используется только с опцией -i. -bПорядок байт в слове изменять на противоположный. Используется только с опцией -i. -6Обрабатывать старые файлы. Имеет смысл только с опцией -i.

<


/p>

Если в процессе записи на специальное символьное устройство (опция -o) или чтения с него (опция -i) кончился физический носитель (например, дискета), команда cpio выводит сообщение:

If you want to go on, type device/file name when ready.

Чтобы продолжить, Вы должны заменить носитель и ввести имя специального символьного устройства (например, /dev/rdsk/fd) и символ возврат_каретки. Можно продолжить, указав для cpio другое устройство. Например, если Вы имеете два дисковода для гибких дисков, можно указывать их по очереди, чтобы cpio выводил на другой дисковод, пока Вы будете менять дискету. (Один символ возврат_каретки заставляет cpio окончить работу.)

ПРИМЕРЫ

Если стандартный ввод поступает в cpio -o через канал, то команда cpio группирует файлы, так что они могут быть направлены (>) в один файл (../newfile). Вместо ls Вы можете использовать команды find, echo, cat, и т.д., чтобы подать список имен в cpio. Можно назначить вывод на устройство, а не в файл.

ls | cpio -o >../newfile

Команда cpio -i использует выходной файл cpio -o (в данном примере направленный через канал вывод команды cat), выбирает оттуда те файлы, которые соответствуют шаблонам (memo/a1, memo/b*), создает каталоги, если это нужно (опция -d), и помещает файлы в соответствующие каталоги. Если шаблоны не указаны, то все файлы из newfile будут размещены в текущем каталоге.

cat newfile | cpio -id "memo/a1" "memo/b*"

Команда cpio -p берет имена файлов и копирует эти файлы в другой каталог (в примере newdir) на этом же компьютере или заводит на них еще одну ссылку (опция -l). Опция -d позволяет создавать новые каталоги в случае необходимости. Опция -m предписывает сохранить время последней модификации. (Очень важно использовать опцию -depth в команде find при генерации маршрутных имен для cpio. Эта опция заставит find перечислять файлы, содержащиеся в каталоге, раньше чем сам каталог и исключит ситуацию, когда cpio скопирует каталог, в который по правам доступа нельзя писать, вместе с этим правом, а затем не сможет перенести в него файлы.)

find . -depth -print | cpio -pdlmv newdir

СМ. ТАКЖЕ

, , , .

в Справочнике программиста.

ПРИМЕЧАНИЯ

Маршрутные имена обрезаются до 256 символов.

Только суперпользователь может копировать специальные файлы.

Количество блоков сообщается в предположении, что размер блока равен 512 байт.









CPIO(4)


НАЗВАНИЕ

cpio - формат архива cpio

ОПИСАНИЕ

Если при запуске не используется опция -c, то заголовок файла имеет следующую структуру:

struct { short h_magic, h_dev; ushort h_ino, h_mode, h_uid, h_gid; short h_nlink, h_rdev, h_mtime [2], h_namesize, h_filesize [2]; char h_name [h_namesize округленное до слова]; } Hdr;

Если опция -c используется, то заголовок файла описывается следующим образом:

sscanf(Chdr,"%6o%6o%6o%6o%6o%6o%6o%6o%11lo%6o%11lo%s", &Hdr.h_magic, &Hdr.h_dev, &Hdr.h_ino, &Hdr.h_mode, &Hdr.h_uid, &Hdr.h_gid, &Hdr.h_nlink, &Hdr.h_rdev, &Longtime, &Hdr.h_namesize,&Longfile,Hdr.h_name);

Longtime и Longfile эквивалентны полям Hdr.h_mtime и Hdr.h_filesize соответственно. Содержимое каждого файла вместе с другими элементами, описывающими файл, помещается в элемент массива структур переменной длины. Каждое вхождение h_magic содержит восьмеричную константу 070707. Поля от h_dev до h_mtime имеют тот же смысл, что и одноименные элементы . Длина заканчивающегося нулем маршрутного имени h_name, включая и нулевой байт, хранится в h_namesize.

Именем последнего элемента архива всегда служит TRAILER!!!. Специальные файлы, каталоги и последний элемент всегда сохраняются с полем h_filesize, равным нулю.

СМ. ТАКЖЕ

.

, в Справочнике пользователя.



CPP(1)


НАЗВАНИЕ

cpp - препроцессор для языка C

СИНТАКСИС

LIBDIR/cpp [-P] [-C] [-U имя] [-D имя[=значение]] [-T] [-I каталог] [-Y каталог] [-H] [входной_файл [выходной_файл]]

ОПИСАНИЕ

Cpp - это препроцессор языка C, который вызывается в качестве первого прохода при любой компиляции C-программ командой . Формат результатов работы cpp позволяет использовать их в качестве исходных данных для следующего прохода C-компилятора. Поскольку язык C развивается, cpp и остальные команды пакета C-компиляции будут модифицироваться, чтобы следовать изменениям языка. Поэтому использование команды cpp, минуя , чревато неприятностями: в один прекрасный день cpp может заработать совсем иначе. См. также - универсальный макропроцессор.

При вызове cpp в качестве аргументов могут быть указаны два имени файла - входной_файл и выходной_файл препроцессора. По умолчанию вместо них используются стандартный ввод и стандартный вывод.

Опции:

-P Препроцессировать входной файл без генерации уп равляющей информации о номерах строк, используемой следующими проходами C-компилятора.

-C Копировать в выходной файл все комментарии за иск лючением комментариев в директивах cpp. По умолча нию cpp подавляет C-языковые комментарии.

-U имя Удалить начальное определение зарезервированного имени. Перечень таких имен зависит от конкретного препроцессора. Текущий перечень (он разбит на группы, отвечающие смыслу зарезервированных имен):

операционная система: unix, dmert, gcos, ibm, os, tss аппаратура: interdata, pdp11, u370, u3b, u3b5, u3b2, u3b20d, vax, m68k вариант системы UNIX: RES, RT утилита : lint

-D имя -D имя[=значение] Определить имя; действие эквивалентно директиве #define. Если =значение не указано, имя определя ется как 1. Опция -D имеет более низкий приоритет, чем -U. Это означает, что если одно и то же имя встретилось в обеих опциях, оно окажется неопреде ленным, независимо от порядка перечисления опций.

-T Длина имен в препроцессоре теперь не ограничена восемью символами (исключение - PDP-11). Если же задана опция -T, значимыми считаются только первые восемь символов. Предыдущие версии препроцессора поступали с длинными именами так же; в текущую версию данная опция включена для совместимости "назад".

-I каталог Изменить алгоритм поиска включаемых файлов по ди рективе #include: файлы, имена которых начинаются не с /, перед поиском в каталогах из стандартного списка искать в указанном каталоге. При использо вании данной опции включаемые файлы, имена которых заключены в кавычки, сначала ищутся в том катало ге, где находится аргумент входной_файл, затем в каталогах, указанных в опции, и в последнюю оче редь в каталогах из стандартного списка. Для вклю чаемых файлов, имена которых заключены в <>, поиск в каталоге с входным_файлом не производится.

-Y каталог При поиске включаемых файлов использовать указан ный каталог вместо каталогов из стандартного спис ка.

-H Выдавать в стандартный протокол, по одному в стро ке, составные имена включаемых файлов.

<


/p>

Выделено два специальных имени. Имя __LINE__ определено как номер текущей строки с точки зрения cpp (десятичное целое число), __FILE__ - имя текущего файла (C-цепочка символов). Данные имена могут использоваться всюду (включая макросы) как и другие имена, получившие определения.

Все директивы cpp начинаются со строк, первым символом в которых является #. Между # и собственно директивой допускается любое число пробелов и символов табуляции. Имеются следующие директивы:

#define имя цепочка_лексем Заменить последующие вхождения имени на цепочку_лексем. #define имя( арг, ..., арг ) цепочка_лексем Заменить последующие вхождения конструкций, состоящих из имени, открывающей скобки, списка разделенных запятыми лексем и закрывающей скобки, цепочкой_лексем, в которой каждое вхождение арг заменено соответствующей лексемой из списка. Заметим, что пробелов между именем и открывающей скобкой быть не должно. После того, как выполнена подстановка цепочки_лексем, cpp вновь просматривает ее в поисках имен, подлежащих макроподстановке. #undef имя Забыть с данного момента определение имени (если оно имелось). После имени запрещается располагать другие лексемы. #ident "цепочка_символов" Поместить цепочку_символов в секцию комментариев об'ектного файла. #include "файл"

#include <файл> Вставить в данное место содержимое файла (которое будет затем обработано cpp). Если используется запись <файл>, файл ищется только в стандартных каталогах. Дополнительную информацию см. выше в описании опций -I и -Y. После закрывающих символов " и > запрещается располагать другие лексемы. #line целая_константа "файл" Сформировать управляющую информацию для следующего прохода C-компилятора. Целая_константа - это номер, который получает следующая строка, файл - приписываемое строке имя файла. Если "файл" не задан, текущее имя файла не изменяется. После необязательного аргумента файл запрещается располагать другие лексемы. #endif Завершает группу строк, которая начата условной директивой (#if, #ifdef или #ifndef). Каждой условной директиве должна соответствовать директива #endif. После #endif запрещается располагать другие лексемы. #ifdef имя Следующие строки копируются в выходной файл, если имя в настоящий момент определено. После имени запрещается располагать другие лексемы. #ifndef имя Следующие строки не копируются в выходной файл, если имя в настоящий момент определено. После имени запрещается располагать другие лексемы. #if константное_выражение Следующие строки копируются в выходной файл, если значение константного_выражения не равно 0. В констант- ном_выражении допустимы все бинарные операции языка C (кроме присваивания), операция ?:, унарные операции -, ! и ~. Приоритеты операций такие же, что и в C. Определена еще одна унарная операция, которая может использоваться в константном_выражении в двух формах: defined(имя) или defined имя. Благодаря этой операции #ifdef и #ifndef являются частными случаями директивы #if. В константном_выражении могут быть использованы только эти операции, целочисленные константы и имена, которые известны cpp. В частности, недопустима операция sizeof.



Чтобы проверить, определено ли хотя бы одно из двух имен, foo и fum, следует воспользоваться директивой

#if defined(foo) defined(fum)

#elif константное_выражение Допускается произвольное число директив #elif между #if, #ifdef, #ifndef с одной стороны и #else или #endif с другой. Следующие после #elif строки копируются в выходной файл, если проверка предшествующих условий дала результат "ложь" (0), а значение константного_выражения оказалось отличным от нуля. В этом случае последующие директивы #elif и #else игнорируются. После #elif допускаются те же константные_выражения, что и после #if. #else Следующие после #else строки копируются в выходной файл, если проверка предшествующих условий дала результат "ложь" (0). После #else запрещается располагать другие лексемы.

Условные директивы и необязательные директивы #else могут быть вложены.

ФАЙЛЫ

INCDIR Стандартный список каталогов для поиска включаемых файлов, обычно /usr/include. LIBDIR Обычно это /lib.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

Сообщения об ошибках, формируемые cpp, не нуждаются в пояснениях. Вместе с диагностикой печатаются номер строки и имя файла, где встретилась ошибка.

ПРИМЕЧАНИЯ

Когда в списке аргументов раскрываемых макроопределений встречались символы перевода строки, предыдущие версии cpp, раскрывая макроопределения, эти символы подставляли. Текущая версия cpp заменяет символы перевода строки на пробелы, чтобы смягчить проблемы, с которыми сталкивались предыдущие версии.

Неподдерживаемая опция -W позволяет использовать директивы #class. Если такая директива встретилась в файле, cpp, выполнив другие директивы, завершается с кодом 27. Опция задумана для реализации классов в языке C.

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

#include <file.h>

следует предпочесть явному указанию полного имени:

#include "/usr/include/file.h"

В случае использования полных имен cpp выдает предупреждения.









CRASH(1M)


НАЗВАНИЕ

crash - изучение образа системы

СИНТАКСИС

/etc/crash [-d файл_с_дампом] [-n файл_с_таблицей_имен] [-w выходной_файл]

ОПИСАНИЕ

Утилита crash служит для изучения образа памяти работающей или аварийно завершившейся ОС. Утилита выполняет форматную печать управляющих структур, таблиц и другой информации. Аргументами командной строки являются:

-d файл_с_дампом Имя файла с образом памяти системы (по умолчанию /dev/mem). Файл_с_дампом может быть получен следующим образом. В случае аварийного завершения ОС указывается размер в блоках дампа, выводимого на устройство подкачки. Затем выполняется перезагрузка системы с другим устройством подкачки и дамп сохраняется в файле командой . Максимально допустимый размер файла нужно установить не меньшим, чем размер дампа [см. ]. -n файл_с_таблицей_имен Выполняемый файл, содержащий таблицу имен, необходимую для удобного доступа к изучаемому образу памяти (подразумеваемый файл - /unix). Если анализируется образ памяти с другой машины, следует скопировать оттуда соответствующий выполняемый файл. -w выходной_файл Файл, в который выводится информация во время диалога с утилитой crash (по умолчанию - на стандартный вывод).

Команды, которые выполняются во время диалога с утилитой crash, имеют вид

функция [аргумент ...]

где функция - одна из функций crash, описанных ниже, а аргументы указывают, какие именно системные данные следует вывести.

По умолчанию данные о процессе относятся к текущему процессу в текущем сеансе работы ОС или к процессу, выполнявшемуся в момент аварийного завершения ОС. При выводе таблиц по умолчанию выдаются все активные элементы.

Для функций могут быть указаны следующие опции (в тех случаях, когда они допустимы по смыслу):

-eВывести все элементы таблицы. -fВывести всю структуру. -pИнтерпретировать все аргументы-адреса как физические. -s процесс

Указать отображаемый процесс.

-w файл

Направить вывод функции в файл.

Следует отметить, что при указании опции -p все адреса и символьные аргументы для вызванной функции будут считаться физическими адресами. Если они не являются таковыми, результаты будут неверны.


Функции mode, defproc и redirect соответствуют опциям -p, -s и -w. Функция mode устанавливает режим трансляции адресов (как физических или, как виртуальных), defproc устанавливает новый отображаемый процесс, а redirect переназначает вывод для всех последующих функций.

Вывод crash-функций можно направить через канал в другую программу:

функция [аргумент ...] ! команда_shell'а

Например после выполнения строки

mount ! grep rw

все элементы таблицы смонтированных устройств, содержащие флаги чтения и записи, будут выданы на стандартный вывод. Опцию переназначения вывода, -w, в этом случае использовать нельзя.

В зависимости от контекста числовые аргументы функций берутся по соответствующему основанию. Количество понимается как десятичное, адрес всегда шестнадцатеричный. Аргумент, задающий элемент таблицы, трактуется как шестнадцатеричный адрес, если он превосходит размер таблицы; в противном случае он понимается как десятичный номер элемента. Основание системы счисления можно указывать и явно - для аргументов-чисел действуют соглашения языка С: число с префиксом 0x понимается как шестнадцатеричное; число, начинающееся с 0, считается восьмеричным. Десятичные числа (там, где ожидается другое основание) задаются префиксом 0d, двоичные - 0b.

Имена функций можно сокращать, оставляя начало имени (однозначно идентифицирующее функцию). Для ряда функций введены однобуквенные синонимы, например p для proc.

Многие функции допускают различные формы ввода аргументов. Так, информацию из таблицы можно получить, задав номер элемента, физический адрес, виртуальный адрес, символическое имя, диапазон или выражение. Диапазон номеров задается в виде a-b, где a и b - десятичные числа. Выражение состоит из двух операндов и знака операции. Операндом может быть адрес, символическое имя или число; знаком операции +, -, *, /, & и |. Операнд-число должен начинаться с префикса основания (если число не десятичное). Выражения заключаются в круглые скобки. Некоторые функции допускают любую из указанных форм аргументов.



Ниже используются два сокращения для аргументов функций crash:

Элемент_таблицы Это или номер элемента, или адрес, или символическое имя, или диапазон, или выражение. начальный_адрес Это или адрес, или символическое имя, или выражение.

Перечень функций утилиты crash:

? [-w файл] Список доступных функций. ! команда Вызов shell'а для выполнения команды. adt [-e] [-w файл] [-k] [-s процесс] [-u] [-p] начальный_адрес [количество] Вывод таблицы A-дескрипторов устройства управления памятью. Опция -k задает таблицу ядра, опция -u таблицу пользователя для активного процесса или для процесса, заданного опцией -s. adv [-e] [-w файл] [[-p] элемент_таблицы ...]] Вывод таблицы ресурсов, об явленных доступными для удаленных ЭВМ. base [-w файл] число ... Вывод числа в двоичной, восьмеричной, десятичной и шестнадцатеричной форме. Для недесятичных чисел надо указывать префикс: 0x для шестнадцатеричных, 0 для восьмеричных, 0b для двоичных. bdt [-e] [-w файл] [-k] [-s процесс] [-u] [[цифра] [[-p] начальный_адрес [количество]]] Вывод таблицы B-дескрипторов устройства управления памятью с использованием либо информации из таблицы A-дескрипторов (задается цифрой), либо заданного адреса. Опция -k задает таблицу ядра, опция -u - таблицу пользователя для активного процесса или для процесса, заданного опцией -s. buffer [-w файл] [-формат] [индекс_буфера] [[-p] начальный_адрес] Синоним: b.

Вывод содержимого буфера в заданном формате. Допустимы следующие обозначения форматов: -b, байтный; -c, символьный; -d, десятичный; -x, шестнадцатеричный, -o, восьмеричный; -r, формат каталога; -i, формат описателя файла. Если формат не задан, действует предшествующий формат (в начале сеанса действует формат -x). bufhdr [-f] [-w файл] [[-p] элемент_таблицы ...] Синоним: buf.

Вывод заголовков системных буферов. callout [-w файл] Синоним: c.

Вывод таблицы трассировки вызовов. dballoc [-w файл] [класс ...] Вывод таблицы потоковых блоков данных. Если указан класс, выводится информация для указанного класса. dbfree [-w файл] [класс ...] Вывод заголовков свободных потоковых блоков данных. Если указан класс, выводится информация для указанного класса. dblock [-e] [-w файл] [-c класс ...] [[-p] элемент_таблицы ...] Вывод заголовков занятых потоковых блоков данных. Если указан класс, выводится информация для указанного класса. defproc [-w файл] [-c] [номер] Установка номера отображаемого элемента таблицы процессов. Номер может быть задан явно, или унаследован у текущего процесса (опция -c). Если аргументы не заданы, выводится ранее установленный номер. В начале сеанса устанавливается номер, соответствующий текущему процессу. ds [-w файл] виртуальный_адрес Вывод символического имени с адресом, ближайшим к заданному и не превосходящим его. file [-e] [-w файл] [[-p] элемент_таблицы ...] Синоним: f.



Вывод таблицы файлов. findaddr [- w файл] таблица элемент Вывод адреса, соответствующего элементу указанной таблицы. Таблица должна быть пригодной для обработки функцией size. findslot [-w файл] виртуальный_адрес ... Вывод таблицы, номера элемента и смещения, соответствующих виртуальному_адресу. Таблица должна быть пригодной для обработки функцией size. fs [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы с информацией о файловых системах. gdp [-e] [-f] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы описателей доступных удаленных ресурсов. help [-w файл] функция ... Вывод описания указанных функций. inode [-e] [-f] [-w файл] [[-p] элемент_таблицы ...] Синоним: i.

Вывод таблицы описателей файлов. lck [-e] [-w файл] [[-p] элемент_таблицы ...] Синоним: l.

Вывод информации о блокировках файлов. Если заданы опция -е или аргумент элемент_таблицы, выводится список блокировок записей; в противном случае выводится информация о блокировках, соответствующих описателям файлов. linkblk [-e] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы ссылок между потоковыми очередями. map [-w файл] имя_отображения ... Вывод отображения с указанным именем. mbfree [-w файл] Вывод заголовков свободных блоков сообщений в потоках. mblock [-e] [-w файл] [[-p] элемент_таблицы ... ] Вывод заголовков занятых блоков сообщений в потоках. mmu [-w файл] Вывод корневых указателей устройства управления памятью на таблицы A-дескрипторов супервизора и пользователей. mode [-w файл] [режим] Установить режим трансляции аргументов-адресов: (v - виртуальные адреса, p - физические). Если режим не задан, выводится текущий режим. В начале сеанса crash установлен режим виртуальных адресов. mon [-w файл] Вывод буфера монитора ядра. Для активной системы выполнять команду mon не имеет смысла. mount [-e] [-w файл] [[-p] элемент_таблицы ...] Синоним: m.

Вывод таблицы смонтированных файловых систем. nm [-w файл] имя Вывод значения и типа имени. od [-p] [-w файл] [-формат] [-режим] [-s процесс] начальный_адрес [количество] Синоним: rd.



Вывод указанного количества значений, начиная с начального_адреса, в одном из следующих форматов: символьном (-c), десятичном (-d), восьмеричном (-o), шестнадцатеричном (-x), текстовом (-a) или шестнадцатерично-символьном (-h), и в одном из следующих режимов: словном (-l), полусловном (-s) или байтном (-b). По умолчанию для символьного и текстового форматов используется байтный режим, а для десятичного, шестнадцатеричного и восьмеричного форматов - словный. Формат -h выводит как шестнадцатеричное, так и символьное представления; режим можно не указывать. Если формат или режим опущены, используются предыдущие значения. В начале сеанса crash действуют шестнадцатеричный формат и словный режим. Если количество опущено, оно принимается равным 1. pbuf [-w файл] Вывод системного буфера печати. pcb [-w файл] [-s процесс] Вывод r-, q- и s-областей структуры пользователя, содержащих сохраненные регистры процессора. pdt [-e] [-w файл] [-k] [-s процесс] [-u] [[цифра число] [[-p] начальный_адрес [количество]]] Вывод таблицы дескрипторов страниц устройства управления памятью с использованием либо элементов таблиц A-дескрипторов (цифра) и B-дескрипторов (число), либо заданного начального_адреса. По опции -k выдается таблица ядра, по опции -u - пользовательская таблица для активного процесса, по опции -s - пользовательская таблица для заданного процесса. pfdat [-e] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы состояния системных буферов. proc [-f] [-w файл] [[-r] [[-p] элемент_таблицы ... #идентификатор_процесса ...]] Синоним: p.

Вывод таблицы процессов. Отображаемую информацию можно задать двумя способами: либо вводя любую смесь элементов_таблицы и идентификаторов_процессов (после #), либо задавая -r для отображения информации обо всех процессах, готовых к выполнению. qrun [-w файл] Вывод списка диспетчеризуемых очередей потоков. queue [-e] [-w файл] [[-p] элемент_таблицы ... ] Вывод очередей потоков. quit Синоним: q.

Завершение сеанса crash. rcvd [-e] [-f] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы дескрипторов получений. redirect [-w файл] [-c] [файл] Переназначение вывода для последующего диалога с утилитой crash в указанный последним файл. Если аргумент не задан, выводится имя текущего файла вывода. Если задана опция -c, текущий файл вывода закрывается и информация выдается на стандартный вывод. region [-e] [-f] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы областей. search [-p] [-w файл] [-m маска] [-s процесс] образец начальный_адрес количество Вывод указанного количества слов памяти с начального_адреса, таких, что кон юнкция маски и слова равна образцу. По умолчанию маска равна 0xffffffff. size [-w файл] [-x] [имя_структуры ...] Вывод размера указанной структуры. Опция -x задает шестнадцатеричный формат вывода. При отсутствии аргумента выводится список структур с известными размерами. sndd [-e] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы дескрипторов отправлений. srmount [-e] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы смонтированных удаленных файловых систем. stat [-w файл] Вывод системной статистики. stream [-e] [-f] [-w файл] [[-p] элемент_таблицы ...] Вывод таблицы потоков. strstat [-w файл] Вывод статистики потоков. ts [-w файл] виртуальный_адрес ... Вывод символического имени с адресом, ближайшим к заданному и не превосходящим его. tty [-e] [-f] [-w файл] -t тип Вывод таблицы терминалов. Опция -t обязательна. Среди возможных значений типа - sio, isio и т.д. user [-f] [-w файл] [процесс] Синоним: u.

Вывод пользовательского блока заданного процесса. var [-w файл] Синоним: v.

Вывод значений настраиваемых параметров системы. vtop [-w файл] [-k] [-s процесс] [-u] начальный_адрес ... Вывод физического адреса, соответствующего виртуальному начальному_адресу.

ФАЙЛЫ

/dev/mem Образ памяти работающей системы.

СМ. ТАКЖЕ

.










НАЗВАНИЕ

crash - аварийное завершение работы системы

ОПИСАНИЕ

Наряду с нормальным завершением работы системы с помощью утилиты , существует разновидность аварийного завершения - так называемая паника.

Есть ряд причин, по которым ядро ОС UNIX может поднять панику:

Невыполнение контрольных утверждений. Внутренний контроль информации ядра обнаруживает недопустимую ситуацию. Переполнение системных таблиц. Ядро лишилось необходимого ресурса, например, корневой файловой системы. Произошло недопустимое программное прерывание, например, при обработке аппаратного прерывания.

В любом случае, ядро выводит сообщение, указывающее на причину паники.

Если во время обработки паники снова возникает паника, такая ситуация называется двойной паникой.

При обработке паники ядро обновляет файловые системы, выдавая . Флаг очистки в суперблоке не устанавливается, так как в файловой системе могут остаться некоторые нарушения.

Ядро запрашивает оператора, следует ли вывести дамп на устройство дампа (это раздел диска, определенный в при создании ядра). По завершении дампа ядро выдает число записанных блоков. Позднее дамп может быть проанализирован с помощью утилиты .

Если устройство дампа перекрывается с устройством подкачки, надо запустить систему без устройства подкачки и скопировать дамп в обычный файл. Для этого используют утилиту , указывая число блоков дампа, сообщенное при панике. Затем включают подкачку.

После паники следует перезагрузить систему. Если система не загружается, надо восстановить ее с копии [см. ].

После загрузки ядра следует немедленно запустить коррекцию файловых систем [см. ].

СМ. ТАКЖЕ

, , , .



CREAT(2)


НАЗВАНИЕ

creat - создание нового или опустошение существующего файла

СИНТАКСИС

int creat (path, mode) char *path; int mode;

ОПИСАНИЕ

Системный вызов creat создает новый обычный файл или готовит для перезаписи существующий файл с маршрутным именем, адрес которого содержит аргумент path.

Если файл существует, то он опустошается (размер становится равным 0), а режим доступа и владелец не изменяются. Если файл не существует, то идентификаторы владельца и группы создаваемого файла устанавливаются равными, соответственно, действующим идентификаторам пользователя и группы процесса, а младшие 12 бит значения режима доступа файла устанавливаются равными значению аргумента mode, модифицированному следующим образом:

Обнуляются биты, соответствующие единичным битам маски режима создания файлов текущего процесса [см. ]. Бит навязчивости [см. ] обнуляется.

В случае успешного завершения системного вызова возвращается дескриптор файла, открытого только на запись, даже если режим доступа к файлу не разрешает запись. Указатель текущей позиции устанавливается на начало файла. Дескриптор файла создается таким, чтобы после выполнения системных вызовов файл оставался открытым [см. ]. Процесс может иметь открытыми одновременно не более 20 файлов. Новый файл может быть создан с режимом доступа, запрещающим запись.

Системный вызов creat завершается неудачей, если выполнено хотя бы одно из следующих условий:

[ENOTDIR] Компонент маршрута не является каталогом. [ENOENT] Компонент маршрута не существует. [EACCES] Для компонента маршрута отсутствует право на поиск. [ENOENT] Маршрутное имя пусто. [EACCES] Создание файла требует записи в каталог, права на запись в который нет. [EROFS] Файл расположен или должен быть расположен в файловой системе, доступной только на чтение. [ETXTBSY] Файл содержит разделяемую секцию команд, которая в данный момент выполняется. [EACCES] Файл существует и запись в него запрещена. [EISDIR] Файл существует и является каталогом. [EMFILE] Превышается максимально допустимое количество файлов, открытых одновременно в одном процессе. [EFAULT] Аргумент path указывает за пределы отведенного процессу адресного пространства. [ENFILE] Переполнение системной таблицы файлов. [EAGAIN] Файл существует и доступ к нему заблокирован [см. ]. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [ENOLINK] Маршрутное имя path указывает на удаленный компьютер, связи с которым в данный момент нет. [EMULTIHOP] Компоненты path требуют многократного обращения к удаленным компьютерам. [ENOSPC] Нет свободных описателей файлов.

СМ. ТАКЖЕ

, , , , , , , , .

ДИАГНОСТИКА

При успешном завершении результат равен неотрицательному целому числу - дескриптору файла; в случае ошибки возвращается -1, а переменной errno присваивается код ошибки.



CREATSEM(3) XENIX System V (21 июня 1987)


ИМЯ

creatsem - coздaeт двoичный ceмaфop

СИНТАКСИС

int creatsem (sem_name, mode) char *sem_name; int mode;

ОПИСАНИЕ

creatsem oпpeдeляeт двoичный ceмaфop c имeнeм sem_name; paбoтa c ceмaфopoм бyдeт ocyщecтвлятьcя фyнкциями и для пoддepжки иcключитeльнoгo дocтyпa к pecypcaм, paздeляeмым пepeмeнным или кpитичecким yчacткaм пpoгpaмм. creatsem вoзвpaщaeт yникaльный нoмep ceмaфopa, sem_num, кoтopый зaтeм иcпoльзyeтcя в oпepaцияx waitsem и sigsem. Ceмaфopы cчитaютcя cпeциaльными фaйлaми c нyлeвoй длинoй. Пpocтpaнcтвo, пpeднaзнaчeннoe для имeни фaйлa, иcпoльзyeтcя для xpaнeния yникaльнoгo идeнтификaтopa ceмaфopa. mode зaдaeт дocтyп к ceмaфopy тaк жe, кaк к oбычнoмy фaйлy. Дocтyп к ceмaфopy paзpeшeн нa ocнoвaнии битa paзpeшeния чтeния; paзpeшeниe зaпиcи и выпoлнeния игнopиpyeтcя.

C ceмaфopoм мoжнo paбoтaть пpимитивaми cинxpoннoгo xapaктepa, тaкими кaк waitsem и sigsem. creatsem ycтaнaвливaeт ceмaфop в нeкoтopoe нaчaльнoe знaчeниe, opensem oткpывaeт ceмaфop для иcпoльзoвaния eгo пpoцeccoм. Cинxpoннocть paбoты c ceмaфopoм гapaнтиpyeт нeдeлимocть (нeпpepывaeмocть) ceмaфopныx oпepaций. Эти пpимитивы иcпoльзyютcя пpимeнитeльнo к ceмaфopaм, кoтopыe cвязывaютcя c кaждым pecypcoм (включaя кpитичecкиe yчacтки пpoгpaмм) для eгo зaщиты.

Пpoцecc, yпpaвляющий ceмaфopoм, дoлжeн выпoлнить:

sem_num = creatsem ("semaphore", mode);

для coздaния, инициaлизaции и oткpытия ceмaфopa этим пpoцeccoм. Bce дpyгиe пpoцeccы, иcпoльзyющиe ceмaфop, дoлжны выпoлнить:

sem_num = opensem ("semaphore");

для пoлyчeния дocтyпa к eгo знaчeнию. Зaмeтим, чтo пpoцecc нe мoжeт oткpыть и иcпoльзoвaть ceмaфop, кoтopый нe инициaлизиpoвaн вызoвoм creatsem. Пpoцecc нe мoжeт oткpыть ceмaфop бoлee oднoгo paзa в тeчeниe oднoгo пepиoдa paбoты. Kaк coздaющий, тaк и oткpывaющий пpoцeccы иcпoльзyют waitsem и sigsem для paбoты c ceмaфopoм sem_num.

COВМECТИМOCТЬ

creatsem мoжeт быть иcпoльзoвaн для oпpeдeлeния ceмaфopoв XENIX, вepcии 3, нo нe ceмaфopoв XENIX System V.

СМ. ТАКЖЕ

, ,

ДИАГНОСТИКА

creatsem вoзвpaщaeт знaчeниe -1 в cлyчae oбнapyжeния oшибки. Ecли ceмaфop c имeнeм sem_num yжe oткpыт для иcпoльзoвaния дpyгими пpoцeccaми, в errno зaнocитcя кoд oшибки EEXIST. Ecли yкaзaнный фaйл cyщecтвyeт, нo нe имeeт ceмaфopнoгo типa, в errno зaнocитcя ENOTNAM. Ecли ceмaфop нe был инициaлизиpoвaн вызoвoм creatsem, в errno зaнocитcя ENAVAIL.

ЗAМEЧAНИЯ

Пocлe вызoвa creatsem нeoбxoдимo вызвaть waitsem для пoлyчeния yпpaвлeния выбpaнным pecypcoм.

Этa ocoбeннocть cпeцифичнa для XENIX и мoжeт oтcyтcтвoвaть в дpyгиx peaлизaцияx UNIX.

Пpoгpaммы, иcпoльзyющиe этy фyнкцию, дoлжны кoмпoнoвaтьcя c флaгoм -lx.



CRON(1M)


НАЗВАНИЕ

cron - выполнение команд в указанные моменты времени

СИНТАКСИС

/etc/cron

ОПИСАНИЕ

Утилита cron выполняет команды в заданное время. Регулярные действия описываются инструкциями, помещенными в crontab-файлы каталога /usr/spool/cron/crontabs. Пользователь может создать свой файл с описанием регулярных действий, используя команду . Разовое выполнение команд обеспечивается утилитой .

Cron проверяет файлы с описанием регулярных действий и файлы команды at только во время инициализации процессов, а также при изменениях упомянутых файлов командами и . Это позволяет уменьшить накладные расходы на периодические проверки новых или измененных файлов.

Поскольку утилита cron выполняется "вечно", ее нужно вызвать только один раз, что и делает программа /etc/ rc2.d/S75cron при загрузке системы. Файл /usr/lib/ cron/FIFO используется как файл-замок для предотвращения выполнения более чем одного cron'а.

ФАЙЛЫ

/usr/lib/cron Основной каталог cron'а. /usr/lib/cron/FIFO Файл-замок. /usr/lib/cron/log Учетная информация. /usr/spool/cron Рабочий каталог.

СМ. ТАКЖЕ

, , в Справочнике пользователя.

ДИАГНОСТИКА

Последовательность действий утилиты cron протоколируется в файле /usr/lib/cron/log.



CRONTAB(1)


НАЗВАНИЕ

crontab - описание регулярных действий

СИНТАКСИС

crontab [файл] crontab -r crontab -l

ОПИСАНИЕ

Команда crontab в первом из приведенных вариантов копирует указанный файл, или стандартный ввод, если файл не задан, в каталог, хранящий регулярные действия всех пользователей. Смысл опций двух других вариантов команды crontab таков:

-r

Удалить регулярные действия текущего пользователя из этого каталога. -l

Выдать на стандартный вывод файл с регулярными действиями текущего пользователя.

Пользователю разрешено выполнять команду crontab только при условии, что его имя встречается в файле /usr/lib/cron/cron.allow. Если этого файла не существует, то проверяется файл /usr/lib/cron/cron.deny для того чтобы узнать, не запрещен ли пользователю доступ к crontab. Если оба файла отсутствуют, то только суперпользователю разрешено планировать регулярные действия. Если cron.allow не существует, cron.deny существует, но не содержит имен, то использовать команду crontab разрешено всем. Файлы cron.allow и cron.deny содержат по одному имени в строке.

Файл, описывающий регулярные действия, состоит из строк, каждая из которых содержит 6 полей. Эти поля разделены пробелами или символами табуляции. Первые 5 полей представляют собой шаблоны, специфицирующие следующие целые числа:

минуты (0-59), часы (0-23), день месяца (1-31), месяц в году (1-12), день недели (0-6 где 0=воскресенье).

Каждый из этих шаблонов может быть или символом *, который обозначает все корректные значения, или списком, элементы которого разделены запятыми. Каждый элемент должен быть либо числом, либо двумя числами, разделенными символом - (таким способом задается интервал). Заметим, что день может быть указан двумя полями (день месяца и день недели). Если в обоих этих полях указаны списки, то считаются заданными те дни, которые заданы или как день месяца, или как день недели. Например, если первые 5 полей содержат 0 0 1,15 * 1, то действие производится 1 и 15 числа каждого месяца и, кроме того, каждый понедельник. Чтобы указывать день каким-либо одним способом, в другом поле необходимо указать * (к примеру, 0 0 * * 1 приводит к выполнению действия только по понедельникам).


Остальная часть строки в файле регулярных действий представляет собой цепочку символов, которая выполняется shell'ом в указанное время. Символы процента в этой цепочке (кроме экранированных \) переводятся в символы перевода строки. Только первая получившаяся строка (до символа % или до конца строки) выполняется shell'ом. Остальные получившиеся строки могут быть обработаны при выполнении действия как стандартный ввод.

Shell запускается из основного каталога пользователя, запланировавшего действие, при этом нулевой аргумент равен sh. Если пользователь хочет, чтобы выполнялся его профайл, он должен явно указать это в файле регулярных действий. Cron поддерживает подразумеваемое окружение для каждого shell'а, определяя параметры HOME, LOGNAME, SHELL (/bin/sh), и PATH (:/bin:/usr/bin:/usr/lbin).

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

ФАЙЛЫ

/usr/lib/cron

Основной каталог команд, связанных со временем. /usr/spool/cron/crontabs

Каталог файлов регулярных действий. /usr/lib/cron/log

Учетная информация. /usr/lib/cron/cron.allow

Список пользователей, которым разрешено выполнять команду crontab. /usr/lib/cron/cron.deny

Список пользователей, которым запрещено выполнять команду crontab.

СМ. ТАКЖЕ

.

в Справочнике администратора.

ПРЕДОСТЕРЕЖЕНИЯ

Если Вы нечаянно ввели команду crontab без аргументов, то не пытайтесь выйти, нажав CTRL+D, так как это опустошит Ваш файл регулярных действий. Вместо CTRL+D используйте клавишу прерывания.









CRYPT(3C)


НАЗВАНИЕ

crypt, setkey, encrypt - шифровка хешированием

СИНТАКСИС

char *crypt (key, salt) char *key, *salt;

void setkey (key) char *key;

void encrypt (block, ignored) char *block; int ignored;

ОПИСАНИЕ

Функция crypt предназначена для шифровки пароля. Она основана на алгоритме шифровки хешированием, назначение которого, помимо всего прочего, - предупредить использование аппаратных средств раскрытия ключа.

Аргумент key представляет собой пароль, введенный пользователем. Salt - это двухсимвольная цепочка, выбираемая из множества [a-zA-Z0-9./]. Она настраивает алгоритм хеширования на один из 4096 вариантов, после чего пароль используется как ключ для циклической шифровки некоторой текстовой константы. Возвращаемое значение указывает на зашифрованный пароль. Его первые два символа равны salt.

Функции setkey и encrypt обеспечивают доступ (на довольно примитивном уровне) к алгоритму хеширования. Аргумент функции setkey - это символьный массив длиной 64, содержащий только символы с числовым значением 0 и 1 и изображающий цепочку бит. В каждой из восьми групп по 8 символов наименее значащий "бит" игнорируется. Полученный 56-битный ключ передается компьютеру и используется в алгоритме хеширования для шифровки цепочки block в функции encrypt.

Аргумент функции encrypt - символьный массив длиной 64, содержащий только символы с числовым значением 0 и 1. Аргумент преобразуется на месте в массив того же вида, изображающий биты аргумента после применения алгоритма хеширования с ключом, установленным в функции setkey. Аргумент ignored не используется, но должен быть задан.

СМ. ТАКЖЕ

, .

, , в Справочнике пользователя.

ОГРАНИЧЕНИЯ

Значение, возвращаемое функцией crypt, указывает на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.



CRYPT(3X)


НАЗВАНИЕ

crypt - функции шифровки пароля и файла

СИНТАКСИС

cc [flag ...] file ... -lcrypt

char *crypt (key, salt) char *key, *salt;

void setkey (key) char *key;

void encrypt (block, flag) char *block; int flag;

char *des_crypt (key, salt) char *key, *salt;

void des_setkey (key) char *key;

void des_encrypt (block, flag) char *block; int flag;

int run_setkey (p,key) int p[2]; char *key;

int run_crypt (offset, buffer, count, p) long offset; char *buffer; unsigned int count; int p[2];

int crypt_close (p) int p[2];

ОПИСАНИЕ

des_crypt - это функция шифровки пароля. Она основана на алгоритме шифровки перемешиванием, назначение которого, помимо всего прочего - затруднить использование аппаратных средств контекстного поиска.

Аргумент key представляет собой пароль, введенный пользователем. Salt - это двухсимвольная строка, выбираемая из множества [a-zA-Z0-9./]. Она настраивает алгоритм перемешивания на один из 4096 вариантов, после чего пароль используется как ключ для циклической шифровки некоторой строковой константы. Возвращаемое значение указывает на зашифрованный пароль. Его первые два символа равны salt.

Функции des_setkey и des_encrypt обеспечивают доступ (на довольно примитивном уровне) к алгоритму перемешивания. Аргумент функции des_setkey - это символьный массив длиной 64, содержащий только символы с числовым значением 0 и 1 и изображающий битовую строку. В каждой из восьми груп по 8 символов-"битов" наименее значащий "бит" игнорируется. Полученный 56-битовый ключ передается компьютеру и используется в алгоритме перемешивания для шифровки строки block в функции des_encrypt.

Аргумент функции des_encrypt - символьный массив длиной 64, содержащий только символы с числовым значением 0 и 1. Аргумент преобразуется на месте в массив того же вида, изображающий биты аргумента после применения алгоритма перемешивания с ключом, установленным в функции des_setkey. Если flag равен 0, аргумент зашифровывается, в противном случае расшифровывается.

Следует заметить, что международная версия не обеспечивает расшифровку. Международная версия входит в состав Утилит языка программирования С, а национальная версия - в состав Утилит управления защитой. Попытка использовать международную версию crypt для расшифровки вызовет сообщение об ошибке.

Функции crypt, setkey и encrypt являются "фасадными". Они вызывают функции des_crypt,des_setkey и des_encrypt соответственно.

Программы run_setkey и run_crypt разработаны для приложений, использующих криптографические средства [таких, как и ], и требующих совместимости с утилитой пользователя crypt(1). Run_setkey образует два канала p[0] и p[1], соединяющих с crypt(1), при этом аргумент key используется как пароль. Run_crypt преобразует текст из открытого в зашифрованный (и наоборот), обращаясь к crypt(1) через каналы p[0] и p[1]. Аргумент offset указывает позицию относительно начала файла, с которой начинается текст, заданный аргументом buffer; аргумент count указывает длину текста. По завершении шифровки используется функция crypt_close, закрывающая каналы.

Run_setkey возвращает -1, если соединение с crypt(1) не установлено (это возможно в международной версии UNIX, где утилита crypt(1) недоступна). Если функции передан пустой ключ, возвращается 0, в остальных случаях возвращается 1. Run_crypt возвращает -1 при неуспешном чтении или записи по каналу, образованному run_setkey, в противном случае возвращается 0.

ДИАГНОСТИКА


В международной версии недопустимо значение аргумента flag функции des_encrypt, равное 1. Оно вызывает сообщение об ошибке.

СМ. ТАКЖЕ

, , .

crypt(1), , в Руководстве пользователя.

ПРЕДОСТЕРЕЖЕНИЯ

Возвращаемое значение функции crypt указывает на статические данные, изменяемые при каждом вызове. ежду данными.

Символ ~ в начале имени файла используется для ссылки на основной каталог пользователя. Если указан только этот символ, то есть ~, он заменяется на имя основного каталога пользователя, хранящееся в переменной home. Если после символа ~ указано имя, состоящее из букв, цифр и символов -, csh ищет пользователя с указанным именем и подставляет его основной каталог; так, ~guest будет расширено до /usr/guest, а ~guest/chmach до /usr/guest/chmach. Если за символом ~ идет символ, отличный от буквы и от /, или ~ появляется не в начале слова, этот символ остается неизменным.

Выражение a{b,c,d}e является сокращением для abe ace ade. При подстановке сохраняется порядок слева направо, результаты поиска имен файлов сортируются отдельно на нижнем уровне. Эта конструкция может быть вложенной. Так, ~guest/s1/{oldls,ls}.c будет расширено до /usr/ guest/s1/oldls.c /usr/guest/s1/ls.c (даже если эти файлы и не существуют), если основной каталог пользователя guest есть /usr/guest. Аналогично, ../{memo,*box} будет расширено до ../memo ../box ../mbox (обратите внимание, что memo не было отсортировано вместе с результатами сопоставления с шаблоном *box). Как частный случай, конструкции {, } и { } остаются неизменными.

Ввод/вывод

Стандартый ввод и вывод команды может быть переназначен следующим образом:

< имя

Открыть файл с данным именем (к имени вначале применяются подстановка переменных, подстановка результатов выполнения команд и генерация имен файлов) как стандартный ввод.

<< слово

Читать с ввода csh до тех пор, пока не встретится строка, совпадающая со словом. К слову не применяются подстановка переменных, подстановка результатов выполнения команд и генерация имен файлов, каждая считываемая строка сравнивается со словом перед выполнением подстановок всех типов. Если в слове не встречаются символы \, ", ', `, то в промежуточных строках производятся подстановки переменных и подстановки результатов выполнения команд, символ \ при этом экранирует символы $, ` и \. В подставляемых результатах выполнения команд сохраняются все пробелы, табуляции и переводы строк, а последний перевод строки удаляется. Получившийся текст помещается в некий временный файл, который передается команде в качестве стандартного ввода.

> имя
>! имя
>& имя
>!& имя



Имя файла, который будет использоваться в качестве стандартного вывода. Если файл не существует, он создается, если существует, то очищается, старое содержимое при этом теряется.

Если определена переменная noclobber, то файл обязан не существовать или являться байториентированным устройством (например, терминалом или /dev/null), иначе фиксируется ошибка. Такое соглашение предохраняет от случайного разрушения файлов. В этом случая использование ! служит для подавления контроля.

Использование & приводит к назначению на указанный файл не только стандартного вывода, но и стандартного протокола. Имя подвергается тем же подстановкам, что и в случае < имя.

>> имя
>>! имя
>>& имя
>>!& имя

Аналогично >, но с двумя отличиями: информация помещается в конец файла и, если определена переменная noclobber, то в случае отсутствия файла фиксируется ошибка, если только не использовалась форма записи с !.

Команде передается окружение, которое было в момент запуска csh, модифицированное переназначениями ввода/вывода и предыдущими командами конвейера. Так, команды, читаемые из файла, по умолчанию не имеют доступа к этому файлу, в качестве стандартного ввода им передается стандартный ввод csh. Для использования данных из того же файла необходимо использовать <<. Этот механизм позволяет использовать в конвейерах командные файлы csh и дает возможность csh читать со стандартного ввода с помощью блочного ввода/вывода. Обратите внимание, что стандартный ввод команды, выполняемой асинхронно, не назначается на /dev/null, а остается тем же, что и стандартный ввод csh. Если это терминал, то при попытке чтения со стандартного ввода процесс будет заблокирован и пользователю будет выдано сообщение (см. выше Сообщения о состоянии процесса).

Стандартный протокол может быть направлен туда же, куда и стандартный вывод, с помощью |& вместо |.

Выражения Некоторые из встроенных команд (которые будут описаны ниже) понимают выражения, операции в которых сходны с имеющимися в языке C, с теми же приоритетами. Выражения могут быть использованы в командах @, exit, if и while. Имеются следующие операции, перечисленные в порядке возрастания приоритетов:



&& | ^ & == != =~ !~ <= >= < >

<< >> + - * / % ! ~ ( )

Укажем группы операций, имеющих одинаковый приоритет:

== != =~ !~ <= >= < >

<< >>

+ * / %

Операции ==, !=, =~ и !~ сравнивают свои аргументы как цепочки символов; все остальные оперируют с числами. Операции =~ и !~ похожи на != и ==, но правый операнд в них является шаблоном (содержащим, например *, ?, [...]) с которым сопоставляется левый операнд. Это уменьшает необходимость в использовании оператора switch в командных файлах, когда на самом деле требуется сопоставление с шаблоном.

Цепочки, начинающиеся с 0, рассматриваются, как восьмеричные числа. Пустые и пропущенные аргументы рассматриваются, как 0. Результатами выражений являются цепочки символов, представляющие десятичные числа. Важно отметить, что никакие два компонента выражения не могут появиться в одном слове; во всех случаях, кроме тех, когда они граничат с символами &, |, , (, ) они должны быть окружены пробелами.

Операндами в выражениях могут выступать также результаты завершения команд, взятых в скобки { и }, а также запросы информации о файлах в виде -отношение файл, где отношение может быть следующим:
r Файл доступен на чтение. w Файл доступен на запись. x Файл доступен на выполнение. e Файл существует. o Пользователь является владельцем файла. z Файл имеет нулевой размер. f Файл является обычным. d Файл является каталогом.

К указанному имени применяется подстановка результатов выполнения команд и генерация имен файлов, затем проверяется, верно ли указанное отношение для реального пользователя. Если файл не существует или недоступен, все запросы возвращают ложь (0). Результатом завершения команды будет истина (1), если команда завершилась с кодом 0, иначе возвращается ложь. Если требуется более детальная информация о завершении, команду следует выполнять вне выражения и проверять код завершения.

Передачи управления

Csh содержит набор команд, которые могут быть использованы для передач управления внутри командных файлов, их можно с успехом использовать и при вводе с терминала, правда при этом возникают некоторые ограничения. Команды передачи управления требуют от csh повторного чтения или пропуска файла ввода поэтому, из соображений реализации, имеются некоторые ограничения на расположение ряда подобных команд.

Команды foreach, switch и while, а также форма if-then-else команды if требуют, чтобы главное слово находилось на отдельной строке, как показано ниже.

Если ввод csh не является адресуемым, csh при появлении цикла буферизует ввод и для реализации цикла адресуется к этому внутреннему буферу. (Пока позволяет размер внутреннего буфера, можно выполнять передачи управления назад и в неадресуемом вводе.)

Встроенные команды



Встроенные команды выполняются в рамках csh. Если встроенная команда является не последним компонентом конвейера, она выполняется в порожденном процессе.

alias
alias кличка
alias кличка список_слов

Первая форма выводит все клички и соответствующие им списки слов. Вторая печатает список слов, имеющий указанную кличку. Последняя форма присваивает кличку списку_слов; список_слов при этом подвергается подстановке результатов выполнения команд и генерации имен файлов. В качестве кличек нельзя использовать слова alias и unalias.

alloc [аргумент]

Показывает размер отведенной динамической памяти, как занятой, так и свободной. Если указан произвольный аргумент, показывается количество занятых и свободных блоков различных размеров. Первый размер блока равен 8, каждый следующий равен удвоенному предыдущему. Вывод этой команды может отличаться от описанного в тех системах, в которых применена схема управления памятью, отличная от применяемой на компьютерах VAX.

break

Приводит к передаче управления на конец самого внутреннего цикла foreach или while. Оставшиеся на текущей строке команды тем не менее выполняются. Таким образом, написание нескольких команд break на одной строке может быть использовано для выхода сразу из нескольких циклов.

breaksw

Приводит к выходу из переключателя (switch), передает управление за endsw.

case метка:

Метка условия в операторе switch, описанном ниже.

cd
cd имя
chdir
chdir имя

Изменяет текущий каталог пользователя на указанный. Если аргумент не указан, устанавливается основной каталог пользователя. Если имя в текущем каталоге не найдено (и не начинается с /, ./ или ../), то поиск имени производится во всех компонентах значения переменной cdpath. Наконец, если и этот поиск безуспешен, а имя является именем переменной csh, значение которой начинается с /, делается попытка установить текущий каталог, равный этому значению.

continue

Приводит к передаче управления на начало самого внутреннего цикла foreach или while. Оставшиеся на текущей строке команды тем не менее выполняются.

default:



Помечает случай по умолчанию в операторе switch. Он должен находиться после всех меток условия.

dirs Печатает стек каталогов; вершина стека расположена слева, первый каталог в стеке является текущим.

else
end
endif
endsw

См. ниже описания операторов foreach, if, switch, и while.

eval аргумент ...

[Аналогично .] Аргументы читаются, как если бы они поступали со стандартного ввода, и рассматриваются как команды, которые выполняются в текущем контексте. Обычно используется для выполнения команд, сгенерированных как результаты подстановки переменных и результатов выполнения команд, так как грамматический разбор выполняется до этих подстановок. См. также .

exec команда Указанная команда подменяет текущий csh.

exit
exit(выражение)

Csh завершается либо с кодом, хранящемся в переменной status (первая форма) либо с кодом, равным значению выражения (вторая форма).

foreach имя (список_слов)
...
end

Переменной имя последовательно присваиваются все слова из списка_слов и каждый раз выполняется последовательность команд между foreach и end. (И foreach, и end должны быть единственными командами на своих строках.) Встроенная команда continue может быть использована для принудительного перехода к следующей итерации, а встроенная команда break - для принудительного завершения цикла. Если foreach вводится с терминала, все тело цикла сначала считывается с приглашением ?, а затем начинается выполнение цикла.

glob список_слов

Аналогично , но управляющие последовательности, заданные как \0n, не интерпретируются, и слова при выводе разделяются пустыми символами (то есть символами с нулевым кодом), что удобно для программ, которые хотят использовать csh для генерации имен файлов из списка слов.

goto слово

Указанное слово подвергается подстановке результатов выполнения команд и генерации имен файлов. Формируется цепочка символов метка. Csh ищет в предыдущем вводе строку формата метка:, возможно, начинающуюся с пробелов и табуляций. Выполнение продолжается после найденной строки.

history
history n
history -r n
history -h n



Показывает список команд из протокола; если указано n, показываются последние n команд. Опция -r инвертирует порядок вывода команд, первыми показываются самые последние команды. Опция -h приводит к печати команд без их номеров. Это используется, чтобы сделать файл для команды source -h.

if (выражение) команда

Если указанное выражение истинно, выполняется команда (со своими аргументами). Подстановка переменных в команду if производится рано, тогда же происходит подстановка и в команду. Команда должна быть простой, не допускаются ни конвейеры, ни списки команд, ни списки команд в скобках. Обратите внимание: переназначение ввода/вывода осуществляется даже если выражение ложно, то есть команда не выполняется.

if (выражение) then
...
else if (выражение2) then
...
else
...
endif

Если указанное выражение истинно, то выполняются команды до первого else; иначе если выражение2 истинно, выполняются команды до второго else и т.д. Допустимо любое количество пар else-if; требуется ровно один endif. Часть else может быть опущена. (Слова else и endif должны появляться в начале строк; конструкция if-then должна быть одна на строке или после else.)

jobs
jobs -l

Выводит активные задания; опция -l добавляет к информации идентификаторы процессов.

kill %задание
kill -сигнал %задание ...
kill идентификатор_процесса
kill -сигнал идентификатор_процесса ...
kill -l

Посылает сигнал завершения (15) или указанный сигнал указанным заданиям или процессам. Сигналы задаются номером или названием (как указано во включаемом файле <sys/signal.h>, только без приставки SIG). Названия сигналов выводятся по kill -l. В этой команде нет умолчания, то есть просто kill не посылает сигнала текущему заданию.

login

Завершить "входной" csh, заменив его на /bin/login. Это один из способов закончить работу, сделанный для совместимости с .

logout Завершить "входной" csh. Используется, если установлена переменная ignoreeof.

notify
notify %задание ...

Информировать пользователя асинхронно, сразу же, как изменится состояние текущего или указанного заданий; обычно информация выдается перед приглашением. Информация всегда выдается асинхронно, если установлена переменная notify.

onintr
onintr onintr метка



Управляет действиями при прерываниях. Первая форма восстанавливает действия по умолчанию, которые заключаются в завершении выполнения командных файлов и возврате на уровень ввода команд с терминала. Вторая форма onintr приводит к игнорированию всех прерываний. Последняя форма приводит к выполнению команды goto метка при получении прерывания или завершении по прерыванию порожденного процесса.

В любом случае, если csh запущен асинхронно и прерывания уже игнорируются, все формы onintr не имеют смысла и прерывания продолжают игнорироваться как в csh, так и во всех запускаемых командах.

popd
popd +n

Вытолкнуть элемент из стека каталогов, перейдя к новому каталогу. С аргументом +n удаляет n-ый элемент стека. Элементы стека нумеруются от вершины, начиная с 0.

pushd
pushd имя
pushd +n

Без аргументов pushd меняет два верхних элемента стека каталогов. Если аргумент указан, pushd изменяет текущий каталог (как cd) и помещает старый текущий каталог (из переменной cwd) в стек каталогов. С числовым аргументом, извлекает n-ый аргумент стека каталогов, помещает его на вершину стека и устанавливает его в качестве текущего каталога. Элементы стека нумеруются от вершины, начиная с 0.

rehash

Переустановить внутреннюю хэш-таблицу содержимого каталогов, содержащихся в переменной path. Это требуется, если в эти каталоги добавлены новые команды после того, как был запущен csh. Команду rehash необходимо выполнить, если Вы добавили какую-нибудь команду в свой каталог или системный программист изменил содержимое системных каталогов.

repeat число команда

Команда, к которой применимы те же ограничения, что и в команде оператора if (см. выше), выполняется заданное число раз. Переназначение ввода/вывода осуществляется ровно один раз, включая случай, когда число равно 0.

set
set имя
set имя=слово
set имя[индекс]=слово
set имя=(список_слов)

Первая форма команды показывает значения всех переменных csh. Значения, размер которых более одного слова, заключаются в скобки. Вторая форма присваивает переменной пустую цепочку. Третья форма присваивает переменной одно слово. Четвертая форма заменяет значение указанного компонента; этот компонент обязан существовать. Последняя форма присваивает переменной список слов. Во всех случаях к значению применяется подстановка результатов выполнения команд и генерация имен файлов.

Аргументы могут повторяться, позволяя одной командой set изменить значения нескольких переменных. Отметим, что подстановка значений переменных производится для всех аргументов до выполнения присваиваний.

setenv
setenv имя
setenv имя значение



Первая форма выводит текущие значения всех переменных окружения. Последняя форма присваивает значение (цепочку символов) переменной окружения. Вторая форма присваивает переменной окружения пустую цепочку. Наиболее часто используемые переменные окружения USER, TERM и PATH автоматически импортируются и экспортируются из csh-переменных user, term, и path соответственно; использовать для них setenv не нужно.

shift
shift переменная

Слова, составляющие значение переменной argv сдвигаются влево, удаляя argv[1]. Если значение argv не определено или имеет в качестве значения менее одного слова, фиксируется ошибка. Вторая форма выполняет те же действия над указанной переменной.

source имя
source -h имя

Csh читает команды из файла имя. Команды source могут быть вложены, однако слишком большая вложенность может привести к исчерпанию дескрипторов файлов в csh. Ошибка на любом уровне вложенности прерывает сразу все команды source. Обычно вводимые по source команды не помещаются в протокол, опция -h вызывает помещение команд в протокол без выполнения.

switch (цепочка)
case метка1:
...
breaksw
...
default:
...
breaksw
endsw

Каждая метка условия сопоставляется с цепочкой, к которой применяется подстановка результатов выполнения команд и генерация имен файлов. В метке условия могут использоваться символы *, ? и [...], к меткам применяется подстановка значений переменных. Если ни одна из меток условий не соответствует цепочке, выполнение продолжается после метки default. Каждая метка условия, в том числе метка default, должна располагаться с начала строки. Команда breaksw приводит к передаче управления за endsw. Иначе управление проходит по последующим меткам (как в языке C). Если ни одна из меток условий не соответствует цепочке, а метка default отсутствует, управление передается за endsw.

umask umask значение

Маска режима создания файлов выводится (первая форма) или устанавливается (вторая форма). Маска задается восьмеричными цифрами. Обычные значения маски 002 (дает все права доступа группе и доступ на чтение и выполение остальным) или 022, (дающий все права, кроме записи, всем пользователям).

unalias шаблон Все клички, имена которых соответствуют указанному шаблону, удаляются. Так, командой unalias * удаляются вообще все клички. Ситуация, когда нечего удалять, ошибкой не считается.

unhash



Запретить использование внутренней хэш- таблицы для ускорения поиска выполняемых программ.

unset шаблон

Все переменные, имена которых соответствуют указанному шаблону, удаляются. Так, командой unset * удаляются вообще все переменные; это приводит к очень неприятным последствиям. Ситуация, когда нечего удалять, ошибкой не считается.

unsetenv шаблон

Все переменные, имена которых соответствуют указанному шаблону, удаляются из окружения. См. также выше команду setenv.

wait Ожидание завершения всех фоновых процессов. Если csh интерактивный, то по прерыванию ожидание прекращается, а csh печатает имена и номера всех заданий.

while (выражение)
...
end

Пока вычисление выражения дает ненулевой результат, выполняются команды между while и end. Для принудительного завершения цикла или перехода к следующей итерации можно использовать команды break и continue. И while, и end должны быть единственными командами на своих строках. При вводе цикла с терминала происходит то же, что и в случае цикла foreach.

@
@ имя = выражение
@ имя[индекс] = выражение

Первая форма печатает значения всех переменных csh. Вторая форма присваивает переменной значение выражения. Если выражение содержит знаки операций <, >, & или |, то они должны обязательно оказаться внутри скобок ( ). Третья форма заменяет значение указанного компонента; этот компонент обязан существовать.

Как и в языке C, доступны операции *=, += и т.д. Отделять имя от знака = пробелом не обязательно. Пробелы, однако, обязательно должны разделять компоненты выражения, иначе они будут трактоваться как одно слово.

Специальные постфиксные операторы ++ и -- соответственно увеличивают и уменьшают значения переменной, например @ i++.

Предопределенные переменные и переменные окружения Следующие переменные имеют для csh специальное значение. Переменные argv, cwd, home, path, prompt, shell и status при инициалиализации устанавливаются всегда. Переменные cwd и status изменяются автоматически, остальные - только по указанию пользователя.

Csh копирует значение переменной окружения USER в свою переменную user, TERM - в term и HOME - в home, при изменении значения этих переменных csh производится обратное копирование. То же происходит с переменной окружения PATH; не надо все время заботиться о присваивании этих переменных, достаточно их определить в файле .cshrc; порожденные процессы импортируют значение path из окружения и реэкспортируют его в случае изменения.

Итак, опишем значения специальных переменных csh.



argv Значение этой переменной устанавливается равным значению аргументов запуска csh. Именно из этой переменной подставляются позиционные параметры, то есть $1 заменяется на $argv[1] и т.д.

cdpath

Список каталогов, в которых производится поиск подкаталогов командой chdir.

cwd Полное маршрутное имя текущего каталога.

echo Устанавливается, если при вызове csh указана опция -x. Вызывает выдачу каждой команды перед выполнением. Для невстроенных команд все подстановки производятся перед выдачей. Встроенные команды выдаются перед применением подстановок результатов выполнения команд и генерацией имен файлов, так как эти подстановки проводятся затем избирательно.

histchars

Этой переменной можно присвоить цепочку из двух символов, которые задают подстановки из протокола. Первый символ замещает используемый по умолчанию символ !. Второй символ замещает символ ^ в быстрых подстановках.

history

Может быть задано числовое значение, управляющее размером протокола. Слишком большое значение может привести к переполнению памяти. Последняя выполненная команда всегда сохраняется в протоколе.

home Основной каталог пользователя, инициализируемый из окружения. Символ ~ при генерации имен файлов ссылается на эту переменную.

ignoreeof

Если значение этой переменной установлено, то csh игнорирует конец файла для вводных устройств-терминалов. Это предохраняет от случайного завершения csh с помощью CTRL+D.

mail Имена файлов, в которых csh ищет письма. Поиск писем производится с некоторым временным интервалом перед выдачей приглашения после завершения команд. Если найден файл, имеющий время доступа меньшее или равное времени модификации, выдается сообщение You have new mail.

Если первое слово значения переменной mail является числом, оно задает интервал опроса писем, в секундах. Значение по умолчанию равно 10 минутам.

Если указано несколько файлов для поиска, сообщение будет выглядеть, как New mail in имя_файла, если письмо обнаружено в файле имя_файла.

noclobber

Как уже упоминалось в разделе "Ввод/вывод", на переназначение вывода накладываются ограничения, дающие гарантию, что файлы не будут случайно разрушены и что >> ссылаются на существующие файлы.

notify



Если эта переменная установлена, csh асинхронно информирует о завершениях заданий. По умолчанию информация выдается перед приглашением.

path Каждое слово переменной path задает каталог, в котором ищутся команды для выполнения. Пустое слово означает текущий каталог. Если переменная path не определена, все маршрутные имена должны быть полными. Обычное значение для переменной path - это ., /bin и /usr/bin, но в разных системах могут быть разные соглашения. Для суперпользователя список поиска по умолчанию - /etc, /bin и /usr/bin. Если при запуске csh не указаны опции -c и -t, содержимое каталогов из переменной path хешируется после чтения файла .cshrc и при каждом изменении переменной path. Если в указанные каталоги добавляются новые команды, требуется выполнить rehash, иначе команды могут быть не найдены.

prompt

Цепочка символов (приглашение), которая выводится перед каждым чтением команд с терминального ввода. Если в цепочке появляется символ !, он будет заменен на текущий номер команды (если он не экранирован предшествующим \). Значения по умолчанию: "% " для обычного пользователя и "# " для суперпользователя.

savehist

Задаваемое числовое значение управляет количеством элементов протокола, которые сохраняются в файле ~/.history, когда пользователь выходит из системы. Все команды, на которые были ссылки из этих команд, также сохраняются. При запуске csh помещает файл ~/.history в протокол (аналогично команде source), позволяя сохранять протокол между сеансами. Слишком большие значения переменной savehist замедляют запуск csh.

shell

Файл, в котором находится shell. Используется в порожденных процессах для интерпретации файлов, у которых установлен бит выполнения, но которые являются для системы неисполняемыми. (См. ниже описание выполнения внешних команд.) Инициализируется в (зависящий от системы) файл, хранящий csh.

status

Код завершения последней команды. Если она завершилась аварийно, к коду добавляется 128. Встроенные команды при аварийном завершении возвращают 1, при нормальном - 0.

verbose



Устанавливается опцией - v при запуске csh; вызывает печать каждой команды после завершения подстановок из протокола.

Выполнение внешних команд

Если сгенерированная для выполнения команда оказывается не внутренней, csh пытается выполнить ее с помощью execve(2). Каждое слово переменной path обозначает каталог, из которого csh пытается выполнить команду. Если при запуске не указаны опции -c и -t, csh хеширует содержимое каталогов из переменной path, поэтому попытка выполнения делается только для имеющихся команд, что сильно ускоряет поиск выполняемой команды, если список поиска очень длинный. Если этот механизм выключен (с помощью unhash), или если при запуске не указаны опции -c или -t, а также во всех случаях для каждой компоненты переменной path, которая не начинается с символа /, csh конкатенирует компоненту path с именем команды, формируя маршрутное имя файла, и пытается этот файл выполнить.

Команды, заключенные в скобки, всегда выполняются в порожденном процессе. Так, (cd; pwd); pwd печатает основной каталог пользователя, оставляя текущий каталог неизменным и печатая его вслед за основным, а cd; pwd делает текущим основной каталог пользователя. Команды, заключенные в скобки, обычно используются, чтобы предохранить текущий csh от изменения текущего каталога командами chdir.

Если к файлу есть права доступа на выполнение, но он не является двоичным выполняемым файлом, то предполагается, что это командный файл и для его чтения запускается новый csh.

Если слово shell является кличкой, то соответствующие ей слова при формировании команды будут подставлены перед списком аргументов. Первое слово при этом должно быть полным маршрутным именем командного интерпретатора (например, $shell). Обратите внимание, что это специальный случай подстановки клички, который выполняется очень поздно и позволяет только подставить слова перед списком аргументов без всякой модификации.

Обработка аргументов

Если аргумент 0 csh равен -, то csh считается "входным". Опции интерпретируются следующим образом:
-b Вызывает прерывание процесса обработки опций, оставшиеся аргументы не будут обрабатываться, как опции. Используется для передачи опций командному файлу, без опасения, что их обработает запускаемый csh. -c Команды читаются из (одного) файла, имя которого следует за -c и обязано присутствовать. Все остальные аргументы помещаются в переменную argv. -e Csh завершается, если хотя бы одна из команд завершается аварийно или выдает ненулевой код завершения. -f Более быстрый запуск csh, без поиска и выполнения файла .cshrc из основного каталога пользователя. -i Csh является интерактивным и выдает на верхнем уровне приглашения, даже если стандартный ввод не является терминалом. Без этой опции csh является интерактивным, только если стандартный ввод и стандартный вывод назначены на терминал. -n Происходит грамматический разбор команд, без выполнения. Эта опция используется для синтаксической проверки командных файлов. -s Исходная информация для команд берется со стандартного ввода. -t Из файла ввода считывается и выполняется ровно одна строка. В ней может использоваться символ \ для экранирования перевода строки и продолжения команды на следующей строке. -v Устанавливает переменную verbose; вызывает печать каждой команды после завершения подстановок из протокола. -x Устанавливает переменную echo. Вызывает выдачу каждой команды перед выполнением. -V Устанавливает переменную verbose до выполнения файла .cshrc. -X То же для -x, что -V для -v. <



/p>

После обработки опций, если остались еще аргументы и не было опций -c, -i, -s, или -t, первый из оставшихся аргументов берется в качестве имени файла с выполняемыми командами. Csh открывает этот файл, сохраняя его имя для возможной последующей подстановки вместо $0. Так как многие системы используют стандартный shell, командные файлы которого несовместимы с csh, то csh будет выполнять стандартный shell, если первый символ командного файла не есть #, то есть если командый файл не начинается с комментария. Оставшиеся аргументы инициализируют переменную argv.

Обработка сигналов

Обычно csh игнорирует сигналы выхода (3). Задания, запущенные асинхронно, не получают сигналов, сгенерированных с клавиатуры, в том числе сигнал 1. Реакция на остальные сигналы наследуется от родительского процесса. Обработка прерываний и сигналов завершения в командных файлах управляется командой onintr. "Входной" csh перехватывает сигнал завершения, остальные передают реакцию на него порожденным процессам в том же состоянии, что получили от родителей. В любом случае прерывания запрещены во время чтения "входным" csh файла .logout.

ФАЙЛЫ

~/.cshrc Читается в начале выполнения каждым csh. ~/.login Читается "входным" csh после чтения .cshrc. ~/.logout Читается "входным" csh при завершении. /bin/sh Стандартный shell для командных файлов, не начинающихся с #. /tmp/sh* Временные файлы для

ОГРАНИЧЕНИЯ

Слова не могут быть длиннее 1024 символов. Система ограничивает список аргументов 10240 символами. Число аргументов в команде, к которой применяется генерация имен файлов, ограничено 1/6 от числа символов, допустимых в списке аргументов. Подстановка результатов выполнения команд не может подставить больше символов, чем допустимо в списке аргументов. Для обнаружения зацикливания csh ограничивает число подстановок вместо кличек в одной строке двадцатью.









CSH(1)


НАЗВАНИЕ

csh - Активизирует командный интерпретатор shell с синтаксисом, аналогичным синтаксису языка С.

СИНТАКСИС

csh [ -cefinstvVxX ] [ arg ... ]

ОПИСАНИЕ

Команда csh является интерпретатором языка команд. Она начинается с выполнения команд из файла .cshrc во входном (home) каталоге вызвавшего ее пользователя. Если это интерпретатор shell вхождения в систему, то, кроме того, он выполняет здесь команды из файла .login. В случае нормального функционирования, интерпретатор shell начинает cчитывание команд с терминала, выводя в качестве приглашения знак %. Процесс обработки аргументов и использование интерпретатора shell для обработки файлов, содержащих командные сценарии, будут описаны позже.

Затем интерпретатор shell неоднократно выполняет следующие действия: считывается строка командного ввода и заносится в words (слова). Полученная из слов последовательность помещается в список предыстории команд, а затем подвергается синтаксическому анализу. После этого, наконец, каждая команда текущей строки выполняется.

Когда завершает свое выполнение интерпретатор shell вхождения в систему, он выполняет команды из файла .logout во входном (home) каталоге пользователя.

Лексическая структура

Интерпретатор shell разделяет входные строки на слова, считая, что они отделяются друг от друга пробелам и знакам табуляции, и учитывая следующие исключения. Символы &, |, ;, <, >, (, ) формируют отдельные слова. Отдельные слова формируют такие пары сдвоенных символов, как &&, , << или >>. Эти метасимволы синтаксического анализатора могут быть частью других слов;или их специальное назначение может быть отменено предшествующим им символом \. Признак новой строки, с предшествующим ему символом \, эквивалентен пробелу.

Кроме того, строки, заключенные в пары соответствующих кавычек: `, ' или ", формируют части слова; метасимволы в таких строках, включающих пробелы и знаки табуляции, не формируют отдельных слов. Семантика таких кавычек впоследствии описывается. Внутри пар, состоящих из символов \ или ", признак новой строки с предшествующим знаком \ представляет собой действительно символ новой строки.

Когда входные данные для интерпретатора shell вводятся не с терминала, символ # указывает, что в строке находятся комментарии, которые продолжаются до конца входной строки. Этот символ не имеет этого специального значения, если ему предшествует знак \, и если он находится внутри кавычек `, ' или ".

Команды


Простая команда представляет собой последовательность из слов, первое из которых определяет команду, которая должна быть выполнена. Простая команда или последовательность из простых команд, разделенных символом |, формирует конвейер. Выход каждой команды в конвейере связывается со входом следующей команды. Последовательности конвейеров могут быть разделены точкой с запятой, и затем выполняются последовательно. Последовательность конвейеров может быть выполнена, не дожидаясь завершения выполнения последовательности, если за ней следует знак &. Завершение такой последовательности по сигналу разъединения автоматически запрещается; использование команды nohup не требуется.

Любые последовательности из описанных выше могут быть заключены в круглые скобки для того, чтобы сформировать простую команду (которая, в свою очередь, может быть составляющей некоторого конвейера, и т.д.). Кроме того, как и в языке С, можно разделять конвейеры, указав знаки && или , которые означают, что второй конвейер будет выполняться только в случае успешного или неуспешного завершения первого, соответственно. (См. раздел "Выражения".)

Подстановки

Следующие разделы описывают различные преобразования входных данных, выполняемые интерпретатором shell, в том порядке, в каком они встречаются.

Подстановки Предыстории

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

Подстановки предыстории начинаются с символа ! и могут начаться в любом месте входного потока, если они уже не выполняются. Символу ! может предшествовать символ \ для отмены его специального назначения; символ ! проходит неизмененным, если за ним следует пробел, знак табуляции, признак новой строки, знак = или знак (. Также, подстановки предыстории могут встречаться, когда входная строка начинается со знака ^. Эта специальная аббревиатура будет описана позже.

Любая входная строка, содержащая подстановку предыстории, отображается перед ее выполнением на терминале так, как если бы она была введена без подстановки предыстории.

Команды, вводимые с терминала, которые состоят из одного или более слов, сохраняются в списке предыстории, размером которого управляет значение переменной history. Предыдущая команда сохраняется всегда. Нумерация команд производится последовательно от 1.

Например, введите команду:



history

Теперь просмотрите следующий вывод, производимый командой history:

9 write michael 10 ex write.c 11 cat oldwrite.c 12 diff *write.c

Показаны команды с их пособытийными номерами. Обычно, использование пособытийных номеров не является обязательным, но текущий событийный номер может быть сделан частью приглашения, выводимого на экран, при введении в эту строку приглашения знака !.

Если текущим событием является событие с номером 13, то мы можем сослаться на предыдущие события при помощи событийного номера следующим образом: !11, или же при помощи записи !-2 (относящейся к тому же событию), а также с использованием префикса (первой буквы) командного слова: !d для события 12 или префикса !w для события 9, или при помощи строки символов, содержащихся в слове из команды, как например, строка !?mic? тоже отсылает к событию 9. Такие формы вводимых записей, без последующей модификации, просто осуществляют повторный ввод слов определенных событий, отделяемых друг от друга одним пробелом. Отдельным случаем является запись вида !!, которая осуществляет ссылку на предыдущую команду; таким образом, запись !! является по существу функцией redo. Запись вида !# производит ссылку на текущую (вводимую в данный момент) команду. Например, как в записи !#:1, эта ссылка позволяет выбрать слово из находящегося слева текста текущей строки, что предотвращает повторный ввод длинного имени.

Чтобы выделить слова из некоторого события, следует ввести спецификацию события, затем двоеточие и указатель на желаемые слова. Слова во входной строке нумеруются от 0, первое слово (обычно, команда) имеет номер 0, второе слово (первый аргумент) имеет номер 1, и т.д. Основными указателями на слова являются следующие значения:
0 Первое слово (команда) n n - аргумент ^ Первый аргумент, т.е. 1 $ Последний аргумент % Слово, соответствующее строке поиска ?s? (непосредственно предшествующей в записи спецификации события) x-y Диапазон слов -y Аббревиатура для записи диапазона 0-y * Аббревиатура для записи диапазона ^-$, которая задает пустое множество, если в событии только 1 слово. x* Аббревиатура для записи диапазона x-$ x- Аналогично x*, но не включая слово $.



Двоеточие, отделяющее спецификацию события от указателя на слова, может быть опущено в случае, если аргументный селектор начинается с символа ^, $, *, - или %. После указателя на слова, который может и отсутствовать, может быть помещена последовательность модификаторов так, что каждому предшествует двоеточие. Определяются следующие модификаторы:
h Удаляет последнюю составляющую обозначения пути r Удаляет последнюю составляющую .XXX s/l/r Производит подстановку l вместо r t Удаляет все предшествующие составляющие обозначения пути & Повторяет предыдущую подстановку g Выполняет глобальную замену, с учетом указанных ранее подстановок p Печатает новую команду, но не выполняет ее q Заключает в кавычки подставленные слова, предотвращая выполнение подстановок x Аналогично q, но прерывает слова на пробелах, знаках табуляции и признаках новой строки.

Если не предшествует модификатор g, то модификация применяется только к первому доступному для изменения слову. В случае любой модификации ошибочной ситуацией является отсутствие соответствующего слова.

Левые части подстановок являются не регулярными, в смысле редакторов, выражениями, а скорее строками. Любой символ может быть использован в качестве разделителя вместо знака /; знак \ заключает в кавычки разделитель внутри строк l и r. Символ & в правой части подстановки заменяется на текст из левой части. Знак \ также заключает в кавычки символ &. Пустое значение строки l использует предыдущую строку, взятую из предыдущего значения l, или из контекстуально сканированной строки s в подстановке !?s?. Последний разделитель в подстановке может быть опущен, если в контекстуальном сканировании за последним знаком вопроса ? сразу же следует признак новой строки.

Ссылка предыстории может быть задана без спецификации события, например, !$. В этом случае ссылка относится либо к предыдущей команде, если в той же самой строке отсутствует предыдущая ссылка предыстории, либо, в противном случае, эта форма подстановки повторяет предыдущую ссылку. Таким образом запись вида !?foo?^!$ задает первый и последний аргумент из команды, соответствующей подстановке ?foo?.

Существует специальная аббревиатура ссылки предыстории, представляемая знаком ^, который является первым непустым символом входной строки. Она эквивалентна подстановке вида !:s^ и обеспечивает удобное сокращение для замещений на текст из предыдущей строки. Таким образом, запись ^lb^lib проверяет орфографию lib в предыдущей команде. Наконец, подстановка предыстории может быть заключена в фигурные скобки { и }, если необходимо изолировать ее от последующих символов. Таким образом, после команды ls -ld ~paul Вы можете сделать подстановку !{l}a, чтобы в результате выполнить команду ls -ld ~paula, в то время как запись вида !la будет просматривать команды, начинающиеся с la.

Заключение В Кавычки При Помощи Знаков ' и "



Заключение в кавычки строк при помощи знаков ' и " может быть использовано для предупреждения всех или некоторых из оставшихся подстановок. Строки, заключенные в кавычки вида ', предупреждают любую последующую интерпретацию. Строки, заключенные в кавычки вида ",являются доступными и может быть произведено их командное раскрытие.

В обоих случаях результирующий текст становится (весь или его часть) отдельным словом; только в одном специальном случае (см. раздел Подстановка Команд) заключенная в кавычки вида " строка производит части более чем одного слова; строка, заключенная в кавычки вида ', этого не делает.

Подстановка Псевдонимов

Интерпретатор shell поддерживает перечень псевдонимов, которые могут быть установлены, выведены на экран и модифицированы при помощи команд alias и unaliase. По завершению сканирования командной строки, она подвергается синтаксическому анализу, в результате чего разбивается на отдельные команды, и после этого проверяется первое слово каждой команды, слева направо,

имеет ли оно псевдоним. Если имеет, то текст, который является псевдонимом для этой команды, при помощи механизма предыстории считывается повторно таким образом, как если бы эта команда была предыдущей входной строкой. Полученные в результате слова заменяют эту команду и список аргументов. Если не было сделано ни одной ссылки к списку предыстории, то список аргументов остается без изменений.

Таким образом, если псевдонимом для команды ls является ls -l, то команда "ls /usr" будет преобразована в команду "ls -l /usr". Аналогично, если псевдоним для команды lookup был "grep \!^ /etc /passwd", то команда "lookup bill" будет преобразована к виду "grep bill /etc/passwd".

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

Отметим, что такой механизм допускает псевдонимы для представления метасинтаксиса синтаксического анализатора. Таким образом, мы можем назначить псевдоним печати "'pr\!* | lpr'", чтобы сформировать команду, которая разбивает на страницы свои аргументы для построчного принтера.

Существует четыре псевдонима команды csh, поставляемые с командой csh системы XENIX System V. Это pushd, popd, swapd и flipd. Эти псевдонимы поддерживают стек каталогов.



pushd dir

Текущий каталог помещает в вершину стека каталогов, изменяет текущий каталог на каталог dir.

popd

Изменяет текущий каталог на каталог из вершины стека, затем удаляет (выталкивает) верхний каталог из стека, и объявляет его текущим.

swapd

Переставляет два верхних каталога в стеке. Верхний каталог становится вторым от вершины стека, а второй от вершины каталог становится верхним каталогом.

flipd

Производит переключения между двумя каталогами, текущим каталогом и верхним каталогом из стека. Если в данный момент Вы находитесь в каталоге dir1, а каталог dir2 располагается в вершине стека, то при выполнении команды flipd Вашим каталогом становится dir2, а dir1 помещается на его место в вершине стека. При повторном вызове flipd Вашим каталогом станет dir1, а dir2 снова станет верхним каталогом в стеке.

Подстановка Переменных

Интерпретатор shell поддерживает набор переменных, каждая из которых имеет в качестве ее значений список из нуля или более слов. Некоторые из этих переменных устанавливаются интерпретатором shell или на них можно ссылаться при помощи интерпретатора shell. Например, переменная argv является отображением списка аргументов интерпретатора shell, и на слова, указанные в значении этой переменной, можно ссылаться только специальными способами.

Значения переменных могут быть выведены на экран и изменены при помощи команд set и unset. Некоторое число переменных, на которые производятся ссылки при помощи интерпретатора shell, являются двоичными переключателями; интерпретатор shell не проверяет, какие значения имеют эти переменные, а только установлены они или нет. Например, переменная verbose является двоичным переключателем, который назначает вывод на экран отображения вводимой команды. Эта переменная устанавливается в результате применения в командной строке опции -v.

Некоторые другие операции трактуют переменные в числовом значении. Команда со знаком @ допускает выполнение числовых вычислений и назначение результата переменным. С другой стороны, значения переменных всегда представляются в виде (нуля или более) символьных строк. В целях проведения числовых операций нулевая символьная строка рассматривается, как ноль, а второе и последующие слова значения переменной, состоящего из нескольких слов, игнорируются.

После того, как для входной строки выявлены псевдонимы, и проведен синтаксический анализ, и перед тем, как каждая команда будет выполнена, выполняется подстановка переменных, подключаемая при помощи символов знака доллара ($). Такое раскрытие может быть отменено указанием обратной косой черты (\) перед знаком доллара, но не в двойных кавычках ("), где оно всегда появляется, и не в одинарных кавычках ('), где оно никогда не появляется. Строки, заключенные в обратные кавычки (`), интерпретируются позже (См. раздел Подстановка Команд ниже), так что подстановка знака доллара не возникает в таких строках до последнего момента, если вообще возникает. Знак доллар проходит без изменений, если за ним следуют пробел, знак табуляции или признак новой строки.

Переадресации ввода и вывода распознаются перед раскрытием переменных, и представляют собой переменные, раскрываемые особо. С другой стороны, имя команды и полный список аргументов раскрываются вместе. Таким образом, для первого слова (команды) возможна генерация более, чем одного слова, первое из которых становиться именем команды, а остальные - аргументами.

Если отсутствует заключение в двойные кавычки или не задан модификатор :q, результатами подстановки переменной могут в конечном счете оказаться подставленные команда и имя файла. Заключенная в двойные кавычки (") переменная, значение которой состоит из нескольких слов, раскрывается в часть одного слова со словами, указанными в значении переменной и разделенными пробелами. Когда для подстановки употребляется модификатор :q, переменная раскрывается в несколько слов, где каждое отделено пробелом и заключено в кавычки, чтобы воспрепятствовать дальнейшей подстановке команды или имени файла.

Ниже приведены последовательности для введения значений переменных на вход интерпретатора shell. Кроме выше указанного, ссылка на неустановленную переменную считается ошибкой.



$name
${name}

Заменяются словами из значения переменной name (имя), при этом каждое слово отделяется пробелом. Фигурные скобки отделяют параметр name от последующих символов, которые в противном случае воспринимались бы как его часть. Переменные интерпретатора shell имеют имена, содержащие до 20 букв, цифр и символов подчеркивания.

Если параметр name не является переменной интерпретатора shell, но устанавливается в среде, то возвращается именно это значение (но : модификаторы и другие формы записей, заданные ниже, в этом случае становятся недоступными).

$name[selector]
${name[selector]}

Может использоваться для выбора только некоторых слов из значения параметра name. Селектор (selector) подвергается подстановке $ и может содержать один или два номера, разделенных знаком -. Первое слово в значении переменных нумеруется 1. Если первый номер интервала опущен, то по умолчанию он устанавливается в значение 1. Если опущен последний член интервала, его значение по умолчанию $#name. При задании параметра selector символом *, выбираются все слова. Если интервал задает пустое множество или опущен второй аргумент в интервале, это не является ошибкой.

$#name
${#name}

Задает число слов в переменной. Это удобно для последующего использования в определении параметра [selector].

$0

Подставляет имя файла, из которого производится считывание командного ввода. В случае неизвестного имени файла происходит ошибка.

$number
${number}

Эквивалентно записи $argv[number].

$*

Эквивалентно записи $argv[*].

Модификаторы :h, :t, :r, :g и :x могут быть применены к подстановкам, описанным выше, как и модификаторы :gh, :gt и :gr. Если в командной форме появляется пара скобок { }, то модификаторы должны быть внутри этих скобок. В каждом раскрытии $ допускается только один модификатор :.

При помощи модификаторов : не могут быть модифицированы следующие подстановки:

$?name
${?name}

Подставляет символ 1, если name установлено, и 0, в противном случае.

$?0

Подставляет 1, если известно имя текущего входного файла, и 0, в противном случае.



$$

Подставляет номер (десятичный) процесса, породившего процесс интерпретатора shell.

Подстановка Команд и Имен Файлов

Подстановка команд и имен файлов применяется выборочно к аргументам встроенных команд. Это означает, что части выражений, которые не являются оцениваемыми, не подвергаются этим раскрытиям. Для команд, которые не являются внутренними по отношению к интерпретатору shell, имя команды подлежит подстановке отдельно от списка аргументов. Это происходит много позже, после выполнения переадресации ввода-вывода, и в процессе, порожденном главным процессом интерпретатора shell.

Подстановка Команд

Подстановка команд указывается включением команды в обратные кавычки. Вывод, производимый такой командой, как правило, помещается в отдельные слова, разделенные пробелами, знаками табуляции и признаками новой строки, где нулевые слова отбрасываются, после чего этот текст помещается в оригинальную строку. Внутри двойных кавычек только признаки новой строки приводят к образованию новых слов; пробелы и знаки табуляции сохраняются.

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

Подстановка Имен Файлов

Если некоторое слово содержит любой из символов: *, ?, [ или {, или начинается с символа ~, то это слово является кандидатом на выполнение подстановки имен файлов, также известной, как глобальная подстановка. Это слово, затем, принимается за образец и заменяется на перечень имен файлов, отсортированных в алфавитном порядке, которые соответствуют этому образцу. В некотором списке слов, задающем подстановку имен файлов, ошибкой является отсутствие образца для сопоставления с существующим именем файла, но при этом не требуется, чтобы каждый образец сопоставлялся. Только метасимволы *, ? и [ подразумевают сопоставление образцу, символы ~ и { скорее сродни аббревиатурам.

В именах файлов, сопоставляемых с образцом, символ . либо в начале имени файла, либо следующий непосредственно за символом /, так же как и сам символ /, должны быть в точности совпадающими. Символ * соответствует любой символьной строке, включая пустую. Символ ? соответствует одному любому символу. Последовательность в квадратных скобках [] задает соответствие одному (любому) из символов, заключенных в скобки. Пара символов, разделенных знаком -, и заключенная в квадратные скобки [], задает соответствие любому символу, лексически расположенному между этой парой символов.

Символ ~ в начале имени файла используется для ссылки на собственные (home) каталоги. Будучи единственным, он раскрывается, как входной (home) каталог вызывающего пользователя, отображенный в значении переменной home. Когда за этим символом следует имя, содержащее буквы, цифры и символы -, интерпретатор shell осуществляет поиск пользователя с таким именем и подставляет его входной (home) каталог. Так, запись ~ken может быть раскрыта как /usr/ken, а запись ~ken/chmach - в виде /usr/ken/chmach. Если за символом ~ следует символ, отличный от буквы или символа /, или символ ~ появляется не в начале слова, то он остается без изменений.

Метаназначение a{b,c,d}e является сокращением для abe ace ade. Порядок следования слева направо сохраняется, при этом результаты сопоставления сортируются отдельно, начиная с нижнего уровня, чтобы сохранить этот порядок. Эта конструкция может быть вложенной. Так, запись вида ~source/sl/{oldls,ls}.c в предположении, что собственным каталогом для sourse является / usr/source, раскрывается в следующие имена файлов: /usr/source /sl/oldls.c и /usr/source/sl/ls.c, независимо от того, существуют или нет эти файлы. Аналогично, форма вида ../{memo,*box} может быть раскрыта как ../memo ../box ../mbox. (Заметим, что имя memo не будет упорядочено наряду с результатами сопоставления по образцу *box.) В виде исключения символы {, } и {} проходят без изменений.

Средство Контроля Орфографии



Также, как и в интерпретаторе shell Баурна, при использовании команды cd(C) данный интерпретатор shell осуществляет проверку орфографии. Например, если Вы производите смену каталога при помощи команды cd и сделали орфографическую ошибку в имени каталога, интерпретатором shell будет предложен альтернативный вариант орфографии для существующего каталога. Введите "y" (да) и нажмите клавишу RETURN (или сразу же нажмите RETURN), чтобы произвести изменение на представленный каталог. Если предложенная орфография некорректна, введите "n" (нет), затем снова наберите командную строку. В приведенном примере ответ команды csh(C) выделен жирным шрифтом:

% cd /usr/spool/uucp 2/usr/spool/uucp?0y 2ok

Ввод/Вывод

Стандартный ввод и стандартный вывод могут быть переадресованы с использованием следующего синтаксиса:

< name

Открывает файл, заданный параметром name (который сначала раскрывает переменных, команд и имен файлов), в качестве стандартного ввода.

<< word

Считывает ввод интерпретатора shell до строки, которая указана параметром word. Параметр word не подлежит подстановкам переменных, имен файлов или команд, и каждая входная строка сравнивается с параметром word перед проведением подстановок в этой входной строке. Если в параметре word отсутствуют выделяющая обратная косая черта, двойные и одинарные кавычки, или обратные кавычки, то производится подстановка переменных и команд на имеющихся строках, допуская использование знака \ для выделения знаков $, \ и `. В замещаемых командах все пробелы, знаки табуляции и признаки новой строки сохраняются, за исключением последнего признака новой строки, который отбрасывается. Результирующий текст помещается в анонимный временный файл, который задается команде в качестве стандартного ввода.

> name
>! name
>& name
>&! name

Файл, задаваемый параметром name, используется в качестве стандартного вывода. Если этот файл не существует, то он создается; если файл существует, то он усекается и его предыдущее содержимое теряется.

Если установлена переменная noclobber (не разрушать), то этот файл либо не должен до этого существовать, либо он должен быть специальным символьным файлом (например, терминалом или /dev/null), в противном случае результатом будет ошибка. Это помогать предотвратить случайное разрушение файлов. В таком случае, для подавления этой проверки могут быть использованы записи, включающие знак !.

Формы записей, включающие знак &, направляют диагностический вывод в определенный файл, так же как и стандартный вывод. Параметр name раскрывается так же, как и в случае записи вида < для имен файлов ввода.



>> name
>>& name
>>! name
>>&! name

Использует файл, задаваемый параметром name, в качестве стандартного вывода, как и в формах записей с символом >, но помещает вывод в конец этого файла. Если установлена переменная noclobber, то будет возникать ошибка, если при отсутствии в форме записи знака ! заданный файл не будет существовать. Во всем остальном эти формы записи аналогичны формам со знаком >.

Если выполняется неприсоединенная команда (с последующим знаком &), то стандартным вводом для этой команды по умолчанию будет пустой файл /dev/null. В противном случае, эта команда присутствует в конвейере и воспринимает среду, в которой был вызван интерпретатор shell, как уже измененную при помощи параметров ввода-вывода. Таким образом, как и для некоторых более ранних интерпретаторов shell, команды, выполняемые из файла команд интерпретатора shell, не имеют доступа к тексту команд по умолчанию; вместо этого они принимают первоначальный стандартный ввод интерпретатора shell. Механизм << должен быть использован для представления последовательных данных. Это позволяет командным сценариям интерпретатора shell функционировать в качестве составляющих конвейеров, а также разрешает интерпретатору shell блокировать чтение его ввода.

Диагностический вывод может быть направлен через программный канал со стандартным выводом. Просто следует использовать форму записи |& вместо |.

Выражения

Несколько встроенных команд (должны быть описаны позже) используют выражения, операторы в которых аналогичны применяемым в языке С, с тем же самым порядком старшинства. Такие выражения появляются в командах @, exit, if и while. Доступными являются следующие операторы:

&& | ^ & == != <= >= < > << >> + - * / % ! ~ ( )

Здесь порядок старшинства увеличивается слева направо, операторы == и !=, <=, >=, < и >, << и >>, + и -, * / и %, находясь в группах, имеют тот же уровень старшинства. Операторы == и != сравнивают свои аргументы в виде символьных строк, остальные операторы действуют на числах. Символьные строки, начинающиеся с 0, рассматриваются как восьмеричные числа. Нулевые или отсутствующие аргументы рассматриваются как 0. Результатом всех выражений являются строки, которые представляют собой десятичные числа. Важно отметить, что никакие две составляющие выражения не могут появляться в одном слове; исключение представляют смежные составляющие выражений, которые имеют синтаксическое значение для синтаксического анализатора (& | < > ( )), они должны быть окружены с двух сторон пробелами.

Кроме того, в выражениях доступными, как примитивные операнды, являются командные исполнения, заключенные в скобки вида { и }, а также файловые запросы вида -l name, где l имеет одно из значений:
r Доступ для чтения w Доступ для записи x Доступ для выполнения e Существование o Владение z Нулевой размер f Простой файл d Каталог <



/p>

Задаваемым значением name в файловых запросах является раскрытие команды и имен файлов, которое, затем, проверяется на соответствие заданных полномочий (-l) правам реального пользователя. Если файл не существует, или не является доступным, то все запросы возвращают значение false(ложь), т.е. 0. Если выход из команды происходит со статусом 0, то командные исполнения завершаются успешно, возвращая значение true (истина), т.е. 1; в противном случае, они завершаются неуспешно, возвращая значение false, т.е. 0. Если требуется получить более детальную информацию о статусе, то команда должна быть выполнена вне выражения и должна быть проконтролирована переменная status.

Управляющая Логика

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

Утверждения foreach, switch и while, так же как и форма if-then-else утверждения if, требуют, чтобы главные ключевые слова появлялись в одной простой команде на входной строке так, как это показано ниже.

Если ввод интерпретатора shell не доступен для поиска, то интерпретатор shell накапливает входные данные в буфере всякий раз, когда происходит считывание цикла, и выполняет поиск в этом внутреннем буфере для осуществления повторного считывания, предполагаемого этим циклом. (В той степени, насколько это возможно, команды возвратного перехода будут выполнены успешно для входных данных, недоступных для поиска.)

Встроенные Команды

Встроенные команды выполняются внутри интерпретатора shell. Если встроенная команда встречается как любая составляющая некоторого конвейера, исключая последнюю, то она выполняется в интерпретаторе sub-shell.

alias
alias name
alias name wordlist



Запись первого вида печатает все псевдонимы. Второй вид записи печатает псевдоним для параметра name. Последняя запись назначает заданный параметр wordlist (список слов) в качестве псевдонима для параметра name; wordlist является раскрытием команд и имен файлов. Значение параметра name не должно быть командой alias или unalias.

break

Вызывает возобновление выполнения после оператора end ближайшего объемлющего утверждения foreach или while. Выполняются оставшиеся команды текущей строки. Таким образом, возможны многоуровневые прерывания, посредством записи их всех на одной строке.

breakswВызывает прерывание (команда break) из команды switch, повторно после endsw.

case label:

Метка в утверждении switch, как описано ниже.

cd
cd name
chdir
chdir name

Изменяет рабочий каталог интерпретатора shell на каталог name. Если аргумент не задан, то производится замена на входной (home) каталог пользователя. Если каталог name не найден в качестве подкаталога в текущем каталоге (и не начинается с /, ./ или с ../), то проверяется каждая составляющая переменной cdpath, не является ли каталог name ее подкаталогом. Наконец, если все предыдущие попытки завершились неуспешно, а аргумент name является переменной интерпретатора shell, значение которой начинается с /, то проверяется, является ли она каталогом.

continue

Продолжает выполнение ближайшего объемлющего утверждения while или foreach. Выполняются остальные команды текущей строки.

default:

Отмечает меткой выбор по умолчанию в утверждении switch. Выбор по умолчанию должен находиться после всех меток оператора case.

echo wordlist

Указанные в параметре wordlist слова отображаются в стандартный вывод интерпретатора shell. Применение \c приводит к завершению процесса отображения без печати признака новой строки. Применение \n в списке слов wordlist приводит к печати признака новой строки. Во всех остальных случаях отображаемые слова разделяются пробелами.

else
end
endif
endsw

См. описание утверждений if, switch и while ниже.



exec command

Указанная аргументом command команда выполняется вместо работающего в данный момент интерпретатора shell.

exit
exit(expr)

Осуществляет выход из интерпретатора shell либо со значением переменной status (первая форма записи), либо со значением, заданным выражением expr (вторая форма записи).

foreach name (wordlist)
...
end

Последовательно устанавливается переменная name для каждого члена списка слов wordlist, и выполняется последовательность команд между этой командой и соответствующим ей оператором end. (Оба ключевых слова foreach и end должны находиться на отдельных строках.)

Встроенная команда continue может быть использована для того, чтобы продолжить цикл преждевременно, а встроенная команда break для его преждевременного завершения. При считывании этой команды с терминала считывание цикла происходит один раз с выдачей приглашения в виде знака ? перед выполнением любого утверждения из цикла.

glob wordlist

Действует, как и команда echo, но наличие отменяющих символов \ не распознается, а слова в выводе разделяются при помощи пустых символов. Удобна для программ, которым требуется использовать интерпретатор shell для того, чтобы раскрыть список слов в имена файлов.

goto word

Указанное параметром word слово представляет собой раскрытие имен файлов и команд, которое формирует символьную строку метки формы. Интерпретатор shell пересматривает все свои входные данные, насколько это возможно, и осуществляет поиск строки этой метки формы:, возможно, с предшествующими знаками пробелов и табуляции. Выполнение продолжается после указанной строки.

history

Выводит на экран список событий предыстории.

if (expr) command

Если при вычислении значения указанного выражения expr получено значение "истина", то выполняется одна команда, заданная параметром command, с ее аргументами. До этого производится подстановка переменных на параметре command, и тогда же она выполняется для остальной части команды if. Значением параметра command должна быть простая команда, а не конвейер, список команд или заключенный в круглые скобки список команд. Ввод/вывод перенаправляется даже в том случае, если значением выражения expr является "ложь", т.е. когда сама команда не выполняется.



if (expr) then
...
else if (expr2) then
...
else
...
endif

Если указанное выражение expr имеет значение "истина", то выполняются команды до первого ключевого слова else; в противном случае, если выражение expr2 имеет значение "истина", то выполняются команды до второго ключевого слова else; и т.д. Допускается любое число пар else-if; при этом требуется только одно ключевое слово endif. Ключевое слово else и следующие за ним команды также являются необязательными. (Слова else и endif должны появляться в начале входных строк; слово if должно появляться на своей входной строке или после слова else.)

logout

Завершает интерпретатор shell вхождения в систему. Если установлена переменная ignoreeof, то использование этой команды является единственным способом выхода из системы.

nice
nice +number
nice command
nice +number command

Запись первого вида устанавливает параметр nice для данного интерпретатора shell в значение 4. По умолчанию команды, выполняемые под управлением интерпретатора С-Shell, имеют "nice value" (значение приоритета), равное 0. Вторая форма записи устанавливает параметр nice в значение, заданное числом number. Две последние формы записи задают выполнение команды с приоритетом, соответственно, 4 и задаваемым параметром number. Привилегированный пользователь может указать отрицательный приоритет при помощи командs "nice -number ...". Эта команда всегда выполняется в подмножестве интерпретатора subshell, и в простых утверждениях if появляются накладываемые на команды ограничения.

nohup
nohup command

Первая форма записи может быть использована в сценариях интерпретатора shell для того, чтобы вызвать игнорирование сигналов разъединения для оставшейся части сценария. Вторая форма записи приводит к выполнению указанной команды с игнорированием сигналов разъединения. Команда nohup не действует, если при этом интерпретатор shell не выполняется отдельно. Для всех процессов, неприсоединенных при помощи &, автоматически выполняется команда nohup. (Т.е. на самом деле nohup не требуется.)



onintr
onintr
onintr label

Управляет функционированием интерпретатора shell при прерываниях. Первая форма записи восстанавливает действия интерпретатора shell в случае прерываний, которые выполняются для завершении сценариев интерпретатора shell или для возврата на уровень ввода команд с терминала. Вторая форма onintr - приводит к игнорированию всех прерываний. Последняя форма записи вызывает выполнение интерпретатором shell перехода на метку при приеме прерывания или, когда в следствие прерывания завершается порожденный процесс.

Во всяком случае, если выполняется неприсоединенный интерпретатор shell и игнорируются прерывания, все виды записей onintr не имеют смысла, и интерпретатор shell, также как и все вызванные команды, продолжают игнорировать прерывания.

rehash

Приводит к пересчету внутренней таблицы хэширования содержаний каталогов в переменной path. Эта команда необходима при добавлении новых команд к каталогам из значения переменной path, в то время, как Вы осуществляете вхождение в систему. Она может потребоваться только, если Вы добавляете команды к одному из своих собственных каталогов, или если системный программист изменяет содержимое одного из системных каталогов.

repeat count commandЗадаваемая параметром command, который подчиняется тем же самым ограничениям, что и параметр command, находящийся в строке утверждения if, описанного выше, команда выполняется столько раз, сколько указано в параметре count. Переадресация ввода/вывода производиться точно один раз даже, если значением count является 0.

set
set name
set name=word
set name[index]=word
set name=(wordlist)

Первая форма записи команды показывает значение всех переменных интерпретатора shell. Значение переменных, если оно представлено не одним словом, выводится списком слов, заключенным в круглые скобки. Вторая форма записи устанавливает параметр name в значение пустой строки. Третья форма записи устанавливает параметр name в значение одного слова, задаваемого параметром word. Четвертый вид команды устанавливает индексированную при помощи параметра index составляющую имени в значение слова; эта составляющая должна уже существовать. Последняя форма записи команды устанавливает параметр name в значение списка слов, задаваемое аргументом wordlist. Во всех случаях это значение является раскрытием команд и имен файлов.

Эти аргументы могут быть повторены, чтобы установить несколько значений в одной команде установки. Заметим, тем не менее, что раскрытие переменных производится для всех аргументов перед тем, как происходит какая-либо установка.



setenv name value

Устанавливает переменную среды name в значение value, представляемое одиночной строкой. Полезными переменными среды являются TERM, тип Вашего терминала и SHELL, тот интерпретатор shell, который Вы используете.

shift
shift variable

Члены специальной переменной argv, не учитывая argv[1], сдвигаются влево. Если переменная argv не установлена или имеет в качестве своего значения менее одного слова, то это является ошибкой. Вторая форма записи выполняет те же действия на указанной параметром variable переменной.

source name

Интерпретатор shell считывает команды из источника, задаваемого параметром name. Команды source могут быть вложенными; если уровень их вложенности слишком велик, интерпретатор shell может выйти за границы определения файловых дескрипторов. Ошибка в команде source на любом уровне вложенности завершает все вложенные команды source. Ввод, производимый во время выполнения команд source, никогда не помещается в список предыстории.

switch (string)
case str1:
...
breaksw
...
default:
...
breaksw
endsw

Каждая метка выбора (case) последовательно сопоставляется с заданной строкой string, которая сначала делает раскрытие команд и имен файлов. Файловые метасимволы *, ? и [...] могут быть использованы в метках выбора, которые являются раскрытием переменных. Если до метки выбора по умолчанию (default:) никакого соответствия меткам не найдено, то выполнение начинается после метки по умолчанию. Каждая метка выбора и метка по умолчанию должны располагаться в начале строки. Команда breaksw приводит к продолжению выполнения после endsw. В остальных случаях управление может быть передано в соответствии с вариантными метками и метками по умолчанию, как и в языке С. Если не найдено никаких соответствий меток и отсутствуют метки по умолчанию, выполнение продолжается после endsw.

time
time command

При отсутствии аргумента, печатается суммарное время, использованное данным интерпретатором shell и порожденными им процессами. Если аргумент задан, то для указанной (параметр command) простой команды производится подсчет времени и его итоговое значение выводится также, как описано для переменной time. При необходимости, когда команда завершается, создается дополнительный shell для вывода статистики по времени.



umask
umask value

Маска создания файла выводится на экран (первая форма записи) или устанавливается в указанное параметром value значение (вторая форма команды). Маска задается в восьмеричном представлении. Как правило, значениями маски являются 002, задающее все права доступа к файлу для группы, а для других пользователей разрешение на чтение и выполнение, и 022, задающее все права доступа, исключая разрешение на запись для пользователей в группе или других пользователей.

unalias pattern

Все псевдонимы, имена которых соответствуют указанному в параметре pattern образцу, отбрасываются. Таким образом, команда unalias * удаляет все псевдонимы. Не будет ошибкой, если команда unalias применяется к пустому множеству псевдонимов.

unhash

Запрещается использование внутренней таблицы хэширования для ускорения размещения выполняемых программ.

unset pattern

Все переменные, имена которых соответствуют указанному параметром pattern образцу, удаляются. Таким образом, команда unset * удаляет все переменные. Не будет ошибкой, если команда unset применяется к пустому множеству переменных.

wait

Все порожденные процессы находятся в состоянии ожидания. Если интерпретатор shell выполняется в интерактивном режиме, то прерывание может нарушить ожидание, в таком случае интерпретатор shell напечатает имена и номера всех незавершенных порожденных процессов.

while (expr)
...
end

Пока указанное выражение expr принимает ненулевое значение, выполняются команды между while и соответствующим ему оператором end. Команды break и continue могут быть использованы для преждевременного завершения или продолжения этого цикла. (Ключевые слова while и end должны появляться каждое на своей входной строке.) При первом проходе цикла также, как и для утверждения foreach, в этом месте производится выдача приглашения в случае, если устройством ввода является терминал.

@
@ name = expr
@ name[index] = expr

Первый вид команды печатает значения всех переменных интерпретатора shell. Вторая форма команды устанавливает заданный параметр name в значение выражения expr. Если выражение содержит символы <, >, & или |, то по крайней мере эта часть выражения должна быть заключена в (). Третья форма записи назначает значение выражения expr индексируемому агрументом index параметру name. Как name, так и его составляющая, определяемая индексом index, к этому моменту должны уже существовать.



Операторы *=, +=, и т.п. являются доступными, как и в языке С. Пробел, отделяющий имя от оператора назначения, является необязательным. Наличие пробелов является обязательным в разделяемых составляющих выражения expr, которые в любом случае должны быть отдельными словами.

Специальные постфиксные операторы ++ и --, соответственно, увеличивают на единицу и уменьшают на единицу значение name, например, @ i++.

Предопределенные Переменные

Последующие переменные имеют специальное значение для интерпретатора shell. Из них argv, child, home, path, prompt, shell и status всегда устанавливаются интерпретатором shell. За исключением child и status, эта установка производится только при инициализации; эти переменные не будут модифицироваться до тех пор, пока это определенно не будет сделано пользователем.

Интерпретатор shell копирует переменную среды PATH в переменную path, а также копирует это значение обратно в среду всякий раз, когда переменная path устанавливается. Следовательно, не стоит беспокоиться о том, что ее установка будет отличаться от той, что присутствует в файле .cshrc, так как внутренние процессы csh будут импортировать определение переменной path из среды.
argv Принимается в качестве аргументов для интерпретатора shell, именно из этой переменной производится подстановка позиционных параметров, например, $1 заменяется на $argv[1], и т.д. cdpath Задает список альтернативных каталогов для поиска подкаталогов в командах cd. child Выводится номер процесса, когда последняя команда была разветвлена при помощи &. Эта переменная является командой unset, когда этот процесс завершается. echo Устанавливается, когда в командной строке задана опция -x. Вызывает отображение на экране каждой команды и ее аргументов непосредственно перед тем, как команда выполняется. Для невстроенных команд все раскрытия происходят до их отображения на экране. Встроенные команды отображаются на экране до выполнения подстановки команд и имен файлов, поскольку эти подстановки выполняются затем выборочно. histchars Может быть назначена двух-символьная строка. Первый символ используется в качестве символа предыстории вместо знака !, второй символ используется вместо механизма подстановки ^. Например, если произведена установка вида histchars=",;", то символами предыстории будут точка и точка с запятой. history Может быть задано числовое значение для контролирования размера списка предыстории. Никакая команда, на которую производится ссылка, укладывающаяся в это количество событий, не будет отброшена. Слишком большое значение переменной history может привести к превышению памяти интерпретатора shell. Последняя выполняемая команда всегда сохраняется в списке предыстории. home Входной (home) каталог вызывающего пользователя, эта переменная инициализируется из среды. Раскрытие имени файла, представленного ~, отсылает к этой переменной. ignoreeof Если эта переменная установлена, то интерпретатор shell игнорирует признак конца файла от устройств ввода, которые являются терминалами. Это предотвращает ситуацию случайного завершения интерпретатора shell по нажатию Ctrl-D. mail Файлы, которые интерпретатор shell проверяет на наличие почтовых сообщений. Эта проверка выполняется после завершения каждой команды, результатом которой будет вывод приглашения, при условии истечения заданного временного интервала. Интерпретатор shell выводит сообщение "You have new mail" (Для Вас есть новая почта"), если существует файл, для которого время доступа не превышает времени его модификации. Если первое слово значения переменной mail является числом, то оно задает иное значение интервала проверки почты, а именно: в секундах, вместо значения по умолчанию, которое составляет 10 минут.

Если указаны несколько почтовых файлов, то при наличии почты в файле, определяемом именем name, интерпретатор shell отвечает сообщением "New mail in name" ("Новая почта в файле name"). noclobber Как было описано в разделе "Ввод/Вывод", на переадресацию вывода накладываются определенные ограничения для того, чтобы предохранить такие файлы от случайного повреждения, а переадресации вида >> относятся к существующим файлам. noglob Установка этой переменной препятствует раскрытию имен файлов. Это очень удобно для сценариев интерпретатора shell, которые не работают с именами файлов, или после того, как получен список имен файлов, а дальнейшие раскрытия являются нежелательными. nonomatch Если эта переменная установлена, то не будет ошибкой ситуация, когда раскрытие имен файлов не соответствует никаким существующим файлам; при этом просто возвращается этот первоначальный образец. Однако, ошибкой будет неправильно сформированный образец, т.е. отображение [ дает ошибку. path Каждое слово переменной пути path задает каталог, в котором должны быть найдены команды для выполнения. Нулевое слово указывает на текущий каталог. Если переменная path отсутствует, то будут работать только полные обозначения путей. Обычно, путь поиска представляется как /bin, /usr/bin и ., но он может изменяться в зависимости от используемой системы. Для привилегированного пользователя путь поиска по умолчанию представляется каталогами /etc, /bin и /usr/bin. Интерпретатор shell, которому не задана ни опция -c, ни опция -t, как правило, будет хэшировать содержимое каталогов в переменной path после считывания файла .cshrc каждый раз, когда переустанавливается переменная path. Если при активизированном интерпретаторе shell в эти каталоги добавляются новые команды, то имеет смысл задавать команду rehash, в противном случае эти команды могут быть не найдены. prompt Символьная строка, которая выводится перед каждой командой, считываемой с терминального ввода в интерактивном режиме. Если в этой строке появляется символ !, то он будет заменен на номер текущего события, если ему не предшествует символ \. Для привилегированного пользователя эта переменная имеет значение % или #. shell Файл, в котором находится интерпретатор shell. Эта переменная используется в разветвляющихся процессах интерпретатора shell для интерпретации файлов, для которых установлены биты исполнения, но которые не доступны для выполнения системой. (См. ниже раздел "Выполнение невстроеннных команд".) При инициализации заносится во входной (home) каталог (системно-зависимый) интерпретатора shell. status Возвращаемый статус (состояние завершения) последней команды. Если она завершилась не нормально, то к значению статуса добавляется 0200. При неуспешном завершении встроенных команд возвращается статус 1, в остальных случаях для встроенных команд статус устанавливается в значение 0. time Управляет автоматическим отсчетом времени для команд. Если эта переменная установлена, то при завершении некоторой команды, которая использует больше положенных для нее секунд центрального процессора, будет печататься строка, содержащая следующую информацию: пользователя, систему, реальное значение времени и процентное соотношение использования времени, которое определяется отношением суммы времени, использованного пользователем и системой к реальному времени. verbose Устанавливается при помощи опции -v, заданной в командой строке; приводит к печати слов из каждой команды после выполнения подстановки предыстории.
Выполнение Невстроенных Команд

При обнаружении команды, которая не является встроенной, но должна быть выполнена, интерпретатор shell пытается выполнить эту команду через команду . Каждое слово в переменной path задает имя каталога, из которого интерпретатор shell будет пытаться выполнить эту команду. Если не заданы ни опция -c, ни опция -t, то интерпретатор shell будет выполнять хэширование таких имен в этих каталогах во внутреннюю таблицу таким образом, что он будет пытаться применить exec только в каталоге, в котором, возможно, находится эта команда. Это повышает скорость обнаружения команды в случае, когда в пути поиска представлено большое количество каталогов. Если этот механизм будет выключен (посредством команды unhash), или если интерпретатору shell будет задан с аргументами -c или -t, и, во всяком случае, для каждого каталога, являющего составляющей переменной path, которая не начинается с символа /, интерпретатор shell выполняет конкатенацию с именем заданной команды, чтобы сформировать полное обозначение пути к файлу, который он затем пытается выполнить.

Команды, заключенные в круглые скобки, всегда выполняются в подмножестве интерпретатора subshell. Так, команда (cd; pwd) ; pwd печатает каталог home; оставляя при этом Вас там, где Вы были (отображая это место после каталога home), в то время как команда cd ; pwd оставляет Вас в этом входном каталоге home. Заключенные в круглые скобки команды довольно часто используются для предотвращения воздействие текущего интерпретатора shell на команду cd.

Если файл имеет разрешения на выполнение, но не является двоичным выполняемым файлом в данной системе, то считается, что этот файл содержит команды интерпретатора shell, и для того, чтобы считать его, подгружается новый интерпретатор shell.

Если для shell существует псевдоним, то, чтобы сформировать команду интерпретатора shell, для списка аргументов подготавливаются слова псевдонима. Первое слово псевдонима должно быть полным обозначением пути интерпретатора shell (например, $shell). Заметим, что это специальный, встречающийся позже случай подстановки псевдонима, и допускает только слова, которые должны быть подготовлены для списка аргументов, без модификации.

Обработка Списка Аргументов



Если нулевым аргументом для интерпретатора shell является знак -, то это интерпретатор shell вхождения в систему. Аргументы в виде флагов интерпретируются следующим образом:
-c Команды считываются из (отдельного) следующего аргумента, который должен быть представлен. Все остальные аргументы помещаются в переменную argv. -e Интерпретатор shell завершается, если любая вызванная команда заканчивается не нормально, или получен ненулевой статус выхода. -f Интерпретатор shell будет запускаться быстрее, поскольку ни для одной выполняемой команды из файла .cshrc не будет производиться поиск во входном (home) каталоге вызвавшего пользователя. -i Интерпретатор shell выполняется в интерактивном режиме и выводит приглашение для своего ввода верхнего уровня даже, если ввод производится не с терминала. Все процессы shell выполняются в интерактивном режиме без установки этой опции, если устройствами их ввода и вывода являются терминалы. -n Команды подвергаются синтаксическому анализу, но не выполняются. Эта опция может быть полезна при синтаксической проверке сценариев интерпретатора shell. -s Входные команды поступают с устройства стандартного ввода. -t Считывается и выполняется одна строка ввода. Символ \ может быть использован для отмены признака новой строки в конце данной строки и продолжения ее текста на другой строке. -v Вызывает установку переменной verbose, действием которой является отображение на экране ввода команд после выполнения подстановки предыстории. -x Вызывает установку переменной echo, действием которой является отображение на экране команд непосредственно перед их выполнением. -V Вызывает установку переменной verbose непосредственно перед выполнением файла .cshrc. -X Вызывает установку переменной echo непосредственно перед выполнением файла .cshrc.

После обработки аргументов в виде флагов, и если остались аргументы arg..., но не были заданы опции -c, -i, -s или -t, то выбирается первый аргумент из списка arg ... в качестве имени файла команд, предназначенных для выполнения. Интерпретатор shell открывает этот файл и сохраняет его имя для возможного выполнения повторной подстановки по $0. В типичной системе большинство сценариев интерпретатора shell пишется для стандартного интерпретатора shell (см. команду ), интерпретатор shell в синтаксисе языка С будет выполнять каждый стандартный интерпретатор shell, если первым символом сценария не будет символ # (т.е. если сценарий не начинается с комментария). Оставшиеся аргументы инициализируют переменную argv.

Обработка Сигналов



Интерпретатор shell обычно игнорирует сигналы quit. Сигналы interrupt и quit игнорируются для вызываемой команды, если за этой командой следует символ &; во всех остальных случаях эти сигналы имеют те значения, которые наследуются интерпретатором shell от породившего его процесса. Обработка прерываний процессами shell может быть управляемой при помощи onintr. Интерпретаторы shell вхождения в систему перехватывают сигнал terminate; в остальных случаях этот сигнал поступает к порожденному процессу из того состояния, в котором он был в процессе, породившем интерпретатор shell. Ни в коем случае не разрешаются прерывания, когда интерпретатор shell считывает файл .logout.

ФАЙЛЫ

~/.cshrc Считывается каждым интерпретатором shell в начале выполнения /etc/cshrc Системно-расширенный файл cshrc по умолчанию, если никакой не представлен ~/.login Считывается интерпретатором shell вхождения в систему после файла .cshrc во время выполнения вхождения в систему ~/.logout Считывается интерпретатором shell вхождения в систему во время выполнения выхода из системы /bin/sh Интерпретатор shell для сценариев, не начинающихся с символа # /tmp/sh* Временный файл для ввода при помощи << /dev/null Источник пустого файла /etc/passwd Источник входных (home) каталогов для ~name

ОГРАНИЧЕНИЯ

Длина слов не может быть больше 512 символов. Число аргументов для команды, которая вызывает раскрытие имен файлов, ограничивается 1/6 от числа символов, разрешенных в списке аргументов, которое составляет 5120, меньше, чем символов в среде. Кроме того, подстановки команд не могут подставить символов больше, чем разрешено в аргументном списке.

В целях обнаружения зацикливаний интерпретатор shell ограничивает количество подстановок псевдонимов на одной строке до 20.

СМОТРИТЕ ТАКЖЕ

, , fork(3), pipe(3), signal(3), umask(3), wait(3), .

РАЗРЕШЕНИЕ

Эта утилита была разработана в Калифорнийском Университете, г.Беркли, и разрешена к использованию.

ЗАМЕЧАНИЕ

Встроенные команды структуры управления, такие как foreach и while, не могут быть использованы с символами |, & или ; .

Команды внутри циклов, приглашения которых имеют символ ?, не помещаются в список предыстории команды history.

Нельзя использовать модификаторы двоеточия (:) на выходе подстановок команд.

Интерпретатор С-shell имеет много встроенных команд с теми же именами и функциями, что и у команд интерпретатора shell Баурна. Тем не менее, синтаксис таких команд зачастую различается. Одним из таких примеров является команда nice, другим - команда echo. Следует использовать соответствующий корректный синтаксис при работе с этими встроенными командами интерпретатора С-shell.

Когда пользователь С-shell входит в систему, система считывает и выполняет команды из файла /etc/cshrc перед тем, как выполнить команды из пользовательского файла $HOME/.schrc. Следовательно, Вы можете модифицировать среду интерпретатора С-shell для всех пользователей системы, отредактировав файл /etc/cshrc.

Во время выполнения аппаратной загрузки системы, нажатие клавиши delete, как только интерпретатор С-shell выведет приглашение (%), может вызвать завершение работы интерпретатора shell. Если при этом команда csh является интерпретатором shell вхождения в систему, то будет произведен выход пользователя из системы.

Команда csh пытается импортировать и экспортировать переменную PATH для ее использования вместе со обычными сценариями интерпретатора shell. Это работает только для простых случаев, когда переменная PATH не содержит командных символов.

Данная версия команды csh не поддерживает или не использует тех средств управления процессами, которые имеются в 4-ой версии, разработанной в Беркли.

CSPLIT(1)


НАЗВАНИЕ

csplit - разбиение файла на части по контексту

СИНТАКСИС

csplit [-s] [-k] [-f префикс] файл арг1 [... аргn]

ОПИСАНИЕ

Команда csplit читает файл и разбивает его на (n+1) частей (секций), определяемых аргументами арг1,..., аргn. По умолчанию, секции помещаются в файлы с именами xx00,..., xxn; n не может быть больше 99. Границы секций определяются следующим образом:

00 От начала файла до строки (не включая ее), указываемой аргументом арг1.

01 От строки, указываемой аргументом арг1, до строки, указываемой аргументом арг2.

.

.

.

n От строки, указываемой аргументом аргn, до конца файла.

Если вместо имени файла указан -, используется стандартный ввод.

Опции команды csplit таковы:

-s Обычно команда csplit выдает количество символов для каждого созданного файла. Задание опции -s подавляет эту выдачу. -k Обычно в случае ошибки команда csplit удаляет созданные файлы. При наличии опции -k созданные файлы остаются без изменений. -f префикс Именовать создаваемые файлы так: префикс00,..., префиксn. По умолчанию имена файлов суть xx00,..., xxn.

Аргументы команды csplit (арг1,...,аргn) могут быть комбинацией следующих конструкций:

/выражение/ Создается файл для секции, которая начинается с текущей строки и продолжается до строки (не включая ее), содержащей выражение. За этим аргументом может следовать знак + или - и величина смещения в строках (например, /Page/-5). Граничная строка становится текущей. %выражение% Этот аргумент обрабатывается так же, как и предыдущий, за исключением того, что для очередной секции файл не создается. номер_строки Создается файл для секции, которая начинается с текущей строки и продолжается до строки с заданным номером (не включая ее). Эта строка и становится текущей. {число} Коэффициент повторного выполнения. Этот аргумент может следовать за любым из приведенных выше. Если он следует за аргументом типа выражение, то этот последний применяется еще заданное число раз. Если он следует за аргументом типа номер_строки, то с текущей строки файл разбивается на число секций, каждая из которых содержит номер_строки строк.


Заключайте в кавычки все аргументы типа выражение, которые содержат пробелы или другие символы, имеющие значение для интерпретатора команд shell. Выражение не может содержать символ перевода строки. Команда csplit не изменяет исходный файл; удаление исходного файла возлагается на пользователя.

ПРИМЕРЫ

Разобьем файл f1, содержащий КОБОЛ-программу, на четыре части:

csplit -f cobol f1 '/procedure division/' \ /par5./ /par6./

В результате выполнения этой команды создаются четыре файла: cobol00,...,cobol03. После того, как полученные файлы будут отредактированы, их можно об единить командой

cat cobol0[0-3] > f1

Заметим, что команды этого примера перезаписывают исходный файл f1. Команда

csplit -k f2 100 {99}

разбивает файл f2 через каждые 100 строк до 10000-ой строки. Указание опции -k гарантирует сохранение созданных файлов, если исходный файл содержит менее 10000 строк (однако сообщение об ошибке все равно будет выдано). Разбиение C-программы:

csplit -k prog.c '%main(%' '/^}/+1' {20}

Если предположить, что в программе prog.c все функции заканчиваются правой фигурной скобкой }, стоящей в начале строки, то команда этого примера помещает все функции (не более 21) в отдельные файлы.

СМ. ТАКЖЕ

, , , .

в Справочнике программиста.

ДИАГНОСТИКА

Самоочевидна, за исключением сообщения:

аргумент - out of range

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









CT(1C)


НАЗВАНИЕ

ct - запуск процесса getty на удаленном терминале

СИНТАКСИС

ct [-wчисло_минут] [-xуровень_отладки] [-h] [-v] [-sскорость_обмена] номер_телефона ...

ОПИСАНИЕ

Команда ct вызывает по номеру_телефона модем, к которому подключен удаленный терминал, и запускает на этом терминале процесс getty. В номер_телефона могут входить знаки равенства в тех местах, где нужно дождаться ответного сигнала, и минусы в местах, где надо сделать задержку. (Допустимые символы номера_телефона - цифры от 0 до 9, знаки =, -, * и #. Максимальная длина - 31 символ.) Если указано несколько номеров, то ct пытается соединиться с каждым из них, пока какой-либо не ответит; это полезно для указания запасных способов установления связи.

Команда ct проверяет каждую строку файла /usr/lib/uucp/Devices, пока не найдет доступную линию с соответствующими атрибутами или не будет достигнут конец файла. Если нет свободных линий, то ct запрашивает, ждать ли освобождения линии и если ждать, то сколько минут. Команда ct продолжает попытки связаться с интервалом в одну минуту до исчерпания указанного лимита времени.

Опциям команды ct приписан следующий смысл:

-wчисло_минут Сколько времени ждать установления связи. -xуровень_отладки В стандартный протокол выводится подробная информация о выполнении программы. Уровень_отладки задается цифрой; чаще всего испольуется опция -x9. -h Обычно ct, дозвонившись, освобождает линию, так что телефон может принять другие вызовы. Опция -h препятствует освобождению. Кроме того, управление будет возвращено пользовательскому терминалу только после завершения процесса, специфицированного ct. -v Сведения о работе команды ct выводятся в стандартный протокол. -sскорость_обмена Устанавливается заданная скорость_обмена (в бодах). По умолчанию скорость равна 1200 бод.

После того, как пользователь на удаленном терминале выйдет из системы, в зависимости от типа процесса getty (getty или uugetty) могут иметь место два варианта. В первом ct выводит запрос:

Reconnect?

Если ответ начинается с буквы n, то связь разрывается и линия освобождается; в противном случае вновь запускается процесс getty и выдается приглашение:


login:

Во втором варианте процесс uugetty для данной линии уже запущен, поэтому сразу выдается приглашение:

login:

Чтобы должным образом выйти из системы, пользователь должен ввести символ CTRL+D.

Конечно, удаленный терминал должен быть подключен к модему, который может отвечать по телефону.

ФАЙЛЫ

/usr/lib/uucp/Devices /usr/adm/ctlog

СМ. ТАКЖЕ

, , .

, в Справочнике администратора.

СЮРПРИЗЫ

Для разделяемого порта, то есть порта, используемого одновременно как входной и выходной, программа uugetty должна быть запущена с опцией -r [см. ].









CTAGS(1)XENIX System V (21 июня 1987)


НАЗВАНИЕ

ctags - пocтpoeниe фaйлa имeн фyнкций

СИНТАКСИС

ctags [ -auwvx ] name ...

ОПИСАНИЕ

Ctags cтpoит фaйл co cпиcкoм имeн фyнкций для peдaктopa из иcxoдныx тeкcтoв нa языкe Cи. Этoт фaйл пoзвoляeт для гpyппы фaйлoв oпpeдeлить pacпoлoжeниe зaдaнныx oбъeктoв (в дaннoм cлyчae фyнкций). Kaждaя cтpoкa фaйлa coдepжит имя фyнкции, имя фaйлa, гдe oнa oпpeдeлeнa, и шaблoн для ee пoиcкa. Этa инфopмaция пoмeщaeтcя в oтдeльныx пoляx, paздeлeнныx пpoбeлaми или тaбyляциями. C пoмoщью этoгo фaйлa тэгoв tags peдaктop vi мoжeт быcтpo нaйти oпpeдeлeния фyнкций.

Ecли зaдaн флaг -x, ctags выдaeт нa cтaндapтный вывoд cпиcoк имeн фyнкций c нoмepaми cтpoк, имeнeм фaйлa и тeкcтoм oпpeдeляющeй cтpoки. Пpи этoм фaйл тэгoв нe coздaeтcя. Пoлyчeнный тaким oбpaзoм cпиcoк мoжeт cлyжить пpocтым cпиcкoм ccылoк.

Фaйлы, oкaнчивaющиecя нa .c и .h, cчитaютcя фaйлaми нa Cи и пoдлeжaт пpocмoтpy.

Пpoчиe флaги:

-w

Пoдaвлeниe вывoдa диaгнocтики. -u

Пpивoдит к oбнoвлeнию инфopмaции oб yкaзaнныx фyнкцияx в тeгoвoм фaйлe. Bce ccылки нa yкaзaнныe фyнкции yдaляютcя, a нoвыe дoпиcывыютcя в кoнeц. Этoт peжим дoвoльнo мeдлeнный, пoэтoмy лyчшe пepecтpoить фaйл tags.

Teг main oбpaбaтывaeтcя для пpoгpaмм нa Cи ocoбым oбpaзoм. K имeни фaйлa пpипиcывaeтcя M, a cyффикc .c yдaляeтcя, тaк жe, кaк и кoмпoнeнты пyти. Этo пoзвoляeт иcпoльзoвaть ctags в кaтaлoгax, coдepжaщиx нecкoлькo пpoгpaмм.

ФАЙЛЫ

tags Bыxoднoй фaйл тeгoв.

CМ. ТAКЖE

,



CTERMID(3S)


НАЗВАНИЕ

ctermid - получение имени управляющего терминала

СИНТАКСИС

#include <stdio.h>

char *ctermid (s) char *s;

ОПИСАНИЕ

Функция ctermid формирует маршрутное имя управляющего терминала текущего процесса и помещает его в цепочку символов.

Если значение аргумента s равно NULL, то цепочка символов размещается во внутренней статической области, адрес которой возвращается функцией. При каждом вызове функции содержимое статической области обновляется. Если значение s отлично от NULL, то s считается указателем на символьный массив, содержащий по крайней мере L_ctermid элементов; маршрутное имя управляющего терминала помещается в этот массив, а функция возвращает значение s. Константа L_ctermid определена во включаемом файле <stdio.h>.

ПРИМЕЧАНИЯ

Разница между функциями ctermid и состоит в том, что ttyname требует в качестве аргумента дескриптор файла и возвращает действительное имя терминала, ассоциированного с этим дескриптором файла. А ctermid возвращает цепочку символов (/dev/tty), с помощью которой можно ссылаться на терминал, используя ее как имя файла. Поэтому ttyname может использоваться только в случае, если процесс имеет хотя бы один файл, ассоциированный с терминалом.

СМ. ТАКЖЕ

.



CTIME(3C)


НАЗВАНИЕ

ctime, localtime, gmtime, asctime, cftime, ascftime, tzset - преобразование даты и времени в цепочку символов

СИНТАКСИС

#include <sys/types.h>

#include <time.h>

char *ctime (clock) time_t *clock;

struct tm *localtime (clock) time_t *clock;

struct tm *gmtime (clock) time_t *clock;

char *asctime (tm) struct tm *tm;

extern long timezone;

extern int daylight;

extern char *tzname[2];

void tzset ( )

ОПИСАНИЕ

Аргументом функций ctime, localtime и gmtime служит указатель clock на значение типа time_t, описанного во включаемом файле . Это значение интерпретируется как число секунд, отсчитываемое от 00:00:00 1 января 1970г. всемирного времени. Функция ctime возвращает указатель на цепочку из 26 символов вида

Sun Jan 16 01:03:52 1987\n\0

где все поля имеют постоянную длину.

Функции localtime и gmtime возвращают указатели на "tm"-структуры, описанные ниже. Localtime вносит поправку на часовой пояс и, возможно, на летнее время; gmtime осуществляет преобразование непосредственно ко всемирному времени, используемому в системе UNIX.

Функция asctime преобразует "tm"-структуру в цепочку из 26 символов (подобную приведенной выше) и возвращает указатель на эту цепочку.

Об явления всех функций, внешних об ектов, а также "tm"-структуры содержатся во включаемом файле . Описание структуры выглядит так:

struct tm { int tm_sec; /* Секунды (0-59) */ int tm_min; /* Минуты (0-59) */ int tm_hour; /* Часы (0-23) */ int tm_mday; /* День месяца (1-31) */ int tm_mon; /* Месяц года (0-11) */ int tm_year; /* Год - 1900 */ int tm_wday; /* День недели (Воскресенье = 0) */ int tm_yday; /* День года (0-365) */ int tm_isdst; };

Отличие tm_isdst от нуля указывает на то, что используется летнее время.

Внешняя переменная timezone типа long содержит разницу в секундах между всемирным временем и местным поясным временем. Скажем, для Восточного поясного времени EST (см. ПРИМЕЧАНИЯ) эта разница составляет 5*60*60. Внешняя переменная daylight отлична от нуля тогда и только тогда, когда должно осуществляться преобразование к летнему времени в соответствии со стандартом США. Программа учитывает особенности этого преобразования в 1974, 1975 годах; при необходимости перечень таких лет может быть расширен.

При наличии переменной окружения с именем TZ, функция asctime использует значение этой переменной для задания часового пояса, отличного от подразумеваемого. Значение TZ представляет из себя трехбуквенное название местного поясного времени (см. ПРИМЕЧАНИЯ), за которым следует число, выражающее отставание поясного времени от гринвичского в часах и далее, возможно, следует трехбуквенное название летнего времени, действующего в данном поясе. К примеру, для Нью-Джерси следует установить значение EST5EDT. Исходя из установленного TZ можно изменить значения внешних переменных timezone и daylight, а во внешнюю переменную


char *tzname[2] = {"EST", "EDT"};

поместить названия временных шкал. Эти изменения осуществляет функция tzset; обычно она вызывается функцией asctime, но может быть вызвана пользователем и явно.

Следует иметь в виду, что для большинства реализаций системный профайл /etc/profile содержит присваивание переменной TZ [см. , timezone(4)].

СМ. ТАКЖЕ

, , , timezone(4), .

СЮРПРИЗЫ

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

ПРИМЕЧАНИЯ

Всемирным временем называют поясное время 0-го часового пояса, которое представляет из себя местное среднее солнечное время гринвичского меридиана; обозначается GMT (Greenwich Mean Time).

Московское время опережает всемирное на 3 часа.(Это так называемое декретное московское время - не путать с поясным!)

Поясное время Москвы, лежащей во 2-м часовом поясе, опережает всемирное на 2 часа.

Московское летнее время опережает всемирное на 4 часа.

Основная территория США покрывается 4-мя часовыми поясами, то есть 16-м, 17-м, 18-м, 19-м, носящими соответственно специальные названия: Pacific (Тихоокеанский), Mountain (Горный), Central (Центральный), Eastern (Восточный). В них действует соответствующее поясное (Standard) и во всех штатах основной территории, за исключением Аризоны, летнее (Daylight [Saving]) время (Time). Отсюда сокращенные названия: PST, MST, CST, EST, а также PDT, MDT, CDT, EDT.










char *tzname[2] = {"EST", "EDT"};

поместить названия временных шкал. Эти изменения осуществляет функция tzset; обычно она вызывается функцией asctime, но может быть вызвана пользователем и явно.

Следует иметь в виду, что для большинства реализаций системный профайл /etc/profile содержит присваивание переменной TZ [см. , timezone(4)].

СМ. ТАКЖЕ

, , , timezone(4), .

СЮРПРИЗЫ

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

ПРИМЕЧАНИЯ

Всемирным временем называют поясное время 0-го часового пояса, которое представляет из себя местное среднее солнечное время гринвичского меридиана; обозначается GMT (Greenwich Mean Time).

Московское время опережает всемирное на 3 часа.(Это так называемое декретное московское время - не путать с поясным!)

Поясное время Москвы, лежащей во 2-м часовом поясе, опережает всемирное на 2 часа.

Московское летнее время опережает всемирное на 4 часа.

Основная территория США покрывается 4-мя часовыми поясами, то есть 16-м, 17-м, 18-м, 19-м, носящими соответственно специальные названия: Pacific (Тихоокеанский), Mountain (Горный), Central (Центральный), Eastern (Восточный). В них действует соответствующее поясное (Standard) и во всех штатах основной территории, за исключением Аризоны, летнее (Daylight [Saving]) время (Time). Отсюда сокращенные названия: PST, MST, CST, EST, а также PDT, MDT, CDT, EDT.









CTRACE(1)


НАЗВАНИЕ

ctrace - отладчик C-программ

СИНТАКСИС

ctrace [-f функция ...] [-v функция ...] [-o] [-x] [-u] [-е] [-lчисло_операторов] [-s] [-tчисло_переменных] [-P] [-b] [-pцепочка_символов] [-rфайл] [файл]

ОПИСАНИЕ

Команда ctrace позволяет отслеживать выполнение C-программ, от оператора к оператору. Это напоминает исполнение процедуры shell'а с опцией -x. Отладчик ctrace читает C-программу из файла (или со стандартного ввода, если файл не задан), вставляет функции печати текста каждого исполняемого оператора и значений всех используемых или модифицируемых переменных, и пишет измененную программу на стандартный вывод. Результат работы команды ctrace следует поместить во временный файл, так как команда не позволяет использовать каналы. Затем временный файл нужно скомпилировать и выполнить.

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

Обычно используемые опции:

-f функция ... Отслеживать только указанные функции. -v функция ... Отслеживать все функции, кроме указанных.

Имеются стандартные и дополнительные форматы вывода значений переменных. Длинные целые и указатели всегда распечатываются как целые со знаком. Указатели на массивы символов, если это нужно по смыслу, распечатываются еще и как цепочки символов. Символьные, короткие целые и целые значения распечатываются как целые со знаком и, если нужно, как символы. Плавающие значения двойной точности распечатываются в экспоненциальном формате. Можно потребовать, чтобы значения распечатывались еще и в дополнительном формате, указав следующие опции:

-oВосьмеричный формат. -xШестнадцатеричный формат. -uБеззнаковый формат. -еФормат вещественных чисел.

<


/p>

Следующие опции используются только в специальных случаях:

- lчисло_операторов Контролировать заданное число последовательно выполняемых операторов на предмет цикла трассировки, а не 20, как считается по умолчанию. Чтобы полностью трассировать циклы, используйте значение 0. -s Отменить ненужную трассировку простых операторов присваивания и вызовов функций копирования цепочек символов. Эта опция может скрыть ошибки, вызванные использованием операции = вместо ==. -tчисло_переменных Отслеживать заданное число_переменных для каждого оператора, а не 10, как по умолчанию (максимальным значением n является 20). В разделе ДИАГНОСТИКА об ясняется, когда нужно использовать эту опцию. -P Перед выполнением трассировщика запустить препроцессор языка C. Можно использовать также опции -D, -I и -U препроцессора .

Следующие опции используются для обеспечения трассировки программ, которые будут выполняться не в среде операционной системы UNIX:

-b Использовать для трассировки только базовые функции, то есть функции, описанные в статьях , и . Эти функции есть даже в кросскомпиляторах для микропроцессоров. Опция -b необходима, в частности, при выполнении трассируемых программ в операционной системе, в которой нет функций , , или . -pцепочка_символов Изменить подразумеваемое значение трассировочной функции печати printf(. Например, указание -p'fprintf(stderr,' приведет к тому, что отладочная печать пойдет в стандартный протокол. -rфайл Использовать файл вместо пакета функций трассировки runtime.c. Это позволяет полностью изменить функцию печати, а не только ее название и первые аргументы, как в случае опции -p.

ПРИМЕР

Пусть файл lc.c содержит следующую C-программу:

1 #include <stdio.h> 2 main() /* Подсчет числа вводимых строк */ 3 { 4 int c,nl; 5 6 nl = 0; 7 while ((c=getchar()) != EOF) 8 if (c = '\n') 9 ++nl; 10 printf ("%d\n",nl); 11}

и Вы вводите такие команды и тестовые данные:

cc lc.c a.out 1 CTRL+D

Программа будет откомпилирована и выполнена. Результатом работы программы будет число 2, но это неверный результат, так как тестовые данные содержат только одну строку. Ошибка в этой программе банальная, но коварная. Если Вы вызовете отладчик ctrace с помощью команд



ctrace lc.c > temp.c cc temp.c a.out

то результат будет таким:

2 main() 6 nl = 0; /* nl == 0 */ 7 while ((c=getchar()) != EOF)

Теперь программа ждет ввода. Если Вы вводите те же тестовые данные, что и ранее, получится следующее:

/* c == 49 or '1' */ 8 if (c = '\n') /* c == 10 or '\n' */ 9 ++nl; /* nl == 1 */ 7 while ((c=getchar()) != EOF) /* c == 10 or '\n' */ 8 if (c = '\n') /* c == 10 or '\n' */ 9 ++nl; /* nl == 2 */ /* repeating */ /* repeated < 1 time */ 7 while ((c=getchar()) != EOF)

Если теперь ввести символ конца файла, получится окончательный результат:

/* c == -1 */ 10 printf ("%d\n",nl); /* nl == 2 */ 2

/* return */

Обратите внимание на печать значения переменной nl сразу после трассировки оператора printf. Также обратите внимание на комментарий /* return */, добавленный отладчиком ctrace в конце трассировки. Он указывает на неявный выход из функции по достижении закрывающей скобки.

Трассировочная печать показывает, что переменной c присваивается значение '1' в строке 7, а в строке 8 она уже имеет значение '\n'. Раз Вы обратили внимание на оператор if в строке 8, то Вы, скорее всего, догадаетесь, что использовали оператор присваивания = вместо сравнения ==. Во время простого просмотра текста программы эту ошибку легко пропустить.

Управление трассировкой во время выполнения

Стандартный режим трассировки охватывает всю программу, если только не заданы опции -f или -v для трассировки избранных функций. Стандартное использование отладчика ctrace не дает возможности пооператорного управления трассировкой, не позволяет выключать и включать трассировку во время выполнения отлаживаемой программы.

Вставляя в программу вызовы функций ctroff( ) и ctron( ), можно, соответственно, выключать или включать трассировку во время выполнения. Тем самым, используя операторы if языка C, можно реализовать сколь угодно сложный способ управления трассировкой. На основании того факта, что ctrace определяет переменную препроцессора CTRACE, реализуется условная вставка операторов управления трассировкой, например



#ifdef CTRACE if (c == '!" && i > 1000) ctron (); #endif

Если программа оттранслирована с опцией -g, функции включения/ выключения трассировки можно вызвать из отладчика . Например, чтобы отслеживать выполнение всех строк главной программы, кроме интервала строк с седьмой по десятую, введите следующие команды:

sdb a.out main:7b ctroff() main:11b ctron() r

Допускается также выключение и включение трассировки установкой значения переменной tr_ct_ в 0 или 1 соответственно. Такой способ целесообразен, если используется отладчик, который не предоставляет возможности вызвать функции ctroff( ) и ctron( ) непосредственно.

ФАЙЛЫ

/usr/lib/ctrace/runtime.c

Трассировочное окружение времени выполнения.

СМ. ТАКЖЕ
, .

, , , , , в Справочнике программиста.

ДИАГНОСТИКА

В этом разделе поясняются диагностические сообщения, выдаваемые как трассировщиком ctrace, так и компилятором , поскольку трассиривочные действия часто приводит к каким-то предупреждающим сообщениям от компилятора . В редких случаях появляются и сообщения об ошибках, но их можно избежать.

Диагностика отладчика ctrace

warning: some variables are not traced in this statement В каждом операторе отслеживаются только 10 переменных, чтобы избежать ошибки C-компилятора "out of tree space; simplify expression" (исчерпано пространство для дерева, упростите выражение). Для увеличения числа отслеживаемых переменных используйте опцию -t. warning: statement too long to trace Оператор имеет длину более 400 символов. Чтобы уменьшить длину, используйте для выделения отступов символы табуляции, а не пробелы. cannot handle preprocessor code, use -P option Обычно это происходит, когда в середине C-оператора есть директивы препроцессора #ifdef/#endif или в конце директивы препроцессора #define стоит символ точки с запятой. 'if...else if' sequence too long Упростите конструкцию, удалив ключевое слово else из середины. possible syntax error, try -P option Попробуйте использовать опцию -P для обработки исходного файла с соответствующими опциями препроцессора -D, -I, или -U. Если диагностическое сообщение не исчезло, посмотрите разделы предупреждений ниже.



Диагностика компилятора cc

warning: illegal combination of pointer and integer

warning: statement not reached

warning: sizeof returns 0 Не обращайте внимания. compiler takes size of function См. выше сообщение отладчика ctrace "possible syntax error". yacc stack overflow См. выше сообщение отладчика ctrace "'if...else if' sequence too long". out of tree space; simplify expression Используйте опцию -t для уменьшения, по сравнению с подразумеваемым значением 10, количества отслеживаемых в одном операторе переменных. Не обращайте внимания на предупреждающее сообщение "ctrace: too many variables to trace", которое Вы получите теперь. redeclaration of signal Либо исправьте описание функции , либо удалите его и включите в текст файл <signal.h>.

ПРЕДОСТЕРЕЖЕНИЯ

Вы получите сообщение от отладчика ctrace о синтаксической ошибке, если опустите точку с запятой после последнего элемента описания записи или об единения, непосредственно перед правой скобкой }. Некоторые C-компиляторы не требуют этой точки с запятой.

Определение функции с таким же именем, что и у системной функции, может привести к синтаксической ошибке, если изменено количество аргументов. Используйте лучше другое имя.

Отладчик ctrace предполагает, что BADMAG является макросом препроцессора и что EOF и NULL являются константами, определенными с помощью директивы #define. Описание любого из этих об ектов как переменной, например int EOF;, вызовет синтаксическую ошибку.

СЮРПРИЗЫ

Отладчик ctrace не имеет информации о компонентах структур данных таких, как записи, об единения и массивы. Он не в состоянии выбрать формат, чтобы распечатать компоненты структуры данных, когда происходит присваивание значения всей структуре. Отладчик может вместо структуры распечатать ее адрес или использовать неверный формат (например, 1.23456e-123 для записи с двумя целыми компонентами).

Указатели всегда трактуются как указатели на цепочки символов.

Отслеживание циклов трассировки производится отдельно для каждого файла многофайловой программы. В результате функция, вызываемая в цикле, может продолжать трассироваться, или же некоторая функция не будет трассироваться до вызова другой функции из того же файла.

Опция -l не работает; ctrace все равно использует подразумеваемое значение 20.









CTYPE(3C)


НАЗВАНИЕ

ctype: isalpha, isupper, islower, isdigit, isxdigit, isalnum, isspace, ispunct, isprint, isgraph, iscntrl, isascii - классификация символов

СИНТАКСИС

#include <ctype.h>

int isalpha (c) int c;

...

ОПИСАНИЕ

Перечисленные выше макросы классифицируют целые значения, являющиеся кодами символов, путем просмотра таблицы. Каждый из макросов является предикатом, возвращающим ненулевое значение как истину, и 0 - как ложь. Макрос isascii определен для любого целого значения. Остальные определены, только если условие isascii истинно, а также для единственного значения, не являющегося кодом ASCII, а именно EOF [-1; см. ].

Ниже перечислены условия, проверяемые каждым из макросов:

isalpha c буква. isupper c большая буква. islower c малая буква. isdigit c цифра: [0-9]. isxdigitc шестнадцатеричная цифра: [0-9], [A-F] или [a-f]. isalnum c алфавитно-цифровой символ (буква или цифра). isspace c пробел, табуляция, возврат каретки, перевод строки, вертикальная табуляция или символ перехода к новой странице. ispunct c знак пунктуации (то есть не управляющий и не алфавитно-цифровой символ). isprint c печатный символ; коды таких символов располагаются в диапазоне от 040 (пробел) до 0176 (тильда). isgraph c печатный символ, но не пробел. iscntrl c символ удаления (0177) или обычный управляющий символ (код меньше 040). isascii c является ASCII-символом (код меньше 0200).

СМ. ТАКЖЕ

, .

ДИАГНОСТИКА

Если аргумент какого-либо из перечисленных макросов не принадлежит диапазону допустимых значений, результат непредсказуем.



CU(1C)


НАЗВАНИЕ

cu,tip - вызов другой UNIX-системы

СИНТАКСИС

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, по мере передачи блоков на терминал выводятся последовательные цифры. ~~строка Послать ~строку на удаленную систему. ~%break Передать на удаленную систему символ прерывания (можно сокращать до ~%b). ~%debug Включить/выключить вывод отладочной информации (можно сокращать до ~%d). ~t Вывести значения компонентов структуры termio для пользовательского терминала (полезно для отладки). ~l Вывести значения компонентов структуры termio для коммуникационной линии (полезно для отладки). ~%nostop Включить/выключить Xon/Xoff-протокол при вводе. Эта команда применяется в тех случаях, когда удаленная система не может правильным образом реагировать на символы CTRL+S и CTRL+Q.

Принимающий процесс обычно копирует данные, получаемые от удаленной системы, на свой стандартный вывод. Особым образом обрабатываются строки, начинающиеся с символа ~. Комбинация символов ~>:файл используется для переназначения стандартного вывода (комбинация ~>>: - для добавления информации). Восстановление стандартного вывода обеспечивает строка ~>.



При использовании команды ~% put ожидается, что на удаленной стороне доступны утилиты и . Ожидается также, что символы "забоя" последнего введенного символа и последней введенной строки на локальной и удаленной системах совпадают. В соответствующих местах вставлены символы \.

При использовании команды ~%take ожидается, что на удаленной стороне доступны утилиты и . Чтобы символы табуляции передавались без замены их пробелами, на удаленной системе должен быть установлен режим stty tabs.

Если команда cu была использована в системе X для связи с системой Y, а затем была использована в системе Y для связи с системой Z, команды на системе Y могут быть выполнены посредством команды ~~. Например, команда uname может быть выполнена на системах Z, X и Y следующим образом:

uname на Z ~[X]!uname на X ~~[Y]!uname на Y

Вообще, ~ означает, что команда будет исполнена на исходной машине, а ~~ - на следующей машине по цепочке вызовов.

ПРИМЕРЫ

Вызвать систему с номером 9 201 555 1212, используя скорость передачи 1200 бод, с ожиданием гудка после первой девятки:

cu -s1200 9=2015551212

Если скорость не указана, по умолчанию она принимается равной Any. Подключиться к системе, доступной напрямую:

cu -l /dev/tty10

или

cu -l tty10

Использовать имя системы:

cu $NAME

ФАЙЛЫ

/usr/lib/uucp/Systems /usr/lib/uucp/Devices /usr/spool/locks/LCK..линия

СМ. ТАКЖЕ
, , , , , .

КОДЫ ЗАВЕРШЕНИЯ

Нулевой код при нормальном завершении, единичный - в противном случае.

ПРЕДОСТЕРЕЖЕНИЯ

Команда cu не производит никакой проверки целостности пересылаемых данных. Данные, содержащие символы, имеющие для cu специальное значение, могут не быть переданы должным образом. В зависимость от оборудования, может являться необходимым использование ~. для завершения передачи даже если была выполнена команда stty 0. Нельзя быть уверенным в надежной передаче командами ~%put или ~%take управляющих символов. После установления соединения приглашение может появляться не сразу, а лишь после нажатия возврата каретки.

СЮРПРИЗЫ

Во время выполнения команды ~%put процесс передачи искусственно замедляется, чтобы уменьшить вероятность потери данных.









CURSES(3X)


НАЗВАНИЕ

curses - пакет подпрограмм управления выводом на терминал

ПРИМЕЧАНИЯ

Описание пакета curses устроено не совсем обычно.

В разделе СИНТАКСИС дается информация о компиляции, сводка имен аргументов процедур пакета и их типов, а также алфавитный указатель процедур пакета и их аргументов.

В разделе ОПИСАНИЕ рассказывается о том, как нужно использовать пакет curses.

В разделе ПРОЦЕДУРЫ приводится описание всех процедур пакета curses, процедуры при этом сгруппированы по следующим темам:

управление всем экраном управление окнами вывод ввод установка режимов вывода установка режимов ввода запросы к оборудованию программируемые метки процедуры нижнего уровня процедуры уровня terminfo эмуляция termcap дополнительные процедуры использование curscr

Затем идут разделы , , .

СИНТАКСИС

cc [опция ...] файл ... -lcurses [библиотека ...]

#include <curses.h> (автоматически включает <stdio.h>, <termio.h> и <unctrl.h>)

Ниже описаны аргументы процедур пакета curses, некоторые глобальные переменные, а затем сами процедуры. Все процедуры пакета, если не оговорено противное, возвращают значения ERR или OK типа int. В случае ошибки результат процедур, возвращающих значения-указатели, равен NULL. (Константы ERR, OK и NULL определяются во включаемом файле <curses.h>.)

bool bf char **area, *boolnames [ ], *boolcodes [ ], *boolfnames [ ], *bp char *cap, *capname, *codename [2], erasechar, *filename, *fmt char *keyname, killchar, *label, *longname char *name, *numnames [ ], *numcodes [ ], *numfnames [ ] char *slk_label, *str, *strnames [ ], *strcodes [ ], strfnames [ ] char *term, *tgetstr, *tigetstr, *tgoto, *tparm, *type chtype attrs, ch, horch, vertch FILE *infd, *outfd int begin_x, begin_y, begline, bot, c, col, count int dmaxcol, dmaxrow, dmincol, dminrow, *erret, fildes int (*init ( )), labfmt, labnum, line int ms, ncols, new, newcol, newrow, nlines, numlines int oldcol, oldrow, overlay int p1, p2, p3, p4, p5, p6, p7, p8, p9 int pmincol, pminrow, (*putc ( )), row int smaxcol, smaxrow, smincol, sminrow, startrow int tenths, top, visibility, x, y SCREEN *new, *newterm, *set_term TERMINAL *cur_term, *nterm, *oterm va_list varglist WINDOW *curscr, *dstwin, *initscr, *newpad, *newwin, *orig WINDOW *pad, *srcwin, *stdscr, *subpad, *subwin, *win


addch (ch) addstr (str) attroff (attrs) attron (attrs) attrset (attrs) baudrate ( ) beep ( ) box (win, vertch, horch) cbreak ( ) clear ( ) clearok (win, bf) clrtobot ( ) clrtoeol ( ) copywin (srcwin, dstwin, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, overlay) curs_set (visibility) def_prg_mode ( ) def_shell_mode ( ) def_curterm (oterm) delay_output (ms) delch ( ) deleteln ( ) delwin (win) doupdate ( ) draino (ms) echo ( ) echochar (ch) endwin ( ) erase ( ) erasechar ( ) filter ( ) flash ( ) flushinp ( ) garbagedlines (win, begline, numlines) getbegyx (win, y, x) getch ( ) getmaxyx (win, y, x) getstr (str) getsyx (y, x) getyx (win, y, x) halfdelay (tenths) has_ic ( ) has_il ( ) idlok (win, bf) inch ( ) initscr ( ) insch (ch) insertln ( ) intrflush (win, bf) isendwin ( ) keyname (c) keypad (win, bf) killchar ( ) leaveok (win, bf) longname ( ) meta (win, bf) move (y, x) mvaddch (y, x, ch) mvaddstr (y, x, str) mvcur (oldrow, oldcol, newrow, newcol) mvdelch (y, x) mvgetch (y, x) mvgetstr (y, x, str) mvinch (y, x) mvinsch (y, x, ch) mvprintw (y, x, fmt[, arg...]) mvscanw (y, x, fmt[, arg...]) mvwaddch (win, y, x, ch) mvwaddstr (win, y, x, str) mvwdelch (win, y, x) mvwgetch (win, y, x) mvwgetstr (win, y, x, str) mvwin (win, y, x) mvwinch (win, y, x) mvwinsch (win, y, x, ch) mvwprintw (win, y, x, fmt[, arg...]) mvwscanw (win, y, x, fmt[, arg...]) napms (ms) newpad (nlines, ncols) newterm (type, outfd, infd) newwin (nlines, ncols, begin_y, begin_x) nl ( ) nocbreak ( ) nodelay (win, bf) noecho ( ) nonl ( ) noraw ( ) notimeout (win, bf) overlay (srcwin, dstwin) overwrite (srcwin, dstwin) pechochar (pad, ch) pnoutrefresh (pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol) prefresh (pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol) printw (fmt[, arg...]) putp (str) raw ( ) refresh ( ) reset_prog_mode ( ) reset_shell_mode ( ) resetty ( ) restartterm (term, fildes, erret) ripoffline (line, init) savetty ( ) scanw (fmt[, arg...]) scr_dump (filename) scr_init (filename) scr_restore (filename) scroll (win) scrollok (win, bf) set_curterm (nterm) set_term (new) setscrreg (top, bot) setsyx (y, x) setupterm (term, fildes, erret) slk_clear ( ) slk_init (labfmt) slk_label (labnum) slk_noutrefresh ( ) slk_refresh ( ) slk_restore ( ) slk_set (labnum, label, fmt) slk_touch ( ) standend ( ) standout ( ) subpad (orig, nlines, ncols, begin_y, begin_x) subwin (orig, nlines, ncols, begin_y, begin_x) tgetent (bp, name) tgetflag (codename) tgetnum (codename) tgetstr (codename, area) tgoto (cap, col, row) tigetflag (capname) tigetnum (capname) tigetstr (capname) touchline (win, start, count) touchwin (win) tparm (str, p1, p2, p3, p4, p5, p6, p7, p8, p9) tputs (str, count, putc) traceoff ( ) traceon ( ) typeahead (fildes) unctrl (c) ungetch (c) vidattr (attrs) vidputs (attrs, putc) vwprintw (win, fmt, varglist) vwscanw (win, fmt, varglist) waddch (win, ch) waddstr (win, str) wattroff (win, attrs) wattron (win, attrs) wattrset (win, attrs) wclear (win) wclrtobot (win) wclrtoeol (win) wdelch (win) wdeleteln (win) wechochar (win, ch) werase (win) wgetch (win) wgetstr (win, str) winch (win) winsch (win, ch) winsertln (win) wmove (win, y, x) wnoutrefresh (win) wprintw (win, fmt[, arg...]) wrefresh (win) wscanw (win, fmt[, arg...]) wsetcrreg (win, top, bot) wstandend (win) wstandout (win)



ОПИСАНИЕ

Пакет curses дает пользователю независимый от терминала метод вывода на экран с разумной оптимизацией.

Инициализирующие процедуры initscr или newterm необходимо обязательно вызвать самыми первыми (три исключения из этого правила будут описаны ниже). При завершении работы нужно вызвать процедуру endwin. Чтобы вводимые символы не изображались на экране (большинству интерактивных экранных программ нужен именно такой режим) после вызова процедуры initscr необходимо вызвать

cbreak (); noecho ()

Большинство программ дополнительно вызывают

nonl (); intrflush (stdscr, FALSE); keypad (stdscr, TRUE)

Перед запуском программы, использующей пакет curses, на терминале необходимо установить позиции табуляции и, если требуется, вывести инициализирующие последовательности. Это обычно делается командой tput init, причем переменная окружения TERM должна быть предварительно определена и помещена в окружение командой export TERM. Подробнее см. , и раздел Табуляции и инициализация в .

Библиотека curses содержит процедуры, манипулирующие структурами данных, называемыми окнами, которые можно мыслить как двумерные массивы символов, представляющие весь экран или его часть. Всегда имеется стандартное окно, размером с экран, называемое stdscr. Другие окна могут быть созданы процедурой newwin. В программах на окна ссылаются с помощью переменных типа WINDOW *; тип структур WINDOW определен во включаемом файле <curses.h>. Этими структурами данных можно манипулировать с помощью процедур, описанных ниже, среди которых основными являются move и addch. (Самыми общими являются процедуры, имена которых начинаются с буквы w, в них можно указать окно в качестве параметра. Процедуры, имена которых не начинаются с буквы w, обычно имеют дело с stdscr.) Затем вызывается процедура refresh, которая обращается к нужным процедурам, чтобы экран пользователя выглядел как stdscr. Символы в окне имеют тип chtype, что позволяет для каждого символа хранить дополнительную информацию.

Существуют окна специального типа (спецокна), которые не ограничены размерами экрана и содержимое которых целиком на экране не изображается. Более подробно об этих окнах см. ниже в разделе Управление окнами (процедура newpad).

Для каждого изображаемого на экране символа могут быть заданы атрибуты визуализации, что позволяет выводить подчеркнутые или инвертированные символы на терминалах, обладающих соответствующими возможностями. С помощью пакета curses можно вывести псевдографические символы. При вводе процедуры пакета могут преобразовывать последовательности, посылаемые стрелками и функциональными клавишами. Атрибуты визуализации, псевдографические символы и коды для функциональных клавиш описаны в файле <curses.h>, например A_REVERSE, ACS_HLINE, KEY_LEFT.

В пакете curses определена также переменная curscr типа WINDOW *, которую можно использовать в качестве аргумента некоторых процедур нижнего уровня, таких как перерисовка испорченного экрана. Если обратиться к процедуре clearok с аргументом curscr, то следующее обращение к wrefresh для любого окна приведет к очистке экрана и затем его полной перерисовке. Если обратиться к процедуре wrefresh с аргументом curscr, то экран немедленно очистится и перерисуется. Именно так большинство программ осуществляет перерисовку экрана.

Информация о размерах экрана, заданная в terminfo, может быть перекрыта переменными окружения LINES и COLUMNS, что используется, например, для терминала AT&T 5620, имеющего переменный размер экрана.

Если определена переменная окружения TERMINFO, процедуры пакета curses сначала ищут описание терминала не в стандартном месте, а в указанном. Например, если переменная окружения TERM имеет значение att4425, то скомпилированное описание характеристик по умолчанию извлекается из файла /usr/lib/terminfo/a/att4425. Однако, если значение переменной окружения TERMINFO равно $HOME/myterms, то curses вначале проверит файл $HOME/ myterms/a/att4425, и только если этот файл отсутствует, обратится к /usr/lib/terminfo/a/att4425. Подобное соглашение удобно для экспериментов с описаниями, а также тогда, когда нет прав на запись в каталог /usr/lib/ terminfo.

Во включаемом файле <curses.h> определены глобальные переменные LINES и COLS типа int. В процедуре initscr этим переменным присваивается число строк экрана и число символов в строке (более подробную информацию см. в разделе Процедуры уровня terminfo). Константы TRUE и FALSE суть 1 и 0 соответственно. Процедуры обычно возвращают значения ERR или OK; таким образом можно определить, успешно ли завершилась процедура. Константы ERR и OK также определены в файле <curses.h>



ПРОЦЕДУРЫ

Для многих описываемых ниже процедур имеется несколько версий. Процедуры с префиксом w имеют дополнительный аргумент - окно. Процедуры с префиксом p имеют дополнительный аргумент - спецокно. Процедуры без префикса работают с stdscr.

Процедуры с префиксом mv имеют дополнительные аргументы - координаты x и y места, куда нужно поместить курсор перед выполнением соответствующего действия. Эти процедуры вначале вызывают move (y, x), а затем соответствующую процедуру без префикса mv. Аргумент y всегда означает строку окна, а x - колонку. Левый верхний угол окна имеет координаты (0, 0), а не (1, 1). Для процедур с префиксом mvw в качестве дополнительных аргументов задаются и окно, и координаты курсора. Аргумент, задающий окно, всегда указывается перед координатами.

Во всех процедурах параметр win задает окно, а параметр pad - спецокно. (И win, и pad имеют тип WINDOW *.) Для процедур, устанавливающих режимы, аргумент bf типа bool должен иметь значение TRUE или FALSE. Типы WINDOWS *, bool и chtype определены во включаемом файле <curses.h>. Описание типов всех переменных приведено в разделе СИНТАКСИС.

Все процедуры, если не оговорено противное, возвращают значения ERR или OK. В случае ошибки результат процедур, возвращающих значения-указатели, равен NULL.

Управление всем экраном

WINDOW *initscr ( )

Первой вызываемой процедурой почти всегда является initscr. Есть только следующие три исключения: slk_init, filter и ripoffline. Процедура initscr определяет тип терминала и инициализирует структуры данных пакета curses. Выполняются такие действия, чтобы первое обращение к refresh очистило экран. Если обнаружены ошибки, initscr выводит сообщение в стандартный протокол и завершает программу; если ошибок не было, возвращается значение stdscr. Если программа сама желает обрабатывать ошибки инициализации, вместо initscr следует использовать newterm. Процедуру initscr нужно вызывать только один раз.

endwin ( )

Процедуру endwin необходимо обязательно вызывать перед завершением программы, а также, например, перед запуском порожденного процесса shell или выполнением функции . Процедура endwin восстанавливает начальные характеристики драйвера , помещает курсор в левый нижний угол экрана и переводит терминал в нормальный режим визуализации. Чтобы продолжить пользование пакетом curses, необходимо вызвать процедуру wrefresh или doupdate.



isendwin ( )

Возвращает значение TRUE, если перед этим был вызов процедуры endwin, но еще не было вызова wrefresh или doupdate.

SCREEN *newterm (type, outgf, infd)

Программа, осуществляющая вывод на несколько терминалов одновременно, должна использовать для инициализации каждого из них не initscr, а newterm. Программа, которая сама может обрабатывать ошибки инициализации, например, путем работы в строчном режиме вместо экранного, также должна использовать для инициализации процедуру newterm. В случае нескольких терминалов процедура newterm должна быть вызвана для каждого терминала. Процедура возвращает значение типа SCREEN *, которое должно быть сохранено для последующих ссылок на терминал. Аргумент type задает имя терминала, которое будет использоваться вместо значения переменной окружения TERM, аргумент outfd является указателем потока, открытого на вывод [см. ], а аргумент infd - это указатель потока, открытого на ввод. При завершении программа должна вызвать процедуру endwin для каждого терминала. Если newterm вызывался несколько раз для одного и того же терминала, endwin должен вызываться в порядке, обратном вызовам newterm.

SCREEN *set_term (new)

Эта процедура используется для переключения между несколькими терминалами. Терминал, на который ссылается аргумент new, становится текущим. Процедура возвращает указатель на терминал, бывший до этого текущим. Это единственная процедура, которая манипулирует указателями типа SCREEN *; все остальные процедуры относятся к текущему терминалу.

Управление окнами

refresh ( )
wrefresh (win)

Эти процедуры (или процедуры prefresh, pnoutrefresh, wnoutrefresh или doupdate) должны вызываться для реального вывода на экран, тогда как большинство остальных процедур только манипулируют структурами данных. Процедура wrefresh копирует указанное окно на экран терминала, принимая во внимание то, что на экран уже выведено, чтобы не выводить информацию повторно (это называется оптимизацией вывода). Процедура refresh делает то же самое для стандартного окна stdscr. Если не установлен режим leaveok, физический курсор терминала помещается на текущее место в окне. Процедура возвращает количество символов, выведенных на терминал.

Отметим, что refresh является макросом.



wnoutrefresh (win)
doupdate ( )

Эти две процедуры обеспечивают более эффективное изменение экрана, чем просто wrefresh. Это делается следующим образом.

Процедуры пакета curses хранят две структуры данных, представляющих экран терминала: физический экран, описывающий реальное состояние экрана и виртуальный экран, описывающий то, что программист хочет видеть на экране. Процедура wrefresh сначала вызывает процедуру wnoutrefresh, которая копирует указанное окно на виртуальный экран, а затем обращается к doupdate для сравнения виртуального экрана с физическим и выполнения необходимых изменений на физическом экране. Если программист хочет изменить сразу несколько окон, то несколько вызовов wrefresh приведут к последовательным вызовам wnoutrefresh и doupdate, то есть к нескольким всплескам на экране. Если же вначале сделать несколько вызовов wnoutrefresh, а потом один вызов doupdate, то на экране будет один всплеск, на терминал будет передано меньшее число символов и процессор будет меньше загружен.

WINDOW *newwin (nlines, ncols, begin_y, begin_x)

Создать новое окно, содержащее nlines строк и ncols колонок, и возвратить указатель на него. Левый верхний угол окна помещается в строке begin_y, колонке begin_x. Если nlines или ncols равны 0, размер окна будет LINES-begin_y строк и COLS begin_x колонок соответственно. Новое окно размером с целый экран создается вызовом newwin (0, 0, 0, 0).

mvwin (win, y, x)

Переместить указанное окно так, чтобы его левый верхний угол находился в позиции (y, x). Если перемещение выводит окно за пределы экрана, это считается ошибкой и перемещение окна не выполняется.

WINDOW *subwin (orig, nlines, ncols, begin_y, begin_x)

Создать новое окно, содержащее nlines строк и ncols колонок, и возвратить указатель на него. Левый верхний угол окна помещается в строке begin_y, колонке begin_x (номер строки и колонки относительно экрана, а не относительно окна orig). Считается, что новое окно перекрывается с окном orig, то есть изменения в одном окне влияют на оба окна. При использовании этой процедуры обычно требуется перед обращением к wrefresh вызвать процедуры touchwin и touchline для окна orig.



delwin (win)

Удалить указанное окно, освободив всю память, связанную с ним. В случае перекрытия окон сначала должны быть удалены окна, созданные с помощью процедур subwin или subpad.

WINDOW *newpad (nlines, ncols)

Создать новое спецокно, содержащее nlines строк и ncols колонок, и возвратить указатель на него. Спецокна не ограничены размерами экрана и даже не обязательно связаны с какой-либо частью экрана. Спецокна используются, когда требуется большое окно, из которого на экране будет изображаться только часть. Автоматической перерисовки спецокон (например, при роллировании) не происходит. Спецокно нельзя указывать в качестве аргумента процедуры wrefresh, вместо этого необходимо пользоваться процедурами prefresh и pnoutrefresh. Отметим, что эти процедуры имеют дополнительные аргументы, посредством которых задается та часть спецокна, которая должна изображаться, и та часть экрана, на которой должно располагаться изображение.

WINDOW *subpad (orig, nlines, ncols, begin_y, begin_x)

Создать новое спецокно, содержащее nlines строк и ncols колонок, и возвратить указатель на него. В отличие от процедуры subwin, левый верхний угол нового спецокна задается относительно спецокна orig. Новое окно перекрывается с окном orig, то есть изменения в одном окне влияют на оба окна. При использовании этой процедуры обычно требуется перед обращением к prefresh вызвать процедуры touchwin и touchline для окна orig.

prefresh (pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol) pnoutrefresh (pad, pminrow, pmincol, sminrow, smincol, smaxrow, smaxcol)

Эти процедуры аналогичны процедурам wrefresh и wnoutrefresh, только работают они над спецокнами. Дополнительные аргументы задают место на экране, куда пойдет вывод. Аргументы pminrow и pmincol задают левый верхний угол области спецокна, которая будет изображаться; sminrow, smincol, smaxrow, smaxcol задают прямоугольник на экране, в котором будет вестисть отображение. Правый нижний угол изображаемого прямоугольника в спецокне вычисляется по координатам на экране, так как прямоугольники имеют одинаковые размеры. Оба прямоугольника не должны выходить за пределы спецокна и экрана. Отрицательные значения pminrow, pmincol, sminrow и smincol трактуются как нули.



Вывод

Следующие процедуры предназначены для вывода текста в окна.

addch (ch)
waddch (win, ch)
mvaddch (y, x, ch)
mvwaddch (win, y, x, ch)

Символ ch помещается в текущую позицию окна, текущая позиция при этом сдвигается на единицу вправо. На правой границе окна происходит автоматический перевод строки, на нижней строке окна, если установлен режим scrollok, происходит роллирование.

Если ch является символом табуляции, перевода строки или возврата на шаг, выполняется соответствующее действие в окне. Для перевода строки перед перемещением вызывается процедура clrtoeol. Считается, что позиции табуляции расположены в каждой восьмой позиции. Другие управляющие символы будут выведены в виде ^X. (Вызов процедуры winch после вывода управляющего символа вернет не сам управляющий символ, а его печатное представление.)

К символу могут быть добавлены атрибуты визуализации с помощью логической операции ИЛИ, текст будет визуализироваться с этими атрибутами. Копирование текста с атрибутами из одного места экрана в другое может быть выполнено с помощью процедур inch и addch. См. ниже описание процедуры standout.

Отметим, что ch имеет тип chtype, а не char, а addch, mvaddch и mvwaddch являются макросами.

echochar (ch)
wechochar (win, ch)
pechochar (pad, ch)

Эти процедуры соответственно эквивалентны вызову addch (ch), за которым следует refresh ( ), вызову waddch (win, ch), за которым следует wrefresh (win), вызову waddch (pad, ch), за которым следует prefresh (pad). При этом нужно учитывать, что на экран выводится ровно один символ, поэтому расходы на вывод возрастают. Для процедуры pechochar используется та область экрана, в которую последний раз выводилось указанное спецокно.

Отметим, что ch имеет тип chtype, а не char, а echochar является макросом.

addstr (str)
waddstr (win, str)
mvaddstr (y, x, str)
mvwaddstr (win, y, x, str) Эти процедуры выводят цепочку символов str, ограниченную нулевым байтом, в указанное окно. Они эквивалентны вызову waddch для каждого символа цепочки.

Отметим, что addstr, mvaddstr и mvwaddstr являются макросами.



attroff (attrs)
wattroff (win, attrs)
attron (attrs)
wattron (win, attrs)
attrset (attrs)
wattrset (win, attrs)
standend ( )
wstandend (win)
standout ( )
wstandout (win)

Эти процедуры манипулируют атрибутами визуализации в указанном окне. Атрибуты могут быть любой комбинацией из следующих: A_STANDOUT (сообщение), A_REVERSE (инверсия), A_BOLD (выделение), A_DIM (пониженная яркость), A_BLINK (мерцание), A_UNDERLINE (подчеркивание), A_ALTCHARSET (альтернативный набор символов). Все константы определены в файле <curses.h> и могут комбинироваться операцией логическое ИЛИ (| в языке C).

Текущие атрибуты окна применяются ко всем символам, которые записываются в окно процедурой waddch. Атрибуты принадлежат символу и перемещаются вместе с символом при роллировании и вставке/ удалении строк/символов. Пакет curses изображает все атрибуты в той степени, в какой это позволяет конкретный терминал.

Процедура attrset устанавливает текущий набор атрибутов окна равным аргументу attrs. Процедура attroff сбрасывает указанные атрибуты, остальные атрибуты при этом не меняются. Процедура attron устанавливает указанные атрибуты без изменения остальных. Вызов standout ( ) эквивалентен attron (A_STANDOUT), а вызов standend ( ) эквивалентен attrset (0), то есть сбрасывает все атрибуты.

Отметим, что ch имеет тип chtype, а не char, а attroff, attron, attrset, standend и standout являются макросами.

beep ( )
flash ( )

Эти процедуры используются для привлечения внимания пользователя, сидящего за терминалом. Процедура beep подает звуковой сигнал, если это возможно, а если нет, то делает вспышку на экране. Процедура flash делает вспышку на экране, если это возможно, а если нет, подает звуковой сигнал. Если терминал не умеет подавать звуковой сигнал и не умеет делать вспышку на экране, то ничего не происходит. Почти все терминалы умеют подавать звуковой сигнал, но только некоторые умеют делать вспышку на экране.

box (win, vertch, horch)

По краю окна win рисуется рамка. Аргументы vertch и horch - это символы, с помощью которых рисуются вертикальные и горизонтальные линии. Если vertch и horch равны 0, то используются символы по умолчанию - ACS_VLINE и ACS_HLINE соответственно.

Отметим, что аргументы vertch и horch имеют тип chtype, а не char.



erase ( )
werase (win)

Эти процедуры помещают пробелы во все позиции окна.

Отметим, что erase является макросом.

clear ( )
wclear (win)

Эти процедуры совпадают с erase ( ) и werase (win), но они еще дополнительно вызывают процедуру clearok. Вследствие этого при следующем обращении к wrefresh экран будет очищен и перерисован.

Отметим, что clear является макросом.

clrtobot ( )
wclrtobot (win)

Все строки ниже позиции курсора, а также текущая строка правее позиции курсора, включая саму позицию, очищаются.

Отметим, что clrtobot является макросом.

clrtoeol ( )
wclrtoeol (win)

Текущая строка правее позиции курсора, включая саму позицию, очищается.

Отметим, что clrtoeol является макросом.

delay_output (ms)

При выводе сделать паузу на ms миллисекунд. Не рекомендуется, однако, интенсивно применять эту процедуру. Предпочтительнее использовать символы-заполнители, а не паузу процессора.

delch ( )
wdelch (win)
mvdelch (y, x)
mvwdelch (win, y, x)

Текущий символ в окне удаляется. Все символы справа от него сдвигаются на единицу влево, в последнюю позицию записывается пробел. Позиция курсора не изменяется (может быть только предварительное перемещение в (y, x)). Описываемые процедуры не требуют использования аппаратной функции удаления символа.

Отметим, что delch и mvdelch являются макросами.

deleteln ( )
wdeleteln (win)

Текущая строка окна удаляется. Все строки ниже удаленной поднимаются вверх. Последняя строка окна очищается. Позиция курсора не меняется. Описываемые процедуры не требуют использования аппаратной функции удаления строки.

Отметим, что deleteln является макросом.

getyx (win, y, x)

Позиция курсора в окне помещается в аргументы y и x. Поскольку getyx является макросом, перед именами аргументов не требуется знак &.

getbegyx (win, y, x)
getmaxyx (win, y, x)

В духе getyx эти процедуры позволяют получить координаты левого верхнего угла окна на экране и его размеры.

Отметим, что getbegyx и getmaxyx являются макросами.

insch (ch)
winsch (win, ch)
mvinsch (y, x, ch)
mvwinsch (win, y, x, ch) Символ ch вставляется перед текущим. Все символы правее текущего, включая и сам текущий символ, сдвигаются вправо, при этом, возможно, самый правый символ строки пропадает. Позиция курсора не изменяется (может быть только предварительное перемещение в (y,x)). Описываемые процедуры не требуют использования аппаратной функции вставки символа.

Отметим, что ch имеет тип chtype, а не char, а insch, mvinsch и mvwinsch являются макросами.



insertln ( )
winsertln (win)

Перед текущей строкой окна вставляется пустая. Нижняя строка окна теряется. Описываемые процедуры не требуют использования аппаратной функции вставки строки.

Отметим, что insertln является макросом.

move (y, x)
wmove (win, y, x)

Текущая позиция, соответствующая окну, перемещается в строку y, колонку x. Физический курсор на экране не перемещается до тех пор, пока не будет вызвана процедура refresh. Позиция указывается относительно левого верхнего угла окна, имеющего координаты (0, 0).

Отметим, что move является макросом.

overlay (srcwin, dstwin)
overwrite (srcwin, dstwin)

Эти процедуры помещают окно srcwin поверх окна dstwin, то есть текст из srcwin копируется в dstwin. Окна не обязаны иметь одинаковый размер, копируется только пересекающаяся часть. Разница между двумя процедурами заключается в том, что overlay не копирует пробелы, оставляя на этом месте то, что было, а overwrite производит полное копирование.

copywin (srcwin, dstwin, sminrow, smincol, dminrow, dmincol, dmaxrow, dmaxcol, overlay)

Эта процедура дает существенно больше, чем процедуры overlay и overwrite. Как и в процедуре prefresh, задается прямоугольник в окне-приемнике (dminrow, dmincol, dmaxrow, dmaxcol) и левый верхний угол в окне-источнике (sminrow, smincol). Если аргумент overlay не равен 0, то пробелы не копируются, как в overlay.

printw (fmt[, arg...])
wprintw (win, fmt[, arg...])
mvprintw (y, x, fmt[, arg...])
mvwprintw (win, y, x, fmt[, arg...])

Эти процедуры аналогичны , только сгенерированная цепочка символов выводится с помощью waddstr в указанное окно.

vwprintw (win, fmt, varglist)

Эта процедура аналогична . Она вызывает wprintw с переменным списком аргументов. Третий аргумент, varglist, является указателем на список аргументов, как это определено в . O работе со списком аргументов переменной длины см. и .

scroll (win)

Окно роллируется вверх на одну строку. При этом изменяются строки и в структурах данных, описывающих окно. Для оптимизации, в окне stdsrc, если роллируется окно целиком, одновременно роллируется и физический экран.



touchwin (win)
touchline (win, start, count)

Забыть информацию о том, какие части окна изменились (эта информация используется для оптимизации вывода). Считать, что все окно требует перерисовки. Это часто бывает необходимо для пересекающихся окон, так как изменение одних окон вызывает изменение и других, но информация об этих изменениях в структурах данных других окон не отражается. Обращение к touchline говорит о том, что изменилось count строк окна, начиная со строки с номером start.

Ввод

getch ( )
wgetch (win)
mvgetch (y, x)
mvwgetch (win, y, x)

С клавиатуры терминала, связанного с окном, считывается символ. Если установлен режим NODELAY и символ еще не введен, возвращается значение ERR. Если установлен режим DELAY, программа приостанавливается до тех пор, пока система не передаст ей введенный текст. В зависимости от режима CBREAK это будет после ввода одного символа (режим CBREAK) или после ввода строки целиком (режим NOCBREAK). В режиме HALF-DELAY программа приостанавливается до тех пор, пока не будет введен символ или истечет указанный период времени. Если не установлен режим NOECHO, вводимые символы отображаются в соответствующем окне. Между обращениями к move и getch, вызываемыми из процедур mvgetch и mvwgetch, не делается refresh.

Используя процедуры getch, wgetch, mvgetch и mvwgetch, нельзя устанавливать одновременно режимы NOCBREAK и ECHO. Результаты могут оказаться непредсказуемыми и зависят от состояния, в котором находится драйвер .

Если предварительно была вызвана процедура keypad (win, TRUE) и нажата функциональная клавиша, то вместо посланных ею кодов будет возвращено значение, соответсвующее клавише (см. keypad в Установке режимов ввода). Функциональные клавиши определены в <curses.h>, их значения начинаются с числа 0401, а имена - с префикса KEY_. Если поступает символ, который может быть началом функциональной клавиши (например, ESC), curses запускает таймер. Если за ожидаемое время не будет получено продолжения, то символ передается сам по себе, в противном случае возвращается значение функциональной клавиши. Поэтому на многих терминалах после нажатия клавиши ESC необходимо немного подождать, прежде чем эта клавиша попадет программе. По этой же причине не рекомендуется программистам использовать клавишу ESC как односимвольную команду программе. См. также notimeout ниже.

Отметим, что getch, mvgetch и mvwgetch являются макросами.



getstr (str)
wgetstr (win, str)
mvgetstr (y, x, str)
mvwgetstr (win, y, x, str)

Процедура getch вызывается до тех пор, пока не будет нажата клавиша перевода строки, возврата каретки или клавиша "ввод". Результат помещается в область памяти, на которую указывает аргумент str. При вводе обрабатываются управляющие символы erase и kill. Так же как и в процедуре mvgetch, между обращениями к move и getstr, вызываемыми из процедур mvgetstr и mvwgetstr, не делается refresh.

Отметим, что getstr, mvgetstr и mvwgetstr являются макросами.

flushinp ( )

Проигнорировать все символы, введенные пользователем к этому моменту, но еще не считанные программой.

ungetch (c) Положить символ c обратно во входную очередь, так что он будет считан следующим вызовом wgetch.

chtype inch ( )
chtype winch (win)
chtype mvinch (y, x)
chtype mvwinch (win, y, x)

Эти процедуры возвращают символ (типа chtype), расположенный в текущей позиции указанного окна, вместе с имеющимися атрибутами (как логическое ИЛИ атрибутов и кода символа). Константы A_CHARTEXT и A_ATTRIBUTES, определенные в файле <curses.h>, можно использовать в операции "логическое И" (& в языке C) для выделения из возвращаемого значения только кода символа или только атрибутов.

Отметим, что inch, winch, mvinch и mvwinch являются макросами.

scanw (fmt[, arg...])
wscanw (win, fmt[, arg...])
mvscanw (y, x, fmt[, arg...])
mvwscanw (win, y, x, fmt[, arg...])

Эти процедуры аналогичны и по аргументам, и по возвращаемым значениям. В окне вызывается процедура wgetstr, а полученная цепочка символов сканируется в соответствии с указанным форматом.

vwscanw (win, fmt, varglist)

Эта процедура аналогична процедуре vwprintw, описанной выше. Она вызывает wscanw с переменным списком аргументов. Третий аргумент, varglist, является указателем на список аргументов, как это определено в . O работе со списком аргументов переменной длины см. и .

Установка режимов вывода

Следующие процедуры устанавливают режимы вывода для пакета curses. Все режимы при инициализации равны FALSE. Нет необходимости перед вызовом endwin возвращать все режимы в состояние FALSE.



clearok (win, bf)

Если значение аргумента bf равно TRUE, то следующий вызов wrefresh приведет к очистке окна и полной его перерисовке. Это удобно, если содержимое окна испортилось, кроме того, иногда полная перерисовка окна дает лучший визуальный эффект, чем частичная.

idlok (win, bf)

Если значение аргумента bf равно TRUE, то процедуры пакета curses для вставки и удаления строк будут использовать аппаратные команды (если они имеются). Если bf равно FALSE, то curses этими командами пользуется редко (команды вставки/удаления символов используются всегда). Этот режим следует использовать только если Вам действительно нужно вставлять и удалять строки (например, в программе - экранном редакторе). По умолчанию этот режим имеет значение FALSE, так как применение аппаратной вставки и удаления строк в программах, в которых это реально не требуется, приводит к неприятным визуальным эффектам. Если использование аппаратных команд запрещено, то curses перерисовывает изменившуюся часть всех строк.

leaveok (win, bf)

Обычно аппаратный курсор находится в текущей позиции текущего окна. Если bf равно TRUE, то разрешается оставлять курсор там, где его оставило последнее изменение экрана. Это удобно для программ, не использующих позицию курсора, так как уменьшает необходимость в его перемещениях. Если используется этот режим, то курсор делается невидимым (если терминал это позволяет).

setscrreg (top, bot)
wsetscrreg (win, top, bot)

Эти процедуры позволяют установить роллируемую область в окне. Аргументы top и bot - это номера верхней и нижней строки задаваемой области (номер верхней строки окна равен 0). Если задана область роллирования и установлен режим scrollok, то из нижней строки окна происходит роллирование только заданной области. Описываемые процедуры не требуют использования аппаратного роллирования полос, как это имеет место в терминале DEC vt100. Однако, если установлен режим idlok и терминал умеет роллировать полосы или вставлять и удалять строки, то эти возможности будут использованы процедурами вывода.

Отметим, что обе процедуры setscrreg и wsetscrreg являются макросами.



scrollok (win, bf)

Процедура служит для формирования режима обработки ситуации, когда курсор в окне выходит за границы роллируемой области из-за перевода строки в последней строке области или вывода символа в последнюю позицию последней строки. Если этот режим не установлен (значение bf равно FALSE), курсор остается в последней строке на том же месте. Если режим установлен (значение bf равно TRUE) происходит вызов wrefresh, а затем окно и экран физического терминала роллируются на одну строку вверх. Обратите внимание, что для того, чтобы физический экран роллировался, необходимо установить режим idlok.

nl ( )
nonl ( )

Эти процедуры управляют преобразованием символа перевода строки в возврат каретки и переход к новой строке при выводе и символа возврата каретки в перевод строки при вводе. По умолчанию эти преобразования выполняются. При отмене этих преобразований процедурой nonl пакет curses получает возможность осуществлять более быстрые перемещения курсора, пользуясь переходом к новой строке.

Установка режимов ввода

Следующие процедуры устанавливают режимы ввода для пакета curses. Установка режимов включает в себя обращение к системному вызову и может оказывать влияние на другие режимы. Нет необходимости перед выполнением endwin возвращать все режимы в начальное состояние.

cbreak ( )
nocbreak ( )

Эти две процедуры соответственно устанавливают и сбрасывают режим CBREAK. В режиме CBREAK вводимые символы сразу передаются программе, обработка символов erase и kill не производится. В режиме NOCBREAK драйвер буферизует вводимые символы до тех пор, пока не будет введен символ перевода строки или возврата каретки. Символы прерывания и управления передачей в этом режиме не затрагиваются [см. ]. Начальное состояние терминала может быть любым, поэтому, если требуется, необходимо явно вызвать процедуру cbreak или nocbreak. Большинство интерактивных программ, использующих curses, устанавливают режим CBREAK.

Отметим, что процедура cbreak устанавливает режим raw. См. также getch в разделе Ввод по поводу того, как описываемые процедуры взаимодействуют с процедурами echo и noecho.



echo ( )
noecho ( )

Эти процедуры управляют тем, отображаются ли на экране символы, вводимые по getch. Эхо, выполняемое драйвером, всегда отменено, но при инициализации для getch устанавливается режим ECHO, то есть вводимые символы отображаются. Авторы большинства интерактивных программ предпочитают самостоятельно отображать вводимые символы в отдельной части экрана, либо не отображать их вовсе, для чего вызывается процедура noecho. См. getch в разделе Ввод по поводу того, как описываемые процедуры взаимодействуют с процедурами cbreak и nocbreak.

halfdelay (tenths)

Этот режим похож на режим CBREAK тем, что вводимые символы сразу передаются программе. Однако если ни одна клавиша не была нажата на протяжении tenths десятых долей секунды, будет возвращено значение ERR. Число tenths должно быть от 1 до 255. Для выключения этого режима используется процедура nocbreak.

intrflush (win, bf)

Если установлен этот режим, то при нажатии одного из символов прерывания (interrupt, break, quit) весь ввод, накопленный в драйвере , будет проигнорирован, что позволяет быстро отреагировать на прерывание. Правда, состояние экрана при этом может перестать соответствовать представлению, имеющемуся в структурах curses. Отмена этого режима предотвращает очистку буферов в драйвере. Начальное значение данного режима зависит от состояния драйвера. Аргумент win игнорируется.

keypad (win, bf)

Эта процедура устанавливает режим обработки функциональных клавиш на клавиатуре терминала. Если этот режим установлен, то при нажатии пользователем функциональной клавиши (например, стрелки влево), процедура wgetch возвратит соответствующее этой клавише значение (KEY_LEFT). Если данный режим не установлен, то последовательности кодов, посылаемых функциональными клавишами, не преобразуются, программа может обрабатывать их сама. Если функциональная клавиатура терминала может находиться как в режиме передачи, так и в локальном режиме, вызов процедуры keypad приводит к переводу клавиатуры в режим передачи при первом обращении к wgetch.



meta (win, bf)

Если этот режим установлен, все 8 бит символов, вводимых с клавиатуры, передаются программе, иначе процедура wgetch сбрасывает восьмой бит. Чтобы режим META работал правильно, необходимо, чтобы в базе данных для данного терминала была задана характеристика km (клавиша МЕТА).

nodelay (win, bf)

Этот режим не позволяет процедуре wgetch уходить в ожидание. Если этот режим установлен и нет готового символа, то возвращается значение ERR. Если режим не установлен, то wgetch ожидает ввода следующего символа.

notimeout (win, bf)

При интерпретации вводимых управляющих последовательностей процедура wgetch запускает таймер, ожидая следующего символа. Если вызвать процедуру notimeout (win, TRUE), то запуска таймера не происходит. Таймер используется для различения последовательностей, приходящих от функциональных клавиш, и последовательных нажатий обычных клавиш.

raw ( )
noraw ( )

Устанавливается или отменяется режим RAW. Режим RAW аналогичен режиму CBREAK, вводимые символы сразу передаются программе. Отличие заключается в том, что символы прерывания (interrupt, quit), а также символы управления передачей (xon, xoff) передаются без интерпретации, сигналы при этом не генерируются. Режим RAW устанавливает восьмибитный ввод и вывод. Реакция на клавишу BREAK зависит от других бит в характеристиках драйвера , эти биты пакетом curses не устанавливаются.

typeahead (fildes)

Обычно curses выполняет следующий вид оптимизации. Перед выводом на экран проверяется, нет ли уже нажатых клавиш, и, если есть, то вывод откладывается до следующего вызова refresh или doupdate. Это позволяет быстрее реагировать на последовательности команд. Обычно для проверки используется дескриптор файла, переданного в качестве аргумента процедуре newterm, или stdin, если инициализация проводилась с помощью initscr. Процедура typeahead позволяет заменить проверяемый файл на файл с дескриптором fildes. Если fildes равен -1, то описанная выше оптимизация не выполняется.

Отметим, что fildes - это дескриптор файла, а не указатель на структуру типа FILE.



Запросы к оборудованию

baudrate ( )

Скорость вывода на терминал. Возвращается целое число, означающее скорость передачи в битах в секунду, например 9600.

char erasechar ( )

Возвращается текущее значение символа erase.

has_ic ( )

Истина, если терминал умеет вставлять и удалять символы.

has_il ( )

Истина, если терминал умеет вставлять и удалять строки.

char killchar ( )

Возвращается текущее значение символа kill.

char *longname ( )

Процедура возвращает указатель на статическую область, содержащую словесное описание данного терминала. Максимальная длина словесного описания 128 символов. К данной процедуре можно обращаться только после initscr или newterm. Статическая область изменяется при последующих вызовах newterm и не восстанавливается вызовами set_term, поэтому, если предполагается пользоваться словесными описаниями для нескольких терминалов, то описание необходимо скопировать в другое место.

Программируемые метки

Пакет curses дает доступ к программируемым меткам на клавишах, которые имеются на некоторых терминалах. Для тех терминалов, на которых нет программируемых меток, имеется возможность их эмуляции в верхней строке окна stdscr, при этом уменьшается на единицу размер окна stdscr и значение переменной LINES. Curses поддерживает восемь меток по восемь символов каждая.

slk_init (labfmt)

Чтобы использовать программируемые метки, процедура slk_init должна быть вызвана раньше процедур initscr и newterm. Если процедура initscr будет использовать верхнюю строку экрана для меток, то аргумент labfmt задает их расположение в строке. Если значение labfmt равно 0, метки размещаются тремя группами 3-2-3, а если значение labfmt равно 1, то двумя группами 4-4.

slk_set (labnum, label, labfmt)

Аргумент labnum - это номер метки, от 1 до 8. Аргумент label представляет собой цепочку символов (длиной не более 8), которая помещается в виде метки. Пустая цепочка или адрес, равный NULL, задают пустую метку. Значения labfmt, равные 0, 1 или 2, говорят о том, что метка соответственно выровнена влево, центрирована или выровнена вправо.



slk_refresh ( )
slk_noutrefresh ( )

Эти процедуры соответствуют процедурам wrefresh и wnoutrefresh. Большинство программ вызывают slk_noutrefresh, так как обычно довольно скоро приходится вызывать wrefresh.

char *slk_label (labnum)

Возвращается текущее значение метки с номером labnum, из которого удалены начальные и хвостовые пробелы.

slk_clear ( )

Программируемые метки убираются с экрана.

slk_restore ( )

Программируемые метки, убранные с экрана процедурой slk_clear, восстанавливаются.

slk_touch ( )

При следующем обращении к slk_noutrefresh все программируемые метки будут выведены на экран заново.

Процедуры нижнего уровня

Следующие процедуры нижнего уровня дают доступ к различным возможностям пакета curses. Обычно эти процедуры вызываются из библиотечных процедур.

def_prog_mode ( )
def_shell_mode ( )

Сохранить текущие значения характеристик терминала, как значения, необходимые для выполнения самой программы (с пакетом curses) или программы shell (без пакета curses) для последующего восстановления процедурами reset_prog_mode и reset_shell_mode. Эти процедуры вызываются процедурой initscr.

reset_prog_mode ( )
reset_shell_mode ( )

Восстановить запомненные значения характеристик терминала для продолжения работы пакета curses или для запуска программы shell. Эти процедуры вызываются процедурами endwin и doupdate.

resetty ( )
savetty ( )

Эти процедуры запоминают и восстанавливают запомненные характеристики терминала. Процедура savetty запоминает характеристики в буфере, а resetty восстанавливает последние запомненные характеристики.

getsyx (y, x)

Аргументам y и x присваиваются значения координат курсора на виртуальном экране. Как и в getyx, перед именами переменных не нужно указывать &. Если установлен режим leaveok, то переменным присваиваются значения (-1,-1). Если верхние строки экрана были удалены с помощью процедуры ripoffline и полученные значения предполагается не просто передать процедуре setyx, а использовать еще как-то, то значение y должно быть скорректировано путем прибавления значения stdscr->_yoffset.

Отметим, что getsyx является макросом.



setsyx (y, x)

Виртуальный курсор устанавливается в позицию (y, x). Если оба значения y и x равны -1, то устанавливается режим leaveok. Две процедуры getsyx и setsyx созданы для того, чтобы библиотечные процедуры могли манипулировать окнами, не испортив текущей позиции курсора. Библиотечные процедуры вначале вызывают getsyx, затем производят манипуляции над окнами, вызывают для измененных окон wnoutrefresh, после чего вызывают setsyx и заканчивают вызовом doupdate.

ripoffline (line, init)

Эта процедура позволяет уменьшить размер экрана, ею пользуется процедура slk_init. Процедуру ripoffline необходимо вызывать раньше процедур initscr и newterm. Если значение line положительно, удаляется одна строка сверху окна sdtscr, если отрицательно - удаляется строка снизу. После этого из процедуры initscr вызывается процедура init с двумя аргументами: указателем на созданное окно единичной высоты и шириной этого окна в колонках. При вызове данной процедуры не гарантируется правильность глобальных переменных LINES и COLS (определенных в <curses.h>), кроме того, из этой процедуры нельзя обращаться к процедурам wrefresh и doupdate, но можно обращаться к wnoutrefresh.

Перед обращением к initscr или newterm процедуру ripoffline можно вызывать несколько раз (до пяти).

scr_dump (filename)

Текущее состояние виртуального экрана записывается в файл filename.

scr_restore (filename)

Текущее состояние виртуального экрана восстанавливается из файла filename, куда оно должно быть предварительно записано командой scr_dump. После восстановления необходимо вызвать процедуру doupdate для изображения восстановленного состояния.

scr_init (filename)

Содержимое файла filename используется для коррекции информации о том, что изображено на экране. Если данные пройдут проверку на корректность, то curses при следующей перерисовке экрана использует полученную информацию. Процедура scr_init обычно используется после initscr и после системного вызова для сохранения состояния экрана, сформированного другим процессом, который должен предварительно, после обращения к endwin, обратиться к scr_dump. Проверка на корректность заключается в проверке времени модификации файла с состоянием экрана, кроме того в базе данных для данного терминала должна присутствовать характеристика nrrmc.



curs_set (visibility)

Курсор делается невидимым, нормальным или более ярким, если значение visibility равно, соответственно, 0, 1 или 2.

draino (ms)

Подождать, пока весь сформированный вывод на экран не будет почти закончен, то есть до его окончания останется не более ms миллисекунд.

garbagedlines (win, begline, numlines)

Эта процедура сообщает пакету curses, что экран испорчен и должен быть перерисован. Это может быть использовано, например, экранными редакторами, имеющими команду для перерисовки отдельной строки. Подобная команда требуется, если терминал подсоединен по линии, на которой много шумов, причем полная перерисовка экрана приведет к еще большим шумам. Перерисовка одной строки дает возможность надеяться, что она будет исполнена правильно.

napms (ms)

Пауза на ms миллисекунд.

Процедуры уровня terminfo

Данные процедуры используются программами, которым требуется работа непосредственно с базой данных для отработки специфических возможностей терминалов, например, программирования функциональной клавиатуры. В остальных случаях рекомендуется пользоваться только процедурами пакета curses, описанными выше.

Вначале должна быть вызвана процедура setupterm (эта процедура автоматически вызывается процедурами initscr и newterm. В ней присваиваются значения всем переменным, определенным в . Значения переменным lines и columns присваиваются следующим образом: если определены переменные окружения LINES и COLUMNS, используются их значения. Иначе используются значения, заданные в базе данных .

Для того, чтобы программа имела доступ ко всем необходимым переменным, цепочкам, числам и флагам, в нее должны быть включены файлы <curses.h> и в указанном порядке. Параметризованные цепочки должны быть конкретизированы процедурой tparm. Все цепочки , включая цепочки, выходные для tparm, должны выводиться на экран процедурами tputs или putp. Перед завершением необходимо вызвать процедуру reset_shell_mode для восстановления характеристик терминала. Программы, в которых используется адресация курсора, должны вывести цепочку enter_ca_mode в начале работы и цепочку exit_ca_mode перед концом работы [см. ]. Программы, предусматривающие запуск порожденного процесса shell, должны вызвать процедуру reset_shell_mode и вывести цепочку exit_ca_mode перед запуском shell, а после завершения порожденного процесса необходимо вывести цепочку enter_ca_mode и вызвать процедуру reset_prog_mode. Обратите внимание на отличие этой процедуры от стандартной процедуры для пакета curses [см. endwin].



setupterm (term, fildes, erret) Читает базу данных , инициализирует структуры данных . Структуры управления выводом для пакета curses при этом не устанавливаются. Тип терминала задается аргументом term, являющемся цепочкой символов. Если значение term равно NULL, используется значение переменной окружения TERM. Вывод ведется в файл с дескриптором fildes. Если значение erret не равно NULL, то setupterm возвратит значение OK или ERR и поместит в переменную *erret код завершения. Код, равный 1, означает нормальное завершение, 0 означает, что терминал не найден в базе данных, -1 означает, что не удалось найти саму базу данных . Если значение erret равно NULL, то в случае наличия ошибок setupterm напечатает сообщения о них и завершит программу. Таким образом, самый простой вызов, при котором используются только подразумеваемые значение, выглядит следующим образом:

setupterm ((char *) 0, 1, (int *) 0)

Все переменные булева, числового и символьного типа размещаются в структуре типа TERMINAL. После успешного завершения процедуры setupterm глобальной переменной cur_term типа TERMINAL * присваивается значение указателя на заполненную структуру. Этот указатель может быть сохранен перед следующим вызовом setupterm. Повторный вызов setupterm размещает в памяти новую структуру и записывает новую информацию в новое место.

set_curterm (nterm)

Аргумент nterm имеет тип TERMINAL *. Процедура set_curterm присваивает переменной cur_term значение nterm, после этого все переменные получают значения, заданные для nterm.

del_curterm (oterm)

Аргумент oterm имеет тип TERMINAL *. Процедура del_curterm освобождает память, занятую структурой, на которую указывает oterm. Если oterm совпадает с cur_term, то после этого нельзя обращаться ни к одной переменной до тех пор, пока снова не будет вызвана процедура setupterm.

restartterm (term, fildes, erret)

То же, что и setupterm после восстановления памяти.

char *tparm (str, p1, p2, p3, p4, p5, p6, p7, p8, p9)

Подставляет в цепочку str аргументы p1, p2, ... p9. Возвращается указатель на цепочку с подставленными аргументами.



tputs (str, count, putc)

Добавляет, если надо, заполнитель к цепочке str и выводит ее. Цепочка str должна быть значением какой либо символьной переменной , либо результатом работы процедур tparm, tsgetstr, tigetstr или tgoto. Аргумент count задает количество строк, которые затрагиваются выводом; если оно неизвестно, задается 1. Аргумент putc - это процедура, аналогичная . Этой процедуре символы передаются последовательно.

putp (str)

Процедура, вызывающая tputs (str, 1, putchar).

vidputs (attrs, putc)

Выводит цепочку, переводящую терминал в режим визуализации символов с атрибутами attrs - комбинацией атрибутов, описанных ниже, в разделе АТРИБУТЫ. Символы передаются процедуре putc, аналогичной .

mvcur (oldrow, oldcol, newrow, newcol)

Процедура нижнего уровня для перемещения курсора.

Следующие процедуры возвращают значения характеристик, которые передаются им в качестве параметров, например xenl.

tigetflag (capname)

Если capname не является булевой характеристикой, возвращается значение -1.

tigetnum (capname)

Если capname не является числовой характеристикой, возвращается значение -2.

char *tigetstr (capname)

Если capname не является символьной характеристикой, возвращается значение (char*) -1.

char *boolnames [ ], *boolcodes [ ], *boolfnames [ ]
char *numnames [ ], *numcodes [ ], *numfnames [ ]
char *strnames [ ], *strcodes [ ], strfnames [ ]

Эти массивы, завершающиеся нулевыми байтами, содержат имена, коды termcap и длинные C-имена для каждой переменной .

Эмуляция termcap

Данные процедуры включены для того, чтобы упростить преобразование программ, использовавших библиотеку termcap. Параметры у них остались прежними, но теперь они эмулируются через базу данных .

tgetent (bp, name)

Найти элемент termcap для имени name. При эмуляции параметр bp игнорируется.

tgetflag (codename) Получить булево значение элемента codename.

tgetnum (codename)

Получить числовое значение элемента codename.

char *tgetnum (codename, area)

Получить символьное значение элемента codename. Если указатель area не равен NULL, то поместить то же значение в буфер, на который указывает *area, и продвинуть *area. Для вывода возвращенной цепочки символов необходимо использовать процедуру tputs.



char *tgoto (cap, col, row)

Подставить аргументы в указанный элемент. Для вывода возвращенной цепочки символов необходимо использовать процедуру tputs.

tputs (str, count, putc)

См. выше раздел Процедуры уровня terminfo.

Дополнительные процедуры

traceoff ( )
traceon ( )

Включить и выключить трассировочную печать отладочной версии библиотеки curses (/usr/lib/ libdcurses.a). Эта библиотека доступна только тем, кто приобрел лицензию на исходные тексты пакета curses.

unctrl (c)

Этот макрос преобразует символ в цепочку, содержащую его печатное представление. Управляющие символы изображаются в виде ^X. Печатные символы не изменяются.

Отметим, что unctrl - это макрос, определенный в файле <unctrl.h>, автоматически подключающемся к <curses.h>.

char *keyname (c)

Возвращается цепочка символов, соответствующая клавише c.

filter ( ) Данная процедура является одной из тех, которые должны вызываться перед initscr. Вызов этой процедуры означает, что в пределах пакета curses экран считается имеющим единичную высоту. В результате процедуры пакета не будут использовать возможностей терминала, подразумевающих знание номера строки на экране.

Использование curscr

Спецокно curscr может использоваться только несколькими процедурами. Если обратиться к процедуре clearok с аргументом curscr, то следующее обращение к wrefresh для любого окна приведет к очистке экрана и затем его полной перерисовке. Если обратиться к процедуре wrefresh с аргументом curscr, то экран немедленно очистится и перерисуется. Именно так большинство программ осуществляет перерисовку экрана. Если curscr указывается в качестве аргумента процедур overlay, overwite или copywin, то доступ производится к текущему состоянию виртуального экрана терминала.

Устаревшие процедуры

Следующие процедуры оставлены только для того, чтобы обеспечить совместимость с программами, написанными для старых версий пакета curses. Все они могут быть заменены указанными процедурами:
crmode ( ) заменяется на cbreak ( ) fixterm ( ) заменяется на reset_prog_mode ( ) gettmode ( ) заменяется на пустую процедуру nocrmode ( ) заменяется на nocbreak ( ) resetterm ( ) заменяется на reset_shell_mode ( ) saveterm ( ) заменяется на def_prog_mode ( ) setterm ( ) заменяется на setupterm ( )



АТРИБУТЫ

Следующие атрибуты визуализации, определенные в файле <curses.h>, могут передаваться в качестве аргументов процедурам attron, attroff и attrset. Их можно также добавить (операцией логическое ИЛИ) к символам, передаваемым процедуре addch.

A_STANDOUT

Режим, в котором лучше всего выводить сообщения, привлекающие внимание.

A_UNDERLINE

Подчеркивание.

A_REVERSE

Инверсия.

A_BLINK

Мерцание.

A_DIM

Пониженная яркость.

A_BOLD

Выделение - жирность или повышенная яркость.

A_ALTCHARSET

Альтернативный набор символов.

A_CHARTEXT

Битная маска для выделения кода символа [см. winch].

A_ATTRIBUTES

Битная маска для выделения атрибутов [см. winch].

A_NORMAL

Битная маска для сброса всех атрибутов (например, attrset (A_NORMAL)).

ФУНКЦИОНАЛЯНЫЕ КЛАВИШИ

Следующие коды функциональных клавиш, определенные в файле <curses.h>, могут быть возвращены процедурой getch, если установлен режим keypad. Отметим, что не все клавиши на конкретном терминале могут поддерживаться, особенно если они не посылают уникальных кодов, а также если определение клавиши отсутствует в базе данных .
Название Значение Описание KEY_BREAK 0401 клавиша прерывания (ненадежно) KEY_DOWN 0402 стрелка вниз KEY_UP 0403 стрелка вверх KEY_LEFT 0404 стрелка влево KEY_RIGHT 0405 стрелка вправо KEY_HOME 0406 HOME (стрелка влево-вверх) KEY_BACKSPACE 0407 забой KEY_F0 0410 F0 KEY_Fn KEY_F0+n Fn, есть место для 64 клавиш KEY_DL 0510 DL, удаление строки KEY_IL 0511 IL, вставка строки KEY_DC 0512 DC, удаление символа KEY_IC 0513 IC, вставка символа KEY_EIC 0514 выход из режима вставки KEY_CLEAR 0515 очистка экрана KEY_EOS 0516 очистка конца экрана KEY_EOL 0517 очистка конца строки KEY_SF 0520 роллирование на строку вперед KEY_SR 0521 роллирование на строку назад KEY_NPAGE 0522 следующая страница KEY_PPAGE 0523 предыдущая страница KEY_STAB 0524 установить позицию табуляции KEY_CTAB 0525 снять позицию табуляции KEY_CATAB 0526 снять все позиции табуляции KEY_ENTER 0527 ENTER, ввод KEY_SRESET 0530 мягкий сброс KEY_RESET 0531 жесткий сброс KEY_LL 0533 стрелка влево-вниз дополнительная клавиатура устроена следующим образом: A1
влево
C1 вверх
B2
вниз A3
вправо
C3 KEY_A1 0534 A1 KEY_A3 0535 A3 KEY_B2 0536 B2 KEY_C1 0537 C1 KEY_C3 0540 C3 KEY_BTAB 0541 обратная табуляция KEY_BEG 0542 BEG KEY_CANCEL 0543 CANCEL KEY_CLOSE 0544 CLOSE KEY_COMMAND 0545 CMD KEY_COPY 0546 COPY KEY_CREATE 0547 CREATE KEY_END 0550 END KEY_EXIT 0551 EXIT KEY_MARK 0554 MARK KEY_MESSAGE 0555 MESSAGE KEY_MOVE 0556 MOVE KEY_NEXT 0557 NEXT KEY_OPEN 0560 OPEN KEY_OPTIONS 0561 OPTIONS KEY_PREVIOUS 0562 PREVIOUS KEY_REDO 0563 REDO KEY_REFERENCE 0564 REFERENCE KEY_REFRESH 0565 REFRESH KEY_REPLACE 0566 REPLACE KEY_RESTART 0567 RESTART KEY_RESUME 0570 RESUME KEY_SAVE 0571 SAVE KEY_SBEG 0572 SHIFT+BEG KEY_SCANCEL 0573 SHIFT+CANCEL KEY_SCOMMAND 0574 SHIFT+COMMAND KEY_SCOPY 0575 SHIFT+COPY KEY_SCREATE 0576 SHIFT+CREATE KEY_SDC 0577 SHIFT+"удалить символ" KEY_SDL 0600 SHIFT+"удалить строку" KEY_SELECT 0601 SELECT KEY_SEND 0602 SEND KEY_SEOL 0603 SHIFT+EOL KEY_SEXIT 0604 SHIFT+EXIT KEY_SFIND 0605 SHIFT+FIND KEY_SHELP 0606 SHIFT+HELP KEY_SHOME 0607 SHIFT+HOME KEY_SIC 0610 SHIFT+"вставить символ" KEY_SLEFT 0611 SHIFT+"стрелка влево" KEY_SMESSAGE 0612 SHIFT+MESSAGE KEY_SMOVE 0613 SHIFT+MOVE KEY_SNEXT 0614 SHIFT+NEXT KEY_SOPTIONS 0615 SHIFT+OPTIONS KEY_SPREVIOUS 0616 SHIFT+PREVIOUS KEY_SPRINT 0617 SHIFT+PRINT KEY_SREDO 0620 SHIFT+REDO KEY_SREPLACE 0621 SHIFT+REPLACE KEY_SRIGHT 0622 SHIFT+"стрелка вправо" KEY_SRSUME 0623 SHIFT+RESUME KEY_SSAVE 0624 SHIFT+SAVE KEY_SSUSPEND 0625 SHIFT+SUSPEND KEY_SUNDO 0626 SHIFT+UNDO KEY_SUSPEND 0627 SUSPEND KEY_UNDO 0630 UNDO



ПСЕВДОГРАФИКА

Следующие переменные могут быть использованы для рисования рамочек на экране терминала с помощью процедуры waddch. Если соответствующий символ может быть выведен на терминал, значение переменной будет иметь установленный бит A_ALTCHARSET. В противном случае переменная имеет подразумеваемое значение. Отправной точкой для набора символов послужили возможности терминала vt100.
Имя Символ по умолчанию Описание ACS_ULCORNER + левый верхний угол ACS_LLCORNER + левый нижний угол ACS_URCORNER + правый верхний угол ACS_LRCORNER + правый нижний угол ACS_RTEE + правый край ACS_LTEE + левый край ACS_BTEE + нижний край ACS_TTEE + верхний край ACS_HLINE - горизонталь ACS_VLINE | вертикаль ACS_PLUS + крест ACS_S1 - надчеркивание ACS_S9 _ подчеркивание ACS_DIAMOND + алмаз ACS_CKBOARD : клетка ACS_DEGREE ' знак градуса ACS_PLMINUS # плюс/минус ACS_BULLET o перечисление ACS_LARROW < стрелка влево ACS_RARROW > стрелка вправо ACS_DARROW v стрелка вниз ACS_UARROW ^ стрелка вверх ACS_BOARD # квадраты ACS_LANTERN # фонарик ACS_BLOCK # сплошной блок

ДИАГНОСТИКА

Все процедуры, для которых при описании не указано возвращаемое значение, возвращают целое значение OK при успешном завершении и ERR при неудаче.

Все макросы возвращают значение то же, что и соответствующие w-процедуры, кроме setscrreg, wsetscrreg, getsyx, getyx, getbegy, getmaxyx, возвращаемые значения которых описаны выше.

В случае ошибки результат процедур, возвращающих значения-указатели, равен (тип *) NULL.

СЮРПРИЗЫ

В настоящее время при использовании пакета curses непрерывно производится проверка ввода путем чтения без ожидания и возврата символа обратно, если он вдруг оказался прочитанным. Проверка ввода начинается после первого вызова wgetch. В дальнейшем, когда появится соответствующая поддержка со стороны ядра операционной системы, это будет изменено. Программы, которые перемешивают ввод от пакета curses и свой собственный, должны вызвать typeahead (-1) для отключения проверки ввода.

Аргумент функции napms в настоящее время округляется до ближайшего целого числа секунд.

Процедура draino (ms) работает, только если значение ms равно 0.

ПРЕДОСТЕРЕЖЕНИЯ



Для версии операционной системы 3. 1 необходимо пользоваться пакетом curses версии 3.1. Программы, использовавшие пакет curses в операционной системе версии 2 для выполнения в операционной системе версии 3.1 требуют пересборки об ектных файлов с новой библиотекой libcurses.a версии 3.1. Если Ваша программа не пользуется новыми возможностями пакета версии 3.1, то об ектные файлы можно собрать с библиотекой версии 2 и выполнять в операционной системе версии 2.

Библиотеки и используют одинаковые имена процедур erase и move, причем версии пакета curses являются макросами. Если Вам требуется работать с обеими библиотеками, то соответствующие фрагменты нужно поместить в разные исходные файлы или использовать в тексте, работающем с пакетом , директивы #undef move и #undef erase.

Между вызовами initscr и endwin выводить на экран можно только с помощью процедур пакета curses. Использование для этих целей процедур стандартного пакета ввода/вывода [см. ] может привести к непредсказуемым результатам.

СМ. ТАКЖЕ

, , , , , , , , , , .

, в Справочнике пользователя.

, в Справочнике администратора.









CUSERID(3S)


НАЗВАНИЕ

cuserid - получение входного имени пользователя

СИНТАКСИС

#include <stdio.h>

char *cuserid (s) char *s;

ОПИСАНИЕ

Функция cuserid позволяет получить входное имя пользователя, запустившего текущий процесс, в виде цепочки символов. Если значение аргумента s равно NULL, то входное имя размещается во внутренней статической области, адрес которой возвращается функцией. При каждом вызове функции содержимое статической области обновляется. Если значение s отлично от NULL, то s считается указателем на символьный массив, содержащий по крайней мере L_cuserid элементов; входное имя пользователя помещается в этот массив, а функция возвращает значение s. Константа L_cuserid определена во включаемом файле <stdio.h>.

СМ. ТАКЖЕ

, .

ДИАГНОСТИКА

Если входное имя пользователя не найдено и значение s равно NULL, то функция cuserid возвращает NULL; если же значение s отлично от NULL, то в s[0] помещается нулевой байт (\0).



CUSTOM(8)


НАЗВАНИЕ

custom - инсталлирует особые части системы XENIX.

СИНТАКСИС

custom [-odt] [irl [package]] [-m device] [-f [file]]

ОПИСАНИЕ

С помощью custom вы можете оптимизировать установку системы XENIX, добавляя или удаляя ее части. custom предназначена только для привилегированного пользователя и может быть вызвана как в интерактивном режиме, так и из командной строки с несколькими опциями.

Файлы выделяются или удаляются пакетами (packages). Пакет - это набор отдельных файлов. Пакеты группируются в комплекты (sets).

По умолчанию всегда доступны следующие комплекты:

Операционная система Расширенная система Система текстовой обработки

Вы можете установить также дополнительные комплекты. Вы можете просмотреть список доступных пакетов с помощью команды custom, как показано далее.

ИСПОЛЬЗОВАНИЕ

Для использования custom в интерактивном режиме введите:

custom

Вы увидите список комплектов. Например:

1. Operating System 2. Development System 3. Text Processing System 4. Add a Supported Product

Программа предлагает вам выбрать комплект программ для работы. Если файлы данных для этого комплекта еще не установлены на жестком диске, custom запрашивает у вас гибкий диск, на котором они есть и инсталлирует их. Вы можете увидеть также элементы меню для каждого продукта, добавленного предварительно с помощью опции "Add a Supported Product". Если вы добавляете новый продукт, то вам будет предложено вставить носитель 1 дистрибуции этого продукта, и custom выделит необходимую информацию для его поддержания.

После выбора допустимого комплекта вы увидите следующее меню:

1. Install one or more packages 2. Remove one or more packages 3. List the files in the package 4. Install a single file 5. Select a new set to customize 6. Display a current disk usage 7. Help

Когда вы сделаете выбор, вам будет предложено ввести дальнейшую информацию. Далее приведены опции и описание соответствующей реакции:

Install

Выдает подсказку для выбора одного или нескольких имен пакетов.


Определяет, какие инсталляционные тома (дистрибутивных носителей) требуются, и затем обеспечивает подсказки для использования правильных томов. Если в командной строке задается несколько пакетов, то их имена должны быть разделены пробелами.

Эта опция, а также опции 2 и 3,высвечивают список всех доступных пакетов в выбранном на данный момент комплекте. В каждой строке приводится следующая информация: имя пакета, установлен ли пакет полностью (частично или совсем не установлен), размер пакета (в 512-байтовых блоках), и еще одна строка отводится на описание содержимого пакета. Remove


Выдает подсказку для выбора одного или нескольких имен пакетов.

Удаляет выбранные файлы в заданном пакете. Если в командной строке задается несколько пакетов, то их имена должны быть разделены пробелами.

Высвечивает доступные пакеты (смотрите опцию "1"). List files in a package


Перечисляет все файлы в заданном пакете.

Выдает подсказку для выбора одного или нескольких имен пакетов. Введите имена нужных пакетов.

Высвечивает доступные пакеты (смотрите опцию "1"). Install a single file


Выделяет заданный файл из комплекта дистрибуции.

Имя файла должны быть полным по отношению к корневому каталогу "/". Select a new set


Позволяет работать с другим комплектом программ, отличным от текущего. Display current disk usage


Выдает информацию по использованию текущего диска. Help


Выдает страницу вспомогательных указаний для работы с custom.

Опции

Для полностью неинтерактивного применения custom требуется задание трех аргументов:

Идентификатор комплекта (-o,-d или -t)

Команда ( -i,-r,-l или -f)

Одно или несколько имен пакетов или имя файла

Если в командной строке не задан хотя бы один аргумент, custom запрашивает отсутствующую информацию.

Может быть задана только одна из опций -o, -d или -t. Они обозначают следующее:

-o Операционная система -d Расширенная система -t Система текстовой обработки

Может быть задана только одна из опций -i, -r, -l или -f, вслед за которой должен следовать аргумент соответствующего типа (одно или несколько имен пакетов или имя файла). Эти опции задают следующее:



-i установка заданного пакета(-ов) -r удаление заданного пакета(-ов) -l перчисление файлов в заданном пакете(-ах) -f Установка заданного файла

Флаг - m позволяет задать устройство промежуточных носителей. По умолчанию используется /dev/install (это всегда 0-е устройство, например /dev/fd00). Эта опция очень полезна, когда 5.25-дюймовый дисковод соответствует устройству /dev/fd0, а 3.5-дюймовый дисковод - устройству .dev.fd1, в то время как нужно инсталлировать 3.5-дюймовый носитель. Например:

custom -m /dev/rfd196ds9

перебивает установку устройства по умолчанию и задает использование устройства, указанного с опцией -m.

ФАЙЛЫ

/etc/base.perms /etc/soft.perms /etc/text.perms /etc/perms/*

СМ. ТАКЖЕ

, , ,

ПРИМЕЧАНИЕ

Если вы наращиваете какую-либо часть системы, то custom определяет, какую версию вы используете, и просит вас вставить тот гибкий диск, который осуществит модификацию файлов данных. Аналогично, если вы вставите диск с другим продуктом или не с тем номером, то вам будет предложено снова вставить правильный диск.









CUT(1)


НАЗВАНИЕ

cut - команда выборки отдельных полей из строк файла

СИНТАКСИС

cut -cсписок [файл ...] cut -fсписок [-dсимвол] [-s] [файл ...]

ОПИСАНИЕ

Команда cut используется для выборки колонок из таблицы или полей из каждой строки файла; если применить терминологию баз данных, команда cut выполняет операцию проекции отношения. Поля, специфицированные списком, могут быть фиксированной длины, то есть расположенные как на перфокарте (опция -c), или переменной длины, изменяющейся от строки к строке; в этом случае границей поля является символ-разделитель, например, символ табуляции (опция -f). Команду можно использовать как фильтр: если не указано ни одного файла или задано имя -, используется стандартный ввод. Результат всегда поступает на стандартный вывод.

Смысл опций команды cut таков:

список Список целых номеров полей в возрастающем порядке, перечисленных через запятую; возможен символ - для указания интервалов; например, 1,4,7; 1-3,8; -5,10 (сокращение для 1-5,10); 3 (обозначение для интервала от 3 до последнего поля). -cсписок Список, следующий за -c (без пробела), специфицирует позиции символов (например, опция -c1-72 задает первые 72 символа каждой строки). -fсписок Список, следующий за -f (без пробела), является списком номеров полей; предполагается, что поля разделены в файле символом-разделителем (см. опцию -d); например, -f1,7 копирует только первое и седьмое поля. Если не задана опция -s, то строки, не содержащие разделителей, копируются в результат без всякой обработки (используется для ведения подзаголовков таблиц). -dсимвол Символ, следующий за -d (без пробела), является разделителем полей (только в случае опции -f). По умолчанию разделителем является символ табуляции. Пробел или другие символы, имеющие специальное значение для интерпретатора команд shell, должны заключаться в кавычки. -s Игнорировать строки без символов-разделителей в случае опции -f. Если опция не задана, то строки без разделителей копируются в результат без обработки.

Одна из опций -c или -f должна быть задана обязательно.


Для осуществления горизонтальной проекции содержимого файла по контексту используйте команду ; для горизонтального соединения файлов - команду . Чтобы переупорядочить столбцы в таблице, используйте команды cut и paste.

ПРИМЕРЫ



Поставить в соответствие идентификаторам пользователей их входные имена:

cut -d: -f1,3 /etc/passwd

Присвоить переменной name входное имя текущего пользователя:

name=`who am i | cut -f1 -d" "`

СМ. ТАКЖЕ
, .

ДИАГНОСТИКА

ERROR: line too long Строка имеет более 511 символов или полей. ERROR: bad list for c/f option Не задана опция -c или -f или неверно специфицирован список. Ошибки не происходит, если строка имеет меньше полей, чем указано в списке. ERROR: no fields Список пуст. ERROR: no delimeter После опции -d не задан символ. ERROR: cannot handle multiple adjacent backspaces Смежные символы забоя не могут быть корректно обработаны. WARNING: cannot open файл Файл либо не доступен на чтение, либо не существует. Если задано несколько файлов, обработка продолжается.










CXREF(1)


НАЗВАНИЕ

cxref - построение таблицы перекрестных ссылок для C-программ

СИНТАКСИС

cxref [-c] [-w число] [-o файл] [-s] [-t] файл ...

ОПИСАНИЕ

Команда cxref анализирует набор C-файлов и пытается построить таблицу перекрестных ссылок. Cxref использует специальную версию препроцессора cpp, чтобы включить в таблицу имена, определенные с помощью директив #define. Команда cxref выдает на стандартный вывод листинг со всеми именами (автоматическими, статическими и глобальными) по каждому файлу отдельно, или, при наличии опции -c, по всем файлам вместе. Номер строки, содержащей определение имени, помечается звездочкой.

В дополнение к опциям -D, -I и -U [которые cxref трактует так же, как ], допускаются следующие опции:

-c Вывести совместную таблицу перекрестных ссылок по всем исходным файлам. -w число Форматировать выдачу, чтобы длина строк не превышала заданное десятичное число позиций. Если число меньше 51 или не указано вовсе, длина строк полагается равной 80. -o файл Направить результаты в указанный файл. -s Работать молча, не сообщая имен входных файлов. -t Форматировать выдачу на ширину в 80 позиций.

ФАЙЛЫ

LLIBDIR Обычно /usr/lib. LLIBDIR/xcpp Специальная версия препроцессора к C.

СМ. ТАКЖЕ
, .

ДИАГНОСТИКА

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

СЮРПРИЗЫ

Вхождение имени в список формальных аргументов макроопределения считается определением этого имени. В результате, если в программе есть строка

#include <stdio.h>

имена p и x будут считаться определенными много раз.

Операторы препроцессора

#undef

вызывают завершение работы с сообщением

SWITCH ERROR IN TMPSCAN: inafunc = no



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:

dirp = opendir ("."); while ((dp = readdir (dirp)) != NULL) if (strcmp (dp->d_name, name) == 0) { closedir (dirp); return FOUND; } closedir (dirp); return NOT_FOUND;

СМ. ТАКЖЕ

, .

ПРЕДОСТЕРЕЖЕНИЯ

Rewinddir реализован как макрос, поэтому к нему нельзя применить операцию вычисления адреса функции.

EXP(3M)


НАЗВАНИЕ

exp, log, log10, pow, sqrt - показательная, логарифмическая, степенная функции и функция извлечения квадратного корня

СИНТАКСИС

#include <math.h>

double exp (x) double x;

double log (x) double x;

double log10 (x) double x;

double pow (x, y) double x, y;

double sqrt (x) double x;

ОПИСАНИЕ

Функция exp возвращает e^x.

Функция log возвращает натуральный логарифм аргумента x. Значение x должно быть положительным.

Функция log10 возвращает логарифм по основанию 10 аргумента x. Значение x должно быть положительным.

Функция pow возвращает x^y. Если значение x равно 0, то значение y должно быть положительным. Если значение x отрицательно, то значение y должно быть целым.

Функция sqrt возвращает неотрицательное значение квадратного корня из x. Значение x не может быть отрицательным.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

Функция exp возвращает значение HUGE [см. ], если представление результирующего значения приводит к переполнению, и 0 - если к исчезновению порядка. В обоих случаях переменной errno присваивается значение ERANGE.

При неположительных аргументах функции log и log10 возвращают значение -HUGE и переменной errno присваивается значение EDOM. Кроме того, в стандартный протокол выдается сообщение о выходе за границы области определения или, при x=0, о попадании в точку сингулярности.

Функция pow возвращает нулевое значение, а переменной errno присваивается значение EDOM в случаях:

Если x=0 и значение y неположительно. Если значение x отрицательно и y не является целым.

В обоих случаях в стандартный протокол будет выдано сообщение о выходе за границы области определения. Если представление результирующего значения функции pow приводит к переполнению или к исчезновению порядка, то pow возвращает соответственно +HUGE, -HUGE или 0. Переменной errno присваивается значение ERANGE.

Функция sqrt возвращает нулевое значение, а переменной errno присваивается значение EDOM в случае, если x отрицательно. В стандартный протокол будет выдано сообщение о выходе за границы области определения.

Изложенная процедура обработки ошибок может быть изменена посредством функции .



FERROR(3S)


НАЗВАНИЕ

ferror, feof, clearerr, fileno - опрос состояния потока

СИНТАКСИС

#include <stdio.h>

int ferror (stream) FILE *stream;

int feof (stream) FILE *stream;

void clearerr (stream) FILE *stream;

int fileno (stream) FILE *stream;

ОПИСАНИЕ

Функция ferror возвращает ненулевое значение, если ранее при операциях чтения/записи в поток stream фиксировалась ошибка ввода/вывода; в противном случае результат равен 0.

Функция feof возвращает ненулевое значение, если ранее при чтении из потока steram фиксировался конец файла; в противном случае результат равен 0.

Функция clearerr обнуляет индикаторы ошибок и конца файла для потока stream.

Функция fileno возвращает целое значение - дескриптор файла, ассоциированный с потоком stream; см. .

ПРИМЕЧАНИЯ

Ferror, feof, clearerr, fileno реализованы в виде макросов; их нельзя определять или переопределять как функции.

СМ. ТАКЖЕ

, , .



FLOOR(3M)


НАЗВАНИЕ

floor, ceil, fmod, fabs - функции, вычисляющие ближай- шее целое снизу и сверху, остаток от деления нацело, абсолютное значение

СИНТАКСИС

#include <math.h>

double floor (x) double x;

double ceil (x) double x;

double fmod (x, y) double x, y;

double fabs (x) double x;

ОПИСАНИЕ

Функция floor возвращает максимальное целое (в форме вещественного числа двойной точности), не превышающее x.

Функция ceil возвращает минимальное целое, не меньшее x.

Функция fmod возвращает значение x, если y равно 0; в противном случае она возвращает число f того же знака, что x и притом такое, что

x = i * y + f

для некоторого целого i и |f| < |y|.

Функция fabs возвращает абсолютную величину x, |x|.

СМ. ТАКЖЕ

.



HYPOT(3M)


НАЗВАНИЕ

hypot, hypotf, cabs, cabsf - функция, вычисляющая эвклидово расстояние

СИНТАКСИС

#include <math.h>

double hypot (x, y) double x, y;

float hypotf(float x, float y)

struct {double x, y;} z;

double cabs(z)

struct {float x, y;} z;

float cabsf(z)

ОПИСАНИЕ

Функция hypot возвращает значение

sqrt (x*x + y*y)

которое вычисляется по методу, исключающему "паразитные" переполнения.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

Если к переполнению приводит попытка представления корректного результирующего значения, то функция hypot возвращает значение HUGE [см. ], а внешней переменной errno присваивается значение ERANGE.

Изложенная процедура обработки ошибок может быть изменена посредством функции



MALLOC(3C)


НАЗВАНИЕ

malloc, free, realloc, calloc - управление памятью

СИНТАКСИС

char *malloc (size) unsigned size;

void free (ptr) char *ptr;

char *realloc (ptr, size) char *ptr; unsigned size;

char *calloc (nelem, elsize) unsigned nelem, elsize;

ОПИСАНИЕ

Функции malloc и free предоставляют простой универсальный механизм выделения и освобождения памяти. Функция malloc возвращает указатель на блок памяти размером не менее size байт, который можно использовать в произвольных целях.

Аргументом функции free является указатель на блок памяти, предварительно выделенный с помощью функции malloc; после выполнения free эта часть памяти может быть выделена вновь, но ее содержимое теряется.

В случае выхода за границы блока, выделенного функцией malloc, а также при вызове функции free с аргументом, не являвшимся результатом malloc, эффект будет непредсказуемым.

Функция malloc выделяет память из первого достаточно большого непрерывного блока свободной памяти, просматривая все блоки по циклу, начиная с последнего выделенного или освобожденного. Попутно смежные свободные блоки об единяются в один больший свободный блок. Если не нашлось подходящего блока, то вызывается sbrk [см. ], в результате чего сдвигается верхняя граница сегмента данных программы.

Функция realloc изменяет размер блока, на который указывает аргумент ptr, до величины в size байт и возвращает указатель на (возможно перемещенный) блок. Часть содержимого блока до наименьшего из нового и старого размеров не изменяется. Если блок размером size байт не удается разместить на прежнем месте, то вызывается malloc для выделения блока нужного размера, после чего данные из старого блока перемещаются на новое место.

Аргумент ptr функции realloc может указывать и на блок, освобожденный после последнего обращения к функциям malloc, realloc или calloc. Зная стратегию выделения памяти, последовательные вызовы функций malloc, free и realloc можно использовать для уплотнения памяти.

Функция calloc выделяет пространство для массива из nelem элементов, каждый размером elsize байт, и заполняет массив нулями.

Границы выделяемых блоков памяти располагаются так, чтобы обеспечить (быть может после преобразования типов результирующих указателей) хранение произвольных об ектов.

СМ. ТАКЖЕ


, .

ДИАГНОСТИКА

Функции malloc, realloc и calloc возвращают пустой указатель NULL, если нет достаточного количества памяти или если обнаруживается нарушение структуры блоков (обычная причина такого нарушения - запись в память вне выделенных границ). В подобной ситуации не гарантируется сохранение содержимого блока, на который указывает аргумент ptr.

ПРИМЕЧАНИЯ

Когда захвачено много блоков памяти, время поиска свободного блока увеличивается. Если программа захватывает память, но не освобождает ее, то каждое последующее успешное выделение памяти происходит медленнее. Чтобы этого избежать, можно использовать более гибкую реализацию, см. .









MAPKEY(7)


НАЗВАНИЕ

mapkey, mapscrn, mapstr, convkey - Конфигурирует отображение экрана монитора.

ОПИСАНИЕ

mapscrn конфигурирует выходное отображение экрана монитора, на котором она вызывается. mapkey и mapstr конфигурируют отображение клавиатуры и строковых клавиш (т.е. функциональных клавиш) монитора (и мультиэкранов, если они имеются). mapkey может вычисляться только суперпользователей.

mapstr работает на поэкранной основе. Отображение строк на одном экране не влияет на какой-либо другой экран.

Если имя файла дано в строке аргумента, из содержимого входного файла конфигурируется соответствующая таблица отображения. Если не дается никакого файла, используются файлы по умолчанию в /usr/lib/keyboard и /usr/lib/console. Параметр -d вызывает считывание таблицы отображения из ядра вместо записанной ранее, и на стандартном выходе появляется отображение версии ASCII. Формат выхода подходит для входных файлов к mapscrn, mapkey или mapstr. Когда задан параметр -d, несуперпользователь может вычислять mapkey и mapstr.

Если заданы параметры -o или -x, mapkey выводит таблицу отображения в восьмиричном или десятиричном виде.

convkey переводит файл mapkey старого типа в текущий формат. Если отсутсвуют in или out, по умолчанию берутся stdin или stdout.

ПРИМЕЧАНИЯ

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

СМ. ТАКЖЕ

keyboard(HW), screen(HW),



SINH(3M)


НАЗВАНИЕ

sinh, cosh, tanh - гиперболические функции

СИНТАКСИС

#include <math.h>

double sinh (x) double x;

double cosh (x) double x;

double tanh (x) double x;

ОПИСАНИЕ

Функции sinh, cosh и tanh возвращают, соответственно, значения гиперболического синуса, косинуса и тангенса своего аргумента.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

Функции sinh и cosh возвращают значение HUGE (sinh может выдать -HUGE при отрицательных x), если представление результирующего значения приводит к переполнению. Переменной errno присваивается значение ERANGE.

Изложенная процедура обработки ошибок может быть изменена посредством функции .



Statmon, current, backup, state


НАЗВАНИЕ

Структуры файлов и каталогов statd

СИНТАКСИС

/etc/sm/record, /etc/sm/recover, /etc/sm/state

ОПИСАНИЕ

Файлы /etc/sm/record и /etc/sm/recover генерируются процессом statd. Каждое host-имя в /etc/sm/record представляет собой имя машины, управляемой процессом statd. Каждое host-имя в /etc/sm/recover представляет собой имя машины, на которую ссылается процесс statd при восстановлении.

Файл /etc/sm/state генерируется процессом statd для записи номера его версии. Этот номер увеличивается на единицу при каждом сбое или восстановлении.

СМ. ТАКЖЕ

,



TRIG(3M)


НАЗВАНИЕ

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. Кроме того, в стандартный протокол будет выдано сообщение о выходе за границы области определения.

Изложенная процедура обработки ошибок может быть изменена посредством функции .