НАЗВАНИЕ
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, указывает на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.
НАЗВАНИЕ
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - генерация равномерно распределенных псевдослучайных чисел
СИНТАКСИС
double drand48 ( )
double erand48 (xsubi) unsigned short xsubi [3];
long lrand48 ( )
long nrand48 (xsubi) unsigned short xsubi [3];
long mrand48 ( )
long jrand48 (xsubi) unsigned short xsubi [3];
void srand48 (seedval) long seedval;
unsigned short *seed48 (seed16v) unsigned short seed16v [3];
void lcong48 (param) unsigned short param [7];
ОПИСАНИЕ
Данное семейство функций порождает псевдослучайные числа с использованием широко известного линейного конгруэнтного алгоритма и 48-битной целой арифметики.
Функции drand48 и erand48 возвращают неотрицательные вещественные числа двойной точности, равномерно распределенные в интервале [0.0, 1.0).
Функции lrand48 и nrand48 возвращают неотрицательные целые числа типа long, равномерно распределенные в интервале [0, 2^31).
Функции mrand48 и jrand48 возвращают целые числа со знаком, типа long, равномерно распределенные в интервале [-2^31, 2^31).
Функции srand48, seed48 и lcong48 представляют собой инициализирующие точки входа, обращение к которым должно предшествовать вызову какой-либо из функций drand48, lrand48, mrand48. (Хотя это и не рекомендуется, в том случае, когда функции drand48, lrand48, mrand48 будут вызваны без предварительного обращения к инициализирующим точкам входа, подстановка постоянных начальных значений, принимаемых по умолчанию, будет произведена автоматически.) Функции erand48, nrand48 и jrand48 не требуют предварительного обращения к инициализирующим точкам входа.
Все программы работают, порождая последовательность 48-битных целых значений X [i] в соответствии с линейной конгруэнтной формулой
X [n+1] = (a * X [n] + c) mod m n 0
Параметр m = 2^48 и поэтому используется 48-битная целая арифметика. Если не было предварительного обращения к lcong48, для коэффициента a и аддитивной константы c будут приняты следующие значения:
a = 0x5DEECE66D = 0273673163155 c = 0xB = 013
НАЗВАНИЕ
echo - выдача аргументов командной строки на стандартный вывод
СИНТАКСИС
echo [аргумент ...]
ОПИСАНИЕ
Команда echo выдает на стандартный вывод свои аргументы, разделяя их пробелами и выдавая в конце символ перевода строки. Кроме того, поддерживаются следующие C-подобные соглашения о задании управляющих символов (не забывайте об особой трактовке shell'ом символа \):
Команда echo полезна для вывода сообщений из командных файлов и для посылки известных данных в канал.
СМ. ТАКЖЕ
sh(1).
ascii(5) в Справочнике программиста.
ОГРАНИЧЕНИЯ
При задании кода символа посредством конструкции \0n перед n обязательно должен стоять 0. Например, команда
echo 'WARNING:\07'
выведет на терминал WARNING: и "прозвенит". Кавычки (одинарные или двойные) необходимы для того, чтобы защитить символ \ от интерпретации shell'ом. Еще один способ - записать символ \ дважды.
Восьмеричные коды символов приведены в .
НАЗВАНИЕ
ecvt, fcvt, gcvt - преобразование вещественного числа в цепочку символов
СИНТАКСИС
char *ecvt (value, ndigit, decpt, sign) double value; int ndigit, *decpt, *sign;
char *fcvt (value, ndigit, decpt, sign) double value; int ndigit, *decpt, *sign;
char *gcvt (value, ndigit, buf) double value; int ndigit; char *buf;
ОПИСАНИЕ
Функция ecvt преобразует значение value в цепочку из ndigit символов, завершающуюся нулевым байтом, и возвращает указатель на нее. Старшая цифра результата равна 0 только для нулевого значения value. Младшая цифра округляется. Смещение десятичной точки относительно начала цепочки символов запоминается по адресу decpt. Если смещение отрицательно, это означает, что точка располагается слева от возвращенных цифр. Десятичная точка не включается в возвращаемую цепочку символов. Если результат отрицателен, то слово, адресуемое указателем sign, отлично от нуля, иначе - равно нулю.
Функция fcvt аналогична функции ecvt. Отличие в том, что результат округляется для вывода в формате %f (в Фортране это формат F). Количество выводимых цифр определяется аргументом ndigit.
Функция gcvt преобразует значение value в цепочку символов, завершающуюся нулевым байтом, адрес которой задан аргументом buf, и выдает buf в качестве результата. Если возможно, функция помещает в цепочку символов ndigit значащих цифр в F-формате Фортрана, в противном случае используется E-формат. В любом случае результат готов для печати. Знак минус, если он есть, или десятичная точка включаются прямо в возвращаемую цепочку символов. Завершающие нули подавляются.
СМ. ТАКЖЕ
.
СЮРПРИЗЫ
Значения, возвращаемые функциями ecvt и fcvt, указывают на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.
НАЗВАНИЕ
ed - текстовый редактор
СИНТАКСИС
ed [-s] [-p приглашение] [файл]
ОПИСАНИЕ
Текстовый редактор ed является стандартным для UNIX систем. Если в командной строке задан файл, он считывается в буфер (как будто была выполнена команда e, см. ниже) и его можно редактировать.
Опциям команды ed приписан следующий смысл:
Редактор ed работает с копией файла; изменения, производимые над копией, отображаются на файл только после выполнения команды записи w. Копия текста размещается редактором во временном файле, называемом буфером. Буфер только один.
Редактор поддерживает спецификацию формата текстового файла [см. ]. Если первая строка редактируемого файла содержит спецификацию формата, а у терминала, с которого вызван ed, задана характеристика -tabs или tab3 [см. ], то при просмотре файла нужные позиции табуляции будут установлены автоматически. Например, если в первой строке файла содержится:
то позиции табуляции будут установлены в колонках 5, 10, 15, а максимальная длина строки составит 72. Отметим, что при вводе текста, независимо от спецификации формата, происходит замена символов табуляции пробелами до ближайшей колонки, кратной восьми.
Команды ed имеют простую и регулярную структуру: ноль, один или два адреса предшествуют односимвольной команде, после которой могут располагаться ее аргументы. Адреса задают одну или несколько строк из буфера. Отметим, что каждая команда, требующая адресации, может адресоваться по умолчанию, то есть адреса указывать не обязательно.
Как правило, в строке может содержаться только одна команда. Ряд команд позволяет вводить текст, который размещается в определенном месте буфера. Когда редактор находится в режиме ввода, никакие команды не воспринимаются; вводимая информация только накапливается. Строка, состоящая из одного символа ".", обозначает конец ввода.
Редактор ed поддерживает ограниченную форму записи регулярных выражений; регулярное выражение используется для задания адресов строк и, в некоторых командах (например, s) для указания заменяемых фрагментов строк. Регулярное выражение (РВ) определяет множество цепочек символов. Говорят, что элемент множества цепочек удовлетворяет РВ. РВ для ed может быть построено следующим образом.
Следующие односимвольные РВ сопоставляются с цепочками из одного символа:
1.1 Обычный символ (не входящий в перечень из пункта 1.2, см. ниже) - это односимвольное РВ, которое успешно сопоставляется с указанным символом.
1.2 Если за символом \ следует любой специальный символ, то этот последний теряет свой специальный смысл. Данная комбинация определяет односимвольное РВ, успешно сопоставляющееся со специальным символом. Специальными символами являются:
НАЗВАНИЕ
efl - препроцессор для расширенного Фортрана
СИНТАКСИС
efl [-w] [-#] [-C] [файл ...]
ОПИСАНИЕ
Команда efl компилирует программы, написанные на языке EFL, в чистый Фортран и направляет результат на стандартный вывод. EFL предоставляет C-подобные управляющие конструкции ratfor'а(1):
Группировка операторов посредством скобок { }. Ветвление: if, if-else, select-case (последнюю конструкцию иногда называют switch-case). Циклы while, for, do, repeat и repeat ... until. Многоуровневые break и next.
В EFL есть C-подобные структуры данных, например:
struct { integer flags(3) character(8) name long real coords(2) } table(100)
Можно употреблять родовые имена функций, операторы присваивания +=, &=, и т.д., а также последовательно выполняемые логические операции && и . Принят унифицированный синтаксис ввода/вывода:
write(6,x,y:f(7,2), do i=1,10 { a(i,j),z.b(i) })
Язык EFL также предоставляет некоторый синтаксический "сахар":
Свободный формат исходного текста: несколько операторов на одной строке; один оператор на нескольких строках; имена (а не только числа) в качестве меток операторов. Комментарии: # - это комментарий. Трансляция операций сравнения и логических операций: >, >=, & и т.д. преобразуются в .GT., .GE., .AND. и т.д. Возврат выражения в качестве результата функции: return (выражение) Макроопределения: define имя замена Вставка файлов: include файл
Допускается использование следующих опций:
Аргумент с предшествующим знаком равенства определяет опцию EFL, как если бы она встретилась в начале программы в операторе option. Значение опций по умолчанию для конкретной машины может быть выбрано из следующих вариантов: system=unix, system=gcos, или system=cray. Если значение system не задано явно, оно определяется машиной, на которой работает препроцессор. Другие специфические опции определяют стиль ввода/вывода, обработку ошибок, соглашения о символах продолжения, число символов, пакуемых в слово, а также форматы, установленные по умолчанию.
Препроцессор efl лучше всего использовать с компилятором .
СМ. ТАКЖЕ
cc(1), , .
НАЗВАНИЕ
egrep - поиск по шаблону, заданному полным регулярным выражением
СИНТАКСИС
egrep [-b] [-c] [-i] [-l] [-n] [-v] [-e специальное_выражение] [-f файл] полное_регулярное_выражение [файл ...]
ОПИСАНИЕ
Команда egrep сопоставляет строки исходных файлов с шаблоном, заданным полным_регулярным_выражением. Если файлы не указаны, используется стандартный ввод. Обычно каждая успешно сопоставленная строка копируется на стандартный вывод; если исходных файлов несколько, пе- ред найденной строкой выдается имя файла. В egrep ис- пользуется быстрый детерминированный алгоритм, которому иногда может требоваться экспоненциальное увеличение об ема используемой памяти. В качестве шаблонов воспри- нимаются полные регулярные выражения (выражения, имею- щие своими значениями цепочки символов, и использующие полный набор алфавитно-цифровых и специальных симво- лов). Трактовка полных_регулярных_выражений такая же, как в , с той только разницей, что не допускается конструкция \( ... \), но воспринимаются следующие рас- ширения:
1. Полное регулярное выражение, заканчивающееся зна- ком +. Оно сопоставляется с одним или несколькими вхождениями этого выражения.
2. Полное регулярное выражение, заканчивающееся зна- ком ?. Оно сопоставляется с одним вхождением этого выражения или пустой цепочкой символов.
3. Два полных регулярных выражения, разделенные зна- ком | или символом перевода строки. Результат со- поставляется с цепочками, удовлетворяющими хотя бы одному из операндов.
4. Для изменения порядка действий полное регулярное выражение может быть заключено в скобки ( и ).
Для экранирования символов $, *, [, ^, |, (, ) и \ от интерпретации shell'ом проще всего заключать полное_ре- гулярное_выражение в одинарные кавычки.
Старшинство операций: [ ], затем * ? +, затем конкате- нация, затем | и перевод строки.
В командной строке могут задаваться следующие опции:
-b Перед каждой строкой ставить номер блока, в котором она находится. Используется для поиска блока по контексту (блоки нумеруются с нуля). -c Выдавать только количество успешно сопоставленных строк. -i При сопоставлении не различать большие и малые буквы. -l Выдавать только имена файлов, в которых есть успешно сопоставленные строки, разделяя имена переводами строк. -n Перед каждой строкой ставить ее номер в файле (строки нумеруются с 1). -v Выдавать только строки, не удовлетворяющие шаблону. -e специальное_выражение Искать специальное_выражение (полное регулярное выражение, начинающееся со знака -). -f файл Полные_регулярные_выражения читаются из файла.
СМ. ТАКЖЕ
ed(1), , , , .
КОДЫ ЗАВЕРШЕНИЯ
0 Были успешные сопоставления. 1 Успешных сопоставлений не было. 2 Есть синтаксические ошибки или недоступные файлы (даже если были успешные сопоставления).
СЮРПРИЗЫ
В идеале должна быть одна утилита для поиска по шаблону, однако трудно придумать алгоритм, достигающий во всех случаях приемлемого компромисса между расходом времени и памяти.
Длина строки ограничена BUFSIZ символами; более длинные строки обрезаются. Значение BUFSIZ определяется во включаемом файле .
НАЗВАНИЕ
enable - активация принтеров
СИНТАКСИС
enable принтер ...
ОПИСАНИЕ
Команда enable активирует указанные принтеры, допуская обработку запросов, выданных командой . Для выяснения статуса принтеров служит команда .
ФАЙЛЫ
/usr/spool/lp/*
СМ. ТАКЖЕ
disable(1), , .
НАЗВАНИЕ
end, etext, edata - последние адреса в программе
СИНТАКСИС
extern end; extern etext; extern edata;
ОПИСАНИЕ
Описываемые об екты не являются функциями или переменными, значения которых представляют интерес. Интерес представляют адреса описываемых об ектов. Адресом etext является адрес сразу за концом сегмента команд, адресом edata является адрес сразу за концом области инициализированных данных, адресом end является адрес сразу за концом области неинициализированных данных.
В момент начала выполнения программы ее верхняя граница (адрес сразу за концом сегмента данных) совпадает с адресом end, но верхняя граница может передвинуться при использовании системных вызовов из , функций из , стандартного ввода/вывода [см. ], средств получения временного профиля [см. ] и т.д. Поэтому текущее значение верхней границы программы следует определять при помощи системного вызова sbrk (0) [см. ].
СМ. ТАКЖЕ
, , . в Справочнике пользователя.
НАЗВАНИЕ
env - формирование окружения для выполнения команды
СИНТАКСИС
env [-] [имя=значение ...] [команда аргумент ...]
ОПИСАНИЕ
Утилита env получает текущее окружение, модифицирует его в соответствии со своими аргументами, и затем выполняет команду в модифицированном окружении. Пары имя=значение об единяются с наследуемым окружением перед выполнением команды. При наличии флага "-" наследуемое окружение полностью игнорируется, и команда выполняется с тем окружением, которое определено командной строкой env.
Если команда не задана, то сформированное окружение выдается на стандартный вывод, по одной паре имя=зачение в строке.
СМ. ТАКЖЕ
sh(1). exec(2), , в Справочнике программиста.
НАЗВАНИЕ
environ - окружение пользователя
ОПИСАНИЕ
Процессу, запускаемому системным вызовом , становится доступным массив цепочек символов, называемый "окружением". Предполагается, что цепочки имеют вид имя=значение. Различными командами используются следующие имена:
PATH Последовательность маршрутов, используемых такими командами, как , , и , при поиске файла, у которого известно лишь неполное маршрутное имя. Маршруты отделяются друг от друга двоеточиями (:). Login(1) устанавливает значение PATH=:/bin:/usr/bin. HOME Содержит имя исходного каталога, устанавливаемого по файлу программой при входе пользователя в систему. TERM Тип терминала, для которого должны подготавливаться выводимые данные. Эта информация необходима командам , и др., которые могут использовать специфические возможности терминала конкретного типа. TZ Информация о часовом поясе. Имеет формат xxxnzzz, где xxx - сокращенное название для времени местного часового пояса, n - выраженное в часах отставание от всемирного времени (возможно, отрицательное), а zzz - сокращенное название для летнего времени местного часового пояса, если таковое имеется; например, EST5EDT.
Другие имена могут быть помещены в окружение командой export и оператором присваивания имя=значение языка shell [см. ], а также системным вызовом . Следует избегать конфликтов с shell-переменными, часто экспортируемыми из профайлов: MAIL, PS1, PS2, IFS.
СМ. ТАКЖЕ
, , , .
, , , , , , , в Справочнике пользователя.
НАЗВАНИЕ
environ - среда пользователя
ОПИСАНИЕ
Среда пользователя представляет собой совокупность информации о пользователе, такой как его входной каталог, электронный почтовый ящик, тип терминала. Среда хранится в специальных "переменных среды", которым могут присваиваться значения символов, таких как имена файлов, каталогов и терминалов. Эти переменные автоматически имеют доступ к программам и командам, вызываемым пользователем и терминалом.
Ниже приведен короткий список распространенных перменных имен пользователя.
PATH Определяет путь поиска директорий, содержащих команды. Система ищет эти директории,когда пользователь печатает команду, не давая полного имени пути. Путь пользователя представляет собой одно или несколько имен директорий, разделенных знаком (:). Первоначально PATH устанавливается в :/bin:/ usr/bin. НОМЕ Имя входных каталогов пользователей. Первоначально HOME устанавливается во входную директорию, даваемую при входе в файл пользователя passwd. EXINIT Используется для установки опций vi. Для пользователей командного процессора Bourne синтаксис имеет вид:
EXINIT='set options'
Для пользователей С-процессора синтаксис имеет вид:
setenv EXINIT 'set options'
Например, пользователь С-процессора может поместить следующую команду в $HOME/.cshrc:
setenv EXINIT 'set wm=24'
TERM Определяет тип используемого терминала. Данная информация используется командами, такими как , которая использует информацию о возможностях терминала пользователя. Переменная может быть устранена в любом значимом имени терминала ( см. ), пр о иямоли с помощью использования команды . TZ Определяет информацию временной зоны. Эта информация используется для выведения на дисплей со ответствующего времени. Переменная может иметь любое значение в форме:
xxxnzzzs; start/time, end/time
где ххх - сокращение стандартной временной локальной временной зоны (1-9 символов), n - отличие стандартной временной зоны от GMT, и может представляться как hh:mm:ss (часы:минуты:секунды), zzzсокращение летней временной локальной зоны от 1 -9 символов (если они есть), s - отличие летней временной зоны от GMT, и может представляться как hh:mm:ss (часы:минуты:секунды), start и end определяют день начала и конца летнего времени, основанного на одном из четырех правил, и time - время перехода с или на летнее время. Ниже приведены следующие правила, определяющие start и end:
НАЗВАНИЕ
erf, erfc - интеграл вероятности ошибки и дополнение к нему
СИНТАКСИС
#include <math.h>
double erf (x) double x;
double erfc (x) double x;
ОПИСАНИЕ
Функция erf возвращает значение интеграла по t функции
2 / sqrt( П) * exp(-t^2)
в пределах от 0 до x.
Функция erfc, которая возвращает значение 1 - erf(x), введена дополнительно из-за чрезмерной относительной погрешности в случае, если erf(x) вызывается для боль- ших x, а результат вычитается из 1.0 (например, при x=5 теряется 12 значащих цифр).
СМ. ТАКЖЕ
.
НАЗВАНИЕ
errdead - извлечение из дампа записей об ошибках
СИНТАКСИС
/etc/errdead файл_с_дампом [файл_с_таблицей_имен]
ОПИСАНИЕ
Когда система обнаруживает ошибки оборудования, генерируется запись с информацией об ошибке. Если демон регистрации ошибок не активен или система аварийно завершается до того, как успевает сбросить запись об ошибке в файл ошибок, информация об ошибке сохраняется в буферах системы. Утилита errdead исследует системный дамп (или память), извлекает информацию об ошибке и передает ее для анализа программе .
Файл_с_дампом задает файл (или память), подлежащий исследованию. Подразумеваемый файл_с_таблицей_имен есть /unix.
ФАЙЛЫ
/dev/mem Память. /unix Файл с системной таблицей имен. /usr/bin/errpt Программа анализа. /usr/tmp/errXXXXXX Временный файл.
СМ. ТАКЖЕ
, .
ДИАГНОСТИКА
Диагностические сообщения могут исходить как от errdead, так и от . В любом случае они не нуждаются в пояснениях.
НАЗВАНИЕ
errdemon - демон регистрации ошибок системы
СИНТАКСИС
/usr/lib/errdemon [файл]
ОПИСАНИЕ
Демон регистрации ошибок системы errdemon собирает записи об ошибках, извлекая их из специального файла /dev/error и помещая в указанный файл. При отсутствии явных указаний записи об ошибках помещаются в файл /usr/adm/errfile. Если файл не существует, он создается, если существует, то записи об ошибках добавляются в конец, так что никакая информация об ошибках не теряется. Errdemon не проводит никакого анализа ошибок, весь анализ перекладывается на программу . Завершение выполнения демона регистрации ошибок происходит по программному сигналу завершения SIGTERM [см. ]. Только суперпользователь может запустить демон регистрации ошибок. В любой момент времени может выполняться не более одного демона регистрации ошибок системы.
ФАЙЛЫ
/dev/error Файл, откуда извлекаются записи об ошибках. /usr/adm/errfile Файл, куда помещаются записи об ошибках системы.
СМ. ТАКЖЕ
, , .
в Справочнике программиста.
НАЗВАНИЕ
errfile - формат файла фиксации аппаратных ошибок
ОПИСАНИЕ
При обнаружении системой аппаратных сбоев порождается запись, которая передается демону, фиксирующему ошибки и заносящему записи в соответствующий файл для последующего анализа. По умолчанию, таким файлом является /usr/adm/errfile.
Формат записи об ошибке зависит от типа обнаруженной ошибки. Каждая запись, однако, имеет заголовок следующего формата:
struct errhdr { short e_type; /* Тип записи */ short e_len; /* Кол-во байт в записи (вкл. заголовок) */ time_t e_time; /* Дата ошибки */ };
Перечень допустимых типов записей:
#define E_GOTS 010 /* Старт UNIX/TS */ #define E_GORT 011 /* Старт UNIX/RT */ #define E_STOP 012 /* Стоп */ #define E_TCHG 013 /* Изменение времени */ #define E_CCHG 014 /* Переконфигурация */ #define E_BLK 020 /* Ошибка блочного устройства */ #define E_STRAY 030 /* Случайное прерывание */ #define E_PRTY 031 /* Четность памяти */
Некоторые записи в файле ошибок имеют администраторское происхождение. Сюда входит инициализационная запись об активации процесса сбора ошибок, завершающая запись при успешном завершении работы демона, а также записи об изменении времени, которые используются для фиксации изменений системного времени. Эти записи имеют следующий формат:
struct estart { short e_cpu; /* Тип ЦП */ struct utsname e_name; /* Имя системы */ };
#define eend errhdr /* Заголовок записи */ struct etimchg { time_t e_ntime; /* Новое значение времени */ };
При случайном прерывании порождается запись следующего формата:
struct estray { uint e_saddr; /* Адрес прерывания или устройства */ };
Фиксация ошибок памяти не поддерживается в данной реализации.
Записи для блочных устройств имеют следующий формат:
struct eblock { dev_t e_dev; /* Старший+младший ном. уст-ва */ physadr e_regloc; /* Адрес контроллера */ short e_bacty; /* Прочие опер. ввода/вывода */ struct iostat { long io_ops; /* Кол-во чтений/записей */ long io_misc; /* Кол-во прочих операций */ ushort io_unlog; /* Кол-во незафикс. ошибок */ } e_stats; short e_bflags; /* Чтение/запись, ошибка и т.д. */ short e_cyloff; /* Начальный цилиндр уст-ва */ daddr_t e_bnum; /* Номер логического блока */ ushort e_bytes; /* Кол-во передаваемых байт */ paddr_t e_memadd; /* Адрес буфера */ ushort e_rtry; /* Кол-во повторных попыток */ short e_nreg; /* Кол-во регистров уст-ва */ };
Следующие значения используются в поле флагов e_bflags:
#define E_WRITE 0 /* Операция записи */ #define E_READ 1 /* Операция чтения */ #define E_NOIO 02 /* Нет запросов, ожидающих в/в */ #define E_PHYS 04 /* Физический ввод/вывод */ #define E_FORMAT 010 /* Форматирование диска */ #define E_ERROR 020 /* Неудачный ввод/вывод */
СМ. ТАКЖЕ
в Справочнике администратора.
НАЗВАНИЕ
error - интерфейс для регистрации ошибок
ОПИСАНИЕ
Устройство с младшим номером 0 для драйвера error является интерфейсом между процессом и набором системных подпрограмм регистрации ошибок. Драйвер можно открыть только на чтение, только одним процессом, который должен обладать привилегией суперпользователя. Каждая операция чтения извлекает очередную запись целиком. Если в операции чтения указана длина меньше размеров записи, остаток записи отсекается и теряется.
ФАЙЛЫ
/dev/error
СМ. ТАКЖЕ
.
НАЗВАНИЕ
errpt - обработка зарегистрированных ошибок системы
СИНТАКСИС
errpt [-s дата] [-e дата] [-a] [-p число_страниц] [-f] [файл ...]
ОПИСАНИЕ
Утилита errpt обрабатывает данные, собранные механизмом регистрации ошибок системы [см. ] и генерирует отчет об этих ошибках. Отчетом по умолчанию является сводная информация обо всех ошибках, зарегистрированных в указанных файлах. Опции применяются ко всем файлам и описываются ниже. Если имена файлов не указаны, errpt пытается использовать файл /usr/adm/errfile.
Сводный отчет сообщает об опциях, которые могут ограничить его полноту, выводит время, когда зарегистрирована самая ранняя и самая поздняя ошибка, и сообщает об общем количестве ошибок различных типов. Для каждого устройства выводится общее число неисправимых ошибок, исправимых ошибок, ошибок, которые не могли быть зарегистрированы, количество операций ввода/вывода на устройстве и информацию о других событиях, связанных с устройством. Ошибки чтения своих входных данных errpt трактует как ошибки чтения на устройстве.
В детальном отчете, кроме специфической информации об ошибках, сообщается обо всех началах и завершениях процессов регистрации ошибок и обо всех проведенных во время, охваченное процессом регистрации, установках часов [с помощью ]. К сводной информации по каждому типу ошибок добавляется детальная информация.
Ограничить число обрабатываемых записей об ошибках можно с помощью следующих опций:
ФАЙЛЫ
/usr/adm/errfile Файл регистрации ошибок системы.
СМ. ТАКЖЕ
, .
в Справочнике пользователя.
НАЗВАНИЕ
errstop - терминирование демона регистрации ошибок системы
СИНТАКСИС
/etc/errstop [файл_с_таблицей_имен]
ОПИСАНИЕ
Демон регистрации ошибок терминируется при помощи команды errstop. Эта команда реализована как процедура на языке shell. Посредством определяется идентификатор процесса демона, после чего ему посылается программный сигнал завершения [см. ].
Подразумеваемый файл_с_таблицей_имен есть /unix.
Только суперпользователь может выполнять команду errstop.
ФАЙЛЫ
/unix Файл с системной таблицей имен.
СМ. ТАКЖЕ
.
, в Справочнике пользователя.
в Справочнике программиста.
ИМЯ
ex - Вызывает текстовый редактор.
СИНТАКСИС
ex [-] [-v] [-t tag] [-r] [+lineno] name ...
ОПИСАНИЕ
Команда ex является основой редакторов ex и vi. Команда ex представляет собой расширение редактора ed, наиболее значительным добавлением к которому является возможность экранного редактирования. Редактирование, ориентированное на экранную обработку, является характерной особенностью редактора vi.
Если Вы еще не использовали редактор ed, или если Вы являетесь неопытным пользователем, то наиболее подходящим для Вас будет edit. В нем отсутствуют некоторые сложные приемы, присущие редактору ex, которые используются большинством системных программистов и пользователями, хорошо знакомыми с редактором ex.
Если Вы имеете терминал CRT (с электроннолучевой трубкой), у Вас есть возможность использовать редактор, ориентированный на экранную обработку; для этого просмотрите описание команды из редактора ex, которая ориентирована на экранное редактирование.
ДЛЯ ПОЛЬЗОВАТЕЛЕЙ, ОСВОИВШИХ РЕДАКТОР ed
Если Вы уже пользовались редактором ed, то, наверное, заметили, что редактор ex обладает некоторыми новыми возможностями. Интеллектуальные и высокоскоростные терминалы более всего подходят к использованию с редактором ed. В общем случае, редактор ex использует гораздо больше терминальных возможностей, чем редактор ed. Он использует такое терминальное средство, как база данных termcap(5), а также определяет из переменной среды TERM тип используемого Вами терминала, для того, чтобы как можно более эффективно управлять Вашим терминалом. Редактор ex допускает использование таких возможностей, как вставка и исключение символа и строки в режиме работы его команды visual, сокращенно vi, который является определенным режимом редактирования при использовании редактора . Существует также возможность редактирования вставкой новой строки между строк при помощи команды open, сокращенно (o), которая работает на всех терминалах.
Редактор ex содержит ряд средств для облегчения просмотра текста файла. Простой доступ к окнам с текстом предоставляет команда z. Нажатие комбинации клавиш Ctrl-D приводит к свертыванию окна с текстом до половины его размера, и предоставляет удобную возможность ускорения пошагового просмотра текста файла по сравнению с нажатием только клавиши RETURN. Действительно, экранно-ориентированный режим visual обеспечивает постоянный доступ к редактируемому контексту.
Редактор ex предоставляет Вам пространную подсказку в случаях, когда Вы делаете ошибки. Команда undo (u) позволяет Вам отменить одно какое-либо произведенное изменение. Команда ex предоставляет Вам возможности обратной связи, как правило, печатая при этом измененные строки и указывая на то, что воздействию какой-либо команды было подвергнуто более необходимого количества строк, позволяя, таким образом, обнаружить, что команда обработала больше, чем предполагалось пользователем, строк.
Кроме того, редактор, как правило, препятствует записи поверх существующих файлов, если Вы их еще не редактировали, таким образом, что Вы не сможете случайно, при помощи команды write, испортить файл, отличный от того, который Вы редактируете. Если происходит сбой в системе (или в редакторе), или Вы случайно отключили терминальное соединение, Вы можете использовать команду recover для восстановления Вашей рабочей среды. При этом возврат осуществляется в те несколько строк, которые Вам пришлось оставить.
Редактор ex обладает отдельными средствами для редактирования более чем одного файла в данный момент времени. Вы можете в командной строке редактора указать список файлов, и использовать команду next (n) для редактирования каждого из них по очереди. Кроме того, Вы можете указать для команды next список имен файлов или образец имен, используемый интерпретатором shell, для того, чтобы определить новый набор файлов для редактирования. В общем случае, имена файлов в редакторе могут быть сформированы при помощи полного метасинтаксиса интерпретатора shell. Кроме того, при формировании имен файлов возможно использование метасимвола "%", с последующим замещением его именем текущего файла. При редактировании больших групп связанных файлов, Вы можете использовать команду tag редактора ex для быстрого обнаружения функций и других важных для Вас мест в любом из этих файлов. Это бывает полезно, когда Вы хотите найти определение некоторой частной функции в большой программе. Команда осуществляет построение файла tags или группы программ на языке С.
Для перемещения текста из файла в файл или внутри одного файла редактор имеет группу буферов, обозначаемых буквами от a до z. Вы можете поместить текст в эти поименованные буфера и перенести его затем в другой редактируемый Вами файл.
Команда & повторяет последнюю выполненную команду подстановки substitute. Существует, также, команда подстановки с подтверждением. Вы задаете диапазон подстановок, которые должны быть выполнены, а редактор интерактивно (в режиме диалога) по каждой подстановке выводит Вам приглашение с вопросом, нужна ли Вам эта подстановка.
Вы можете использовать команду substitute в редакторе ex для систематического переключения буквенного регистра между нижним и верхним значениями. Можно игнорировать значение этого регистра при выполнении поиска и подстановок. Кроме того, редактор ex допускает применение регулярных выражений, сопоставляемых словам, которые должны быть построены. Это удобно, например, когда производится поиск слова "edit", а в Вашем документе содержится слово "editor".
Редактор ex имеет набор опций, которые Вы можете установить. Одной из них, очень полезной, является опция autoindent, которая разрешает редактору автоматически вставлять пустые пространства в начало текста для выравнивания текста. Установив эту опцию, Вы можете просто нажать комбинацию клавиш Ctrl-D, чтобы сделать обратную табуляцию, пробел и табуляцию вперед для выравнивания нового кода.
Разнообразие новых полезных средств включает в себя такие команды, как интеллектуальную команду join (j), которая автоматически вставляет пустые пространства между соединенными строками; команды < и >, которые сдвигают группы строк, а также возможность отфильтровывать части буфера посредством таких команд, как sort.
ФАЙЛЫ
НАЗВАНИЕ
exec: execl, execv, execle, execve, execlp, execvp выполнение файла
СИНТАКСИС
int execl (path, arg0, arg1, ..., argn, (char*) 0) char *path, *arg0, *arg1, ..., *argn;
int execv (path, argv) char *path, *argv [];
int execle (path, arg0, arg1, ..., argn, (char*) 0, envp) char *path, *arg0, *arg1, ..., *argn, *envp [];
int execve (path, argv, envp) char *path, *argv [], *envp [];
int execlp (file, arg0, arg1, ..., argn, (char*) 0) char *file, *arg0, *arg1, ..., *argn;
int execvp (file, argv) char *file, *argv [];
ОПИСАНИЕ
Все формы системного вызова exec превращают вызвавший процесс в новый процесс, который строится из обычного выполняемого файла, называемого в дальнейшем новым выполняемым файлом. Выполняемый файл состоит из заголовка [см. a.out(4)], сегмента команд (.text) и данных. Данные состоят из инициализированной (.data) и неинициализированной (.bss) частей. Если системный вызов exec закончился успешно, то он не может вернуть управление, так как вызвавший процесс уже заменен новым процессом.
При запуске C-программы ее вызывают следующим образом:
main (argc, argv, envp) int argc; char **argv, **envp;
где argc равен количеству аргументов, argv - массив указателей собственно на аргументы и envp - массив указателей на цепочки символов, образующие окружение. Принято соглашение, по которому значение argc не меньше 1, а первый элемент массива argv указывает на цепочку символов, содержащую имя нового выполняемого файла.
Аргументам системных вызовов группы exec приписан следующий смысл.
Аргумент path указывает на маршрутное имя нового выполняемого файла.
Как и path, аргумент file указывает новый выполняемый файл, но маршрут этого файла определяется в результате просмотра каталогов, переданных через переменную окружения PATH [см. ]. Окружение поддерживается shell'ом [см. ].
Аргументы arg0, arg1, ..., argn - это указатели на цепочки символов, ограниченные нулевыми байтами. Эти цепочки образуют доступный новому процессу список аргументов. По соглашению, как минимум arg0 должен присутствовать и указывать на цепочку символов, равную path (или последнему компоненту path).
ИМЯ
execl, execv, execle, execve, execlp, execvp - выпoлнeниe фaйлa
СИНТАКСИС
int execl (path, arg0, arg1, ..., argn, (char*)0) char *path, *arg0, *arg1, ..., *argn;
int execv (path, argv) char *path, *argv[];
int execle (path, arg0, arg1, ..., argn, (char*)0, envp) char *path, *arg0, *arg1,..., *argn, *envp[];
int execve (path, argv, envp) char *path, *argv[], *envp[];
int execlp (file, arg0, arg1, ..., argn, (char*)0) char *file, *arg0, *arg1,..., *argn;
int execvp (file, argv) char *file, *argv[];
ОПИСАНИЕ
Фyнкции ceмeйcтвa exec зaмeняют тeкyщий oбpaз пpoцecca нoвым oбpaзoм. Hoвый oбpaз извлeкaeтcя из oбъeктнoгo фaйлa, нaзывaeмoгo фaйлoм oбpaзa пpoцecca. Пocлe ycпeшнoгo выпoлнeния вызoвa exec нeвoзмoжeн вoзвpaт в cтapый oбpaз пpoцecca, пocкoлькy oн пepeкpыт нoвым oбpaзoм.
Apгyмeнт path зaдaeт имя фaйлa, coдepжaщeгo нoвый oбpaз пpoцecca.
Apгyмeнт file тaкжe зaдaeт имя фaйлa, coдepжaщeгo нoвый oбpaз пpoцecca. Ecли apгyмeнт file нe coдepжит cимвoл /, пpeфикc имeни этoгo фaйлa пoлyчaeтcя пocлeдoвaтeльнoй пoдcтaнoвкoй имeн кaтaлoгoв, yкaзaнныx в знaчeнии пepeмeннoй PATH (cм. ). Koмaнднaя cpeдa фopмиpyeтcя интepпpeтaтopoм кoмaнд (cм. ).
Apгyмeнты arg0, arg1, ..., argn являютcя yкaзaтeлями нa cтpoки cимвoлoв, зaвepшaeмыe cимвoлoм NUL. Cтpoки пpeдcтaвляют coбoй cпиcoк apгyмeнтoв, пepeдaвaeмыx нoвoмy oбpaзy пpoцecca. Apгyмeнт arg0 дoлжeн пpиcyтcтвoвaть вceгдa и дoлжeн yкaзывaть нa cтpoкy, либo coвпaдaющyю c path, либo coдepжaщyю пocлeдний кoмпoнeнт path.
Apгyмeнт argv являeтcя мaccивoм yкaзaтeлeй нa cимвoльныe cтpoки, зaвepшaeмыe cимвoлoм NUL. Cтpoки пpeдcтaвляют coбoй cпиcoк apгyмeнтoв, пepeдaвaeмыx нoвoмy oбpaзy пpoцecca. Apгyмeнт argv[0] дoлжeн пpиcyтcтвoвaть вceгдa и дoлжeн yкaзывaть нa cтpoкy, либo coвпaдaющyю c path, либo coдepжaщyю пocлeдний кoмпoнeнт path.
Apгyмeнт envp являeтcя мaccивoм yкaзaтeлeй нa cимвoльныe cтpoки, зaвepшaeмыe cимвoлoм NUL. Cтpoки пpeдcтaвляют coбoй кoмaнднyю cpeдy для нoвoгo oбpaзa пpoцecca. Пocлeдний элeмeнт мaccивa дoлжeн быть нyлeвым yкaзaтeлeм.
Фaйлы, oткpытыe cтapым (вызывaющим) oбpaзoм пpoцecca, ocтaютcя oткpытыми и в нoвoм oбpaзe зa иcключeниeм тex, y кoтopыx флaг зaкpытия пpи exec paвeн 1; (cм. fcntl(3)). Укaзaтeль пoзиции в тex фaйлax, чтo ocтaютcя oткpытыми, нe измeняeтcя.
Cигнaлы, нa кoтopыe в cтapoм oбpaзe пpoцecca былa ycтaнoвлeнa cтaндapтнaя peaкция (SIG_DFL) или игнopиpoвaниe (SIG_IGN), ocтaютcя тaкими жe в нoвoм oбpaзe. Ha cигнaлы, кoтopыe в cтapoм oбpaзe были oбъявлeны пepexвaтывaeмыми, в нoвoм oбpaзe ycтaнaвливaeтcя cтaндapтнaя peaкция cиcтeмы (cм. signal(3)).
Ecли бит ycтaнoвки пoльзoвaтeльcкoгo ID y фaйлa oбpaзa пpoцecca paвeн 1 (cм. ), эффeктивный пoльзoвaтeльcкий ID пpoцecca c нoвым oбpaзoм пoлaгaeтcя paвным пoльзoвaтeльcкoмy ID фaйлa. Aнaлoгичнo, ecли бит ycтaнoвки гpyппoвoгo ID y фaйлa oбpaзa пpoцecca paвeн 1, эффeктивный гpyппoвoй ID пpoцecca c нoвым oбpaзoм пoлaгaeтcя paвным гpyппoвoмy ID фaйлa. Peaльныe пoльзoвaтeльcкий и гpyппoвoй IDs пpoцecca ocтaютcя нeизмeнными.
Пpoфилиpoвaниe пocлe exec зaпpeщeнo (cм. ).
Hoвый oбpaз пpoцecca нacлeдyeт oт cтapoгo oбpaзa пo кpaйнeй мepe, cлeдyющиe aтpибyты:
ИМЯ
execseg - дeлaeт yчacтoк дaнныx выпoлняeмoй пpoгpaммoй
СИНТАКСИС
#include
excode_t execseg (oldaddr, size) exdata_t oldaddr; unsigned size;
int unexecseg (addr) excode_t addr;
ОПИСАНИЕ
execseg пoлyчaeт тeкyщиe aдpec и paзмep yчacткa пaмяти, кoтopый дoлжeн быть выпoлнeн, и вoзвpaщaeт cтapтoвый aдpec yчacткa, в кoтopoм, пo кpaйнeй мepe, size бaйтoв и кoтopoмy мoжнo пepeдaть yпpaвлeниe. B cлyчae пpoцeccopoв Intel 8086 и 80286 ceгмeнтный peгиcтp CS accoцииpyeтcя c ceгмeнтoм дaнныx, в кoтopoм pacпoлoжeн yчacтoк oldaddr. Этo oзнaчaeт, чтo cмeщeния дo тpeбyeмыx бaйтoв в выпoлняeмoм ceгмeнтe и ceгмeнтe дaнныx coвпaдaют, нo ceлeктopы y ниx paзныe.
B cлyчae 8086 и 80286 типы "excode_t" и "exdata_t" являютcя длинными (far) yкaзaтeлями. B cлyчae apxитeктyp, гдe cтpaницы paзныx ceгмeнтoв зaщищaютcя пo чтeнию/зaпиcи/выпoлнeнию, вoзвpaщaeмый aдpec идeнтичeн apгyмeнтy, пepeдaвaeмoмy execseg.
Peкoмeндyeтcя, чтoбы пpи иcпoльзoвaнии этoй фyнкции пpoгpaммы для 8086 или 80286 имeли бoльшyю мoдeль пaмяти; инaчe пpoгpaммиcт дoлжeн xopoшo opиeнтиpoвaтьcя в cмeшaнныx мoдeляx и длинныx yкaзaтeляx.
Пpи oбнapyжeнии oшибки execseg вoзвpaщaeт ((excode_t)-1) и зaнocит в errno кoд oшибки ENONEM. Oшибкoй cчитaeтcя нeкoppeктный aдpec дaнныx или size, a тaкжe нeвoзмoжнocть paзмecтить нoвый ceлeктop дaнныx.
unexecseg зaпpeщaeт иcпoльзoвaть addr, вoзвpaщeнный в cвoe вpeмя execseg, кaк aдpec выпoлняeмoй пpoгpaммы. B cлyчae 8086 и 80286 этoт вызoв пpивoдит к ocвoбoждeнию ceлeктopa, иcпoльзoвaннoгo для выпoлняeмoгo yчacткa. Фyнкция вoзвpaщaeт 0 в cлyчae ycпeшнoгo зaвepшeния и -1 пpи oшибкe. Haпpимep, ecли addr нe являeтcя aдpecoм, вoзвpaщeнным paнee фyнкциeй execseg, вoзpaщaeтcя -1 и этoт aдpec нe мoжeт впpeдь cлyжить aдpecoм выпoлняeмoй пpoгpaммы.
ПРИМЕР
excode_t funcp; char far *datap; ... datap=brkctl(BR_NEWSEG,1000L,0L); load_with_code(datap,1000); /* зaгpyжaeт пpoгpaммy в yчacтoк datap */ funcp=execseg(datap,1000); (*funcp)(); /* вызoв пpoгpaммы */ if(unexecseg(funcp)==-1) { printf("unexecseg failed0); exit(1); }
НАЗВАНИЕ
exit, _exit - уничтожение вызвавшего процесса
СИНТАКСИС
void exit (status) int status;
void _exit (status) int status;
ОПИСАНИЕ
Системный вызов exit терминирует обратившийся к нему процесс, при этом последовательно выполняются следующие действия:
В вызвавшем процессе закрываются все дескрипторы открытых файлов. Если родительский процесс находится в состоянии вызова wait, то системный вызов wait завершается, выдавая родительскому процессу в качестве результата идентификатор терминировавшегося процесса и младшие 8 бит кода его завершения [см. ]. Если родительский процесс не находится в состоянии вызова wait, то процесс, вызвавший exit, переходит в состояние зомби. Это такое состояние, когда процесс занимает только элемент в таблице процессов и не занимает памяти ни в адресном пространстве пользователя, ни в адресном пространстве ядра. Элемент таблицы процессов, занятый зомби-процессом, содержит информацию о времени, затраченном процессом. Эта информация необходима для вызова times [см. <sys/proc.h>].
У всех существующих потомков терминировавшихся процессов, а также у зомби-процессов идентификатор родительского процесса устанавливается равным 1. Таким образом, все эти процессы наследуются инициализационным процессом [см. ].
Все присоединенные разделяемые сегменты памяти отсоединяются и в связанных с ними структурах данных значения полей shm_nattach уменьшаются на 1.
В каждом семафоре, для которого у процесса имеется значение semadj, это значение прибавляется к полю semval.
Если процесс удерживал в памяти сегмент команд, данных или всего себя целиком, то удержание отменяется [см. ].
Если включен режим сбора статистической информации, то в файл сбора статистики помещается запись с информацией о процессе [см. ].
Если идентификатор процесса, идентификатор группы терминала и идентификатор группы процессов у процесса, вызвавшего exit, совпадают, то всем процессам с тем же идентификатором группы процессов посылается сигнал SIGHUP.
Родительскому процессу посылается сигнал SIGCLD (завершение порожденного процесса).
C-функция exit перед уничтожением процесса может выполнять некоторые терминирующие действия, например, завершение профилирования. Функция _exit немедленно уничтожает вызвавший процесс.
СМ. ТАКЖЕ
, , , , , , .
ПРЕДОСТЕРЕЖЕНИЯ
См. ПРЕДОСТЕРЕЖЕНИЯ в .
ДИАГНОСТИКА
Диагностика отсутствует, так как из системного вызова exit управление никогда не возвращается.
ИМЯ
exit, _exit - зaвepшaют пpoцecc
СИНТАКСИС
void exit(status) int status;
void _exit(status) int status;
ОПИСАНИЕ
exit зaвepшaeт тeкyщий пpoцecc. Bce фaйлы, oткpытыe тeкyщим пpoцeccoм, зaкpывaютcя.
Ecли oтeц тeкyщeгo пpoцecca выпoлняeт в дaнный мoмeнт cиcтeмный вызoв wait, oн извeщaeтcя o зaвepшeнии cынa и eмy пepeдaютcя млaдшиe 8 бит (т.e. биты 0377) status; cм. wait(3). Ecли oтeц нe нaxoдитcя в oжидaнии зaвepшeния cынa, cтaтyc зaвepшeния бyдeт пepeдaн eмy, кoгдa oн выпoлнит wait(3).
Ecли oтeц тeкyщeгo пpoцecca нe выпoлняeт ceйчac wait, зaвepшeниe тeкyщeгo пpoцecca блoкиpyeтcя. Taкoй пpoцecc тoлькo зaнимaeт мecтo в тaблицe пpoцeccoв и нe тpeбyeт для ceбя ничeгo в aдpecныx пpocтpaнcтвax ядpa или пoльзoвaтeля. Зaнимaeмoe им мecтo в тaблицe пpoцeccoв мoжeт быть чacтичнo зaнятo yчeтнoй инфopмaциeй (cм. ) для иcпoльзoвaния cиcтeмным вызoвoм times(3).
ID oтцa для вcex cынoвeй тeкyщeгo пpoцecca и вcex пpoцeccoв, зaвepшeниe кoтopыx блoкиpoвaнo, cтaнoвитcя paвным 1. Этo oзнaчaeт, чтo oни cтaли пoтoмкaми инициaлизиpyющeгo пpoцecca (cм. ).
Kaждый пpиcoeдинeнный к тeкyщeмy пpoцeccy ceгмeнт paздeляeмoй пaмяти oтcoeдиняeтcя, и знaчeниe shm_mattach в cooтвeтcтвyющeй cтpyктype дaнныx yмeньшaeтcя нa 1.
Для кaждoгo ceмaфopa, y кoтopoгo тeкyщий пpoцecc ycтaнoвил знaчeниe semadj (cм. semop(3)), знaчeниe semadj дoбaвляeтcя к знaчeнию semval этoгo ceмaфopa.
Ecли тeкyщий пpoцecc имeл блoкиpoвaнный в пaмяти ceгмeнт инcтpyкций, ceгмeнт дaнныx или oбa ceгмeнтa, выпoлняeтcя unlock (cм. plock(3)).
Ecли дeйcтвyeт cиcтeмный yчeт, в yчeтный фaйл бyдeт cдeлaнa зaпиcь o зaвepшeнии пpoцecca; cм. .
Ecли y тeкyщeгo пpoцecca eгo ID, ID гpyппы пpoцeccoв и ID тepминaльнoй гpyппы coвпaдaют, вceм пpoцeccaм, имeющим тaкoй жe ID гpyппы пpoцeccoв, пocылaeтcя cигнaл SIGHUP.
Bcтpoeннaя фyнкция exit мoжeт дeлaть нeкoтopyю дoпoлнитeльнyю чиcткy cиcтeмныx тaблиц пepeд зaвepшeниeм пpoцecca. Фyнкция _exit oбxoдит эти дeйcтвия и выпoлняeт тoлькo тo, чтo yкaзaнo вышe.
СМ. ТАКЖЕ
, , plock(3), semop(3), signal(3), wait(3)
ПPEДYПPEЖДEНИE
Cм. пpeдyпpeждeниe в signal(3)
НАЗВАНИЕ
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 отрицательно. В стандартный протокол будет выдано сообщение о выходе за границы области определения.
Изложенная процедура обработки ошибок может быть изменена посредством функции .
ИМЯ
export - добавление переменных в среду команд
СИНТАКСИС
export [name[=value]...]
ОПИСАНИЕ
Команда export добавляет переменные в среду всех вызываемых впоследствие команд, т.е. эти переменные являются статическими, они как бы экспортируются в среду командного интерпретатора. Команда export без аргументов сообщает все ранее установленные переменные по команде export. Export является встроенной командой Shell.
НАЗВАНИЕ
Экспортируемые файловые системы
СИНТАКСИС
/etc/exports
ОПИСАНИЕ
Файл /etc/exports описывает файловые системы, экспортируемые клиентам NFS. Он создается администратором системы с помощью текстового редактора и обрабатывается процессом каждый раз по получении запроса на монтирование.
Файл содержит список файловых систем и netgroups(NF) или имен тех машин, которым разрешено удаленное монтирование каждой файловой системы. Имена файловых систем выравниваются по левому краю и сопровождаются списком идентификаторов, разделенных пробелами. Имена выбираются из /etc/netgroups и затем из /etc/hosts. Файловая система без списка идентификаторов экспортируется всем. Символом "#" в файле открываются комментарии, продолжающиеся до конца строки. Строки, открывающиеся пробелом, являются строками продолжения.
Пример:
/usr clients # экспортируется моим клиентам /usr/local # экспортируется всем /usr2 paris peoria phoenix # экспортируется только на ука- # занные машины
ФАЙЛЫ
/etc/exports
ЗАМЕЧАНИЯ
Способ идентификации удаленной системы определяется механизмом пересылки данных по локальной сети.
СМ. ТАКЖЕ
НАЗВАНИЕ
expr - обработка аргументов как выражений
СИНТАКСИС
expr аргумент ...
ОПИСАНИЕ
Команда expr трактует свои аргументы как выражения. Результат записывается на стандартный вывод. Операнды выражения должны быть разделены пробелами. Символы, имеющие для shell'а специальный смысл, должны быть экранированы. Заметим, что 0 возвращается в качестве числа, а не для обозначения пустой цепочки символов. Аргументы, содержащие пробелы или другие специальные символы, должны быть заключены в кавычки. Перед целыми числами может стоять знак минус. Внутреннее представление целых чисел - 32-битное, в дополнительном коде.
Ниже приведен список знаков операций в порядке возврастания приоритетов, операции с равным приоритетом заключены в фигурные скобки. Перед символами, которые должны быть экранированы, стоит \.
выражение \| выражение Если первое выражение не пустое и не нулевое, то оно служит результатом; в противном случае - второе выражение.
выражение \& выражение Если оба выражения не пустые и не нулевые, то результатом служит первое выражение; в противном случае - 0.
выражение { =, \>, \>=, \ Если оба выражения - целые, они сравниваются как числа; в противном случае - как цепочки символов. Если условие истинно, результатом служит 1; в противном случае - 0.
выражение { +, - } выражение Сложение и вычитание целочисленных аргументов.
выражение { \*, /, % } выражение Умножение, деление и получение остатка от деления целочисленных аргументов.
выражение : выражение Оператор сопоставления : сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Синтаксис регулярного выражения тот же, что и в редакторе , за исключением того, что все шаблоны трактуются как "закрепленные" и символ ^ не имеет специального значения. Обычно оператор сопоставления возвращает число успешно сопоставленных символов (0 при неудаче). Можно применять конструкцию \( ... \), чтобы выделить часть первого аргумента.
ПРИМЕРЫ
Увеличение на 1 shell-переменной a.
a=`expr $a + 1`
НАЗВАНИЕ
getgrent, getgrgid, getgrnam, setgrent, endgrent, fgetgrent - получение информации из файла групп
СИНТАКСИС
#include <grp.h>
struct group *getgrent ( )
struct group *getgrgid (gid) int gid;
struct group *getgrnam (name) char *name;
void setgrent ( )
void endgrent ( )
struct group *fgetgrent (f) FILE *f;
ОПИСАНИЕ
Каждая из функций getgrent, getgrgid и getgrnam возвращает указатель на структуру, содержащую отдельные поля из строки файла /etc/group. Эта структура описана во включаемом файле :
struct group { char *gr_name; /* Имя группы */ char *gr_passwd; /* Зашифрованный пароль группы */ int gr_gid; /* Числовой идентификатор группы */ char **gr_mem; /* Вектор указателей на имена членов группы */ };
При первом обращении к функции getgrent возвращается указатель на структуру, содержащую данные из первой строки файла групп. При каждом следующем обращении возвращается указатель на структуру, содержащую данные из следующей строки файла. Таким образом, эта функция может использоваться для поиска нужной информации в файле /etc/group.
Функция getgrgid просматривает строки файла групп, начиная с первой, до тех пор, пока не будет найдена группа, числовой идентификатор которой совпадает с аргументом gid. Результатом функции является указатель на структуру с информацией об этой группе.
Функция getgrnam производит поиск группы с именем, совпадающим с аргументом name, и возвращает указатель на структуру с информацией об этой группе. Если во время чтения будет достигнут конец файла или будет обнаружена ошибка, то перечисленные функции возвращают пустой указатель NULL.
Функция setgrent служит для позиционирования на начало файла групп, чтобы можно было осуществить повторный просмотр.
Функция endgrent используется для закрытия файла /etc/ group по окончании обработки.
Функция fgetgrent действует аналогично getgrent, но информация выбирается не из файла /etc/group, а из потока ввода f, содержимое которого имеет формат файла групп.
ФАЙЛЫ
/etc/group
СМ. ТАКЖЕ
, , .
ДИАГНОСТИКА
В случае ошибки или достижения конца файла описанные функции возвращают NULL.
ПРЕДОСТЕРЕЖЕНИЯ
Описанные функции используют стандартный пакет ввода/ вывода, что приводит к неожиданному увеличению размера программ, не использующих стандартный ввод/вывод.
ОГРАНИЧЕНИЯ
Значения, возвращаемые описанными функциями, указывают на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова. Поэтому, если необходимо сохранить полученную с помощью функций информацию, следует скопировать ее.
НАЗВАНИЕ
getpwent, getpwuid, getpwnam, setpwent, endpwent, fgetpwent - получение элементов файла паролей
СИНТАКСИС
#include <pwd.h>
struct passwd *getpwent ( )
struct passwd *getpwuid (uid) int uid;
struct passwd *getpwnam (name) char *name;
void setpwent ( )
void endpwent ( )
struct passwd *fgetpwent (f) FILE *f;
ОПИСАНИЕ
Каждая из функций getpwent, getpwuid и getpwnam возвращает указатель на структуру типа passwd, содержащую разложенную на поля строку файла паролей /etc/passwd. Структура описана во включаемом файле <pwd.h>:
struct passwd { char *pw_name; char *pw_passwd; int pw_uid; int pw_gid; char *pw_age; char *pw_comment; char *pw_gecos; char *pw_dir; char *pw_shell; };
По поводу смысла полей структуры см. .
При первом вызове функция getpwent возвращает указатель на первую структуру типа passwd в файле; при следующем вызове возвращается указатель на следующую структуру; поэтому последовательные вызовы функции можно использовать для просмотра всего файла. Функция getpwuid ищет с начала файла строку, содержащую заданный идентификатор пользователя uid, и возвращает указатель на структуру, соответствующую искомой строке. Функция getpwnam ищет с начала файла строку, содержащую специфицированное входное имя name и возвращает указатель на соответствующую структуру. В случае неудачного поиска (в том числе из за ошибки чтения) описанные функции возвращают пустой указатель NULL.
Вызов функции setpwent приводит к переустановке указателя чтения на начало файла паролей, то есть после этого вызова можно снова повторить просмотр всего файла. Функция endpwent служит для закрытия файла паролей.
Функция fgetpwent возвращает указатель на очередную структуру типа passwd в потоке f, удовлетворяющем формату файла /etc/passwd.
ФАЙЛЫ
/etc/passwd
СМ. ТАКЖЕ
, , .
ДИАГНОСТИКА
В случае неудачного поиска (в том числе из за ошибки чтения) возвращается пустой указатель NULL.
ПРЕДОСТЕРЕЖЕНИЯ
Описанные функции используют стандартный пакет ввода/ вывода, что приводит к неожиданному увеличению размера программ, не использующих стандартный ввод/вывод.
ОГРАНИЧЕНИЯ
Значения, возвращаемые описанными функциями, указывают на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова. Поэтому, если необходимо сохранить полученную с помощью функций информацию, следует скопировать ее.
НАЗВАНИЕ
getutent, getutid, getutline, pututline, setutent, endutent, utmpname - доступ к utmp-файлу
СИНТАКСИС
#include <sys/types.h>
#include <utmp.h>
struct utmp *getutent ( )
struct utmp *getutid (id) struct utmp *id;
struct utmp *getutline (line) struct utmp *line;
void pututline (utmp) struct utmp *utmp;
void setutent ( )
void endutent ( )
void utmpname (file) char *file;
ОПИСАНИЕ
Результатом функций getutent, getutid и getutline является указатель на структуру следующего типа:
struct utmp { char ut_user[8]; /* Входное имя пользователя */ char ut_id[4]; /* Идентификатор из файла /etc/inittab (обычно номер линии) */ char ut_line[12]; /* Имя устройства (console, tty xx) */ short ut_pid; /* Идентификатор процесса */ short ut_type; /* Тип элемента */ struct exit_status { short e_termination; /* Системный код завершения процесса */ short e_exit; /* Пользовательский код завер- шения */ } ut_exit; /* Код завершения процесса, поме- ченного как DEAD_PROCESS */ time_t ut_time; /* Время создания элемента */ };
Функция getutent читает следующий элемент из файла типа utmp. Если файл еще не открыт, он открывается. При достижении конца файла выполнение функции завершается неудачей.
Функция getutid, начиная с текущей позиции, разыскивает элемент utmp-файла, в котором поле ut_type соответствует значению id->ut_type. Если компонент id->ut_type равен RUN_LVL, BOOT_TIME, OLD_TIME, или NEW_TIME, то требуется точное равенство типов. Если же компонент id->ut_type равен INIT_PROCESS, LOGIN_PROCESS, USER_PROCESS, или DEAD_PROCESS, то функция getutid вернет указатель на первый элемент, тип которого равен одному из четырех перечисленных, и поле ut_id соответствует значению id->ut_id. Функция getutid завершается неудачей, если ничего не находит до конца файла.
Функция getutline, начиная с текущей позиции, разыскивает элемент utmp-файла, тип которого равен LOGIN_PROCESS или USER_PROCESS, а поле ut_line соответствует значению line->ut_line. Функция getutline завершается неудачей, если ничего не находит до конца файла.
Функция pututline записывает указанную utmp-структуру в utmp-файл. При этом для поиска нужного места используется функция getutid, если обнаруживается, что текущая позиция не является подходящей. Предполагается, что пользователь, перед тем как обратиться к pututline, установил нужную текущую позицию с помощью одной из функций getut. Если это сделано, pututline не будет производить поиск. Если pututline не обнаружит подходящего места для нового элемента, элемент будет добавлен в конец файла.
Функция setutent устанавливает указатель текущей позиции на начало файла. Это должно быть сделано перед поиском нового элемента, если предполагается, что поиск должен проводиться во всем файле.
Функция endutent закрывает открытый файл.
Функция utmpname позволяет изменить имя обрабатываемого файла с /etc/utmp на любое другое. Предполагается, что чаще всего этим другим именем будет /etc/wtmp. Если файл не существует, он не будет создаваться до первого обращения к нему. Функция utmpname не отрывает файл, она только закрывает открытый файл и запоминает имя нового файла.
ФАЙЛЫ
/etc/utmp /etc/wtmp
СМ. ТАКЖЕ
, .
ДИАГНОСТИКА
При ошибке ввода/вывода возвращается пустой указатель (NULL). Ошибка чтения может быть вызвана отсутствием прав доступа или достижением конца файла.
ПРИМЕЧАНИЯ
Элемент, к которому было последнее обращение, сохраняется в статической структуре, поэтому доступ к нескольким элементам требует копирования структур. При каждом обращении к getutid или getutline вначале анализируется статическая структура. Если она оказывается подходящей, никакого поиска не производится. Чтобы использовать getutline для поиска нескольких вхождений, необходимо очищать статическую структуру после успешного поиска, иначе getutline будет возвращать все время одно и то же. Из правила очистки структуры перед последующим чтением есть одно исключение. Если неявное чтение при pututline обнаруживает, что оно находится на нужном месте в файле, то содержимое статической структуры, возвращаемой getutent, getutid или getutline, не нужно очищать, если пользователь только поменял ее содержимое и передал указатель функции pututline.
Все функции пользуются стандартным буферизованным вводом/выводом, однако pututline использует нестандартный небуферизованный вывод, чтобы разрешить нескольким процессам модифицировать файлы utmp и wtmp.
НАЗВАНИЕ
perror, errno, sys_errlist, sys_nerr - системные сообщения об ошибках
СИНТАКСИС
void perror (s) char *s;
extern int errno;
extern char *sys_errlist [];
extern int sys_nerr;
ОПИСАНИЕ
Функция perror формирует в стандартном протоколе сообщение, которое описывает последнюю ошибку, случившуюся во время выполнения системного вызова или библиотечной функции. Сначала выдается цепочка-аргумент s, затем двоеточие и пробел, затем собственно сообщение и символ перевода строки (однако, если цепочка s пуста, двоеточие не выдается). Чаще всего аргумент s включает имя программы, в которой возникла ошибка. Код ошибки извлекается из внешней переменной errno, которой он присваивается при возникновении ошибки, и которая не изменяется вызовами, не приведшими к ошибке.
Чтобы упростить нестандартное форматирование сообщений, предоставляется массив текстов сообщений sys_errlist; для получения текста сообщения без символа перевода строки можно использовать errno в качестве индекса в этом массиве. Sys_nerr - число сообщений в массиве; это значение следует проверять, поскольку новые коды ошибок могут быть добавлены в систему без соответствующей коррекции сообщений.
СМ. ТАКЖЕ
.