Man pages на русском

         

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, указывает на один и тот же статический массив, содержимое которого полностью изменяется после каждого вызова.



DRAND48(3C)


НАЗВАНИЕ

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


Первым этапом вычисления возвращаемого значения для любой из функций drand48, erand48, lrand48, nrand48, mrand48 или jrand48 является генерация очередного 48 битного значения X[i]. Далее из него берутся старшие биты в количестве, определяемом типом требуемого данного, которые и преобразуются в возвращаемое значение.

Функции drand48, lrand48 и mrand48 сохраняют последнее сгенерированное 48-битное значение X[i] во внутреннем буфере - вот почему они должны быть инициализированы перед своим вызовом. Для функций же erand48, nrand48 и jrand48 вызывающая программа должна сама резервировать память под очередное значение X[i], передаваемое при вызове как аргумент. Эти функции инициализации не требуют; вызывающая программа должна просто поместить желаемое начальное значение X[i] в массив из трех 16-битных слов и передать тот как аргумент. Посредством использования различных аргументов функции erand48, nrand48 и jrand48 позволяют различным модулям большой программы генерировать несколько независимых потоков псевдослучайных чисел; другими словами, последовательность чисел в каждом потоке не зависит от того, как часто программа вызывалась для генерации чисел других потоков.

Инициализирующая функция srand48 устанавливает старшие 32 бита значения X[i] равными 32-м битам своего аргумента. Независимо от значения старших бит, младшие 16 бит X[i] устанавливаются равными 0x330E.

Инициализирующая функция seed48 устанавливает значение всех 48 бит X[i] по значению аргумента - массива из трех 16-битных слов. Предыдущее значение X[i] копируется в 48-битный внутренний буфер, используемый только функцией seed48. Возвращаемое функцией seed48 значение представляет собой указатель на этот буфер. Возвращаемый указатель в большинстве случаев игнорируется, однако он может оказаться полезным при перезапуске программы с данной точки в будущем. Для этого, используя указатель, следует извлечь и сохранить последнее значение X[i], которое затем, при перезапуске, употребить для повторной инициализации с помощью seed48.

Инициализирующая функция lcong48 дает пользователю возможность указать начальное значение X [i], значение коэффициента a и аддитивной константы c. В массиве, являющемся ее аргументом, элементы param [0-2] определяют X [i], элементы param [3-5] - коэффициент a и, наконец, param [6] - 16-битную константу c. После вызова lcong48 восстановить "стандартные" значения коэффициента a и константы c, описанные выше, можно путем вызова какой либо из функций srand48 или seed48.

ПРИМЕЧАНИЯ

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

long irand48 (m) unsigned short m;

long krand48 (xsubi, m) unsigned short xsubi [3], m;

Функции irand48 и krand48 возвращают неотрицательные целые числа типа long, равномерно распределенные в интервале [0, m-1].

СМ. ТАКЖЕ

.









ECHO(1)


НАЗВАНИЕ

echo - выдача аргументов командной строки на стандартный вывод

СИНТАКСИС

echo [аргумент ...]

ОПИСАНИЕ

Команда echo выдает на стандартный вывод свои аргументы, разделяя их пробелами и выдавая в конце символ перевода строки. Кроме того, поддерживаются следующие C-подобные соглашения о задании управляющих символов (не забывайте об особой трактовке shell'ом символа \):

\b Как правило - символ "забоя"; на терминалах типа Dasher - перемещение в левый верхний угол экрана. \c Не выдавать в конце символ перевода строки. \f Переход к новой странице. \n Перевод строки. \r Возврат каретки. \t Табуляция. \v Вертикальная табуляция. \\ Сам символ \. \0n Здесь n - восьмеричный ASCII-код 8-битного символа, состоящий не более чем из трех цифр.

Команда echo полезна для вывода сообщений из командных файлов и для посылки известных данных в канал.

СМ. ТАКЖЕ

sh(1).

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

ОГРАНИЧЕНИЯ

При задании кода символа посредством конструкции \0n перед n обязательно должен стоять 0. Например, команда

echo 'WARNING:\07'

выведет на терминал WARNING: и "прозвенит". Кавычки (одинарные или двойные) необходимы для того, чтобы защитить символ \ от интерпретации shell'ом. Еще один способ - записать символ \ дважды.

Восьмеричные коды символов приведены в .



ECVT(3C)


НАЗВАНИЕ

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(1)


НАЗВАНИЕ

ed - текстовый редактор

СИНТАКСИС

ed [-s] [-p приглашение] [файл]

ОПИСАНИЕ

Текстовый редактор ed является стандартным для UNIX систем. Если в командной строке задан файл, он считывается в буфер (как будто была выполнена команда e, см. ниже) и его можно редактировать.

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

-s Подавить печать количества символов при выполнении команд e, r и w, выдачу диагностики команд e и q и префикса ! после выполнения конструкции !команда. -p приглашение Задать в качестве приглашения свою цепочку символов.

Редактор ed работает с копией файла; изменения, производимые над копией, отображаются на файл только после выполнения команды записи w. Копия текста размещается редактором во временном файле, называемом буфером. Буфер только один.

Редактор поддерживает спецификацию формата текстового файла [см. ]. Если первая строка редактируемого файла содержит спецификацию формата, а у терминала, с которого вызван ed, задана характеристика -tabs или tab3 [см. ], то при просмотре файла нужные позиции табуляции будут установлены автоматически. Например, если в первой строке файла содержится:

то позиции табуляции будут установлены в колонках 5, 10, 15, а максимальная длина строки составит 72. Отметим, что при вводе текста, независимо от спецификации формата, происходит замена символов табуляции пробелами до ближайшей колонки, кратной восьми.

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

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

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

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

1.1 Обычный символ (не входящий в перечень из пункта 1.2, см. ниже) - это односимвольное РВ, которое успешно сопоставляется с указанным символом.

1.2 Если за символом \ следует любой специальный символ, то этот последний теряет свой специальный смысл. Данная комбинация определяет односимвольное РВ, успешно сопоставляющееся со специальным символом. Специальными символами являются:


. * [ \ Эти символы имеют специальный смысл, за исключением случая, когда они заключены в квадратные скобки (см ниже 1.4).

^ Символ имеет специальный смысл в начале всего РВ (см. ниже 3.1) или в квадратных скобках сразу после открывающей скобки (см. 1.4).

$ Символ имеет специальный смысл в конце всего РВ (см. ниже 3.2).

разделители РВ Символы, использующиеся для ограничения (разделители) целого РВ, являются специальными для этого РВ (например, символ / в команде g).

1.3 Точка (.) - односимвольное РВ, успешно сопоставляющееся с любым символом, кроме перевода строки.

1.4 Непустая цепочка символов, заключенная в квадратные скобки [ ] - односимвольное РВ, которое успешно сопоставляется с любым символом из этой цепочки. Если цепочка начинается с символа ^, то РВ успешно сопоставляется с любым символом, не входящим в этот набор и отличающимся от перевода строки. Если символ ^ располагается не в начале цепочки, он теряет свой специальный смысл. Диапазон символов можно задать с помощью знака -. Например, РВ [0-9] эквивалентно [0123456789]. Минус теряет свой специальный смысл, если он стоит в начале (быть может, после ^) или в конце цепочки символов. Закрывающая квадратная скобка не рассматривается как окончание цепочки символов, если она стоит в начале (быть может, после ^). Таким образом, РВ [ ]a-f] определяет либо закрывающую квадратную скобку, либо любой символ от a до f включительно. Внутри квадратных скобок символы, перечисленные в 1.2, теряют свой специальный смысл.

Для построения РВ из односимвольных РВ могут быть использованы следующие правила:

2.1 Односимвольное РВ есть РВ, успешно сопоставляющееся по правилам, описанным выше.

2.2 Односимвольное РВ с последующим символом * есть РВ, успешно сопоставляющееся с любым (в том числе и нулевым) числом вхождений односимвольного РВ. При наличии альтернатив выбирается самая длинная из начинающихся как можно левее успешно сопоставленных цепочек символов.

2.3 Односимвольное РВ, после которого следуют конструкции \{m\}, \{m,\} или \{m,n\}, есть РВ, успешно сопоставляющееся с определенным числом вхождений односимвольного РВ. Значения m и n должны быть неотрицательными целыми, меньшими 256; \{m\} означает ровно m вхождений; \{m,\} - по крайней мере m вхождений; \{m,n\} - любое число вхождений от m до n включительно.

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

2.5 РВ, заключенное между конструкциями \( и \), есть РВ, которое успешно сопоставляется с теми же цепочками символов, что и исходное.

2.6 Выражение \n успешно сопоставляется с той же цепочкой символов, что и (под)выражение, заключенное в экранированные скобки \( и \), и расположенное ранее в том же РВ. Здесь n - это цифра; соответствующее подвыражение начинается с n-го вхождения конструкции \( в РВ. Например, выражение ^\(.*\)\1$ успешно сопоставляется со строками, состоящими из двух одинаковых цепочек символов.

Наконец, на РВ можно наложить ограничение, чтобы сопоставленная цепочка символов примыкала к одному или обоим концам строки:

3.1 Если перед РВ стоит символ ^, то сопоставление должно выполняться с начала строки.

3.2 Если после РВ стоит символ $, то сопоставление должно выполняться до конца строки.

Конструкция ^РВ$ задает шаблон целой строки.

Пустое РВ (//) эквивалентно последнему обработанному РВ.

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



Символ . обозначает текущую строку. Символ $ обозначает последнюю строку буфера. Десятичное число n обозначает n-ую строку буфера. Пара символов ' x адресует строку, помеченную маркером x. Маркер - это малая буква, ставится с помощью команды k (см. ниже). РВ, заключенное между символами /, адресует первую из строк, успешно сопоставленных с РВ при движении вперед. Процесс сопоставления начинается со строки, следующей за текущей. Если до конца буфера подходящей строки не нашлось, сопоставление продолжается с начала буфера до текущей строки включительно, то есть просматривается весь буфер. Конструкция ?РВ? аналогична предыдущей, только просмотр выполняется в обратном направлении, начиная со строки, расположенной перед текущей. Если за адресом следует знак + или -, и далее стоит десятичное число, то адрес увеличивается (или уменьшается) на указанное число строк. Знак + можно опускать. Если адрес начинается с + или -, то смещение производится относительно текущей строки; так, адрес -5 эквивалентен .-5. Если адрес оканчивается на + или -, то к адресу прибавляется (из него вычитается) 1. Согласно этому и предыдущему правилу адрес из одного символа - соответствует строке, расположенной перед текущей. (В более ранних версиях редактора ту же роль играл символ ^). Более того, последовательности знаков + или - в конце адреса обладают эффектом накопления. Так, -- соответствует адресу текущей строки, уменьшенному на 2. Запятая обозначает пару адресов 1,$, а точка с запятой - пару адресов .,$.

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

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

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

Обычно недопустимо появление более одной команды в строке. Однако некоторые команды (такие как e, f, r или w) могут употребляться с суффиксами l, n или p. В этом случае текущая строка распечатывается или нумеруется. Далее эти команды будут обсуждены.



(.)a текст . Команда добавления читает данный текст и вставляет его после адресуемой строки. Текущей становится последняя из вставленных строк или, если такой нет, адресуемая строка. Адрес 0 в данном случае является корректным и обозначает вставку в начало буфера. Длина строк текста не должна превышать 256 (включая символ перевода строки).

(.)c текст . Команда изменения уничтожает адресуемые строки и вместо них вставляет текст. Текущей становится последняя из вставленных строк или, если такой нет, первая неудаленная строка.

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

e файл Эта команда уничтожает текущее содержимое буфера и читает новое содержимое из указанного файла. Текущей становится последняя прочитанная строка. Если имя файла не указано, то используется текущее имя файла (см. команду f). Количество прочитанных сим- волов выводится на экран. Файл становится текущим и может использоваться в последующих командах e, r и w в качестве подразумеваемого. Если вместо файла указан символ !, остаток строки рассматривается как команда shell'а [см. ], вывод которой размещается в буфере редактора. Такая команда не изменяет текущее имя файла.

E файл Эта команда аналогична команде e, за исключением того, что не производится проверки изменения буфера после последней команды w.

f файл Если файл задан, он становится текущим, иначе выдается текущее имя файла.

(1,$)g/РВ/список_команд При выполнении этой глобальной команды сначала ищутся строки, соответствующие РВ. Затем каждая из найденных строк по очереди становится текущей и для нее выполняется заданный список_команд. Первая команда из списка должна располагаться на той же строке, что и g; все строки, кроме последней, должны завершаться символом \. В списке могут встречаться команды a, c, i и соответствующий им текст. Точка, завершающая режим ввода, в последней строке списка_команд может быть опущена. Пустой список_команд эквивалентен команде p. В списке_команд не могут встречаться команды g, G, v и V.



(1,$)G/РВ/ При выполнении интерактивной глобальной команды сначала ищутся строки, соответствующие РВ. Затем каждая из найденных строк по очереди становится текущей, выводится на экран и для нее можно выполнить одну команду, отличную от a, c, i, g, G, v, V. Перевод строки рассматривается как пустая команда. Символ & обозначает повторение последней непустой команды, выполненной в G. Заметим, что команды при выполнении G могут адресовать любую строку буфера. Команда G может быть прервана нажатием клавиши прерывания.

h

Справочная команда выдает краткое сообщение о последней ошибке после ?-диагностики.

H

Эта команда переключает режим вывода сообщений об ошибках. Первоначально сообщения отключены.

(.)i текст . Команда вставки аналогична команде добавления a, только вставка производится перед указанной строкой и адрес 0 недопустим.

(.,.+1)j Команда об единения соединяет последовательность строк в одну, удаляя промежуточные символы перевода строки. Если задан только один адрес, команда ничего не делает.

(.)kx Команда присваивает указанной строке имя x, которое должно состоять из одной малой буквы. После этого данная строка может быть адресована как 'x. Текущая строка остается прежней.

(.,.)l Адресуемые строки распечатываются следующим образом: некоторые непечатные символы (такие как табуляция или символ забоя) выводятся в соответствующей мнемонике, остальные непечатные символы печатаются в восьмеричном виде. Длинные строки разрезаются. Команду l можно добавить в качестве суффикса к любой другой команде, кроме e, f, r и w.

(.,.)ma Команда перемещает адресуемые строки и вставляет их после строки с адресом a. Если на месте a задан 0, строки перемещаются в начало буфера. Адрес a не должен попадать в диапазон перемещаемых строк. Текущей становится последняя перемещенная строка. Отметим, что только команды m и t (см. ниже) требуют трех адресов, один из которых указывается после команды.

(.,.)n Распечатывает адресуемые строки, располагая перед ними номер и символ табуляции. Текущей становится последняя распечатанная строка. Команду n можно добавить в качестве суффикса к любой другой команде, кроме e, f, r и w.



(.,.) p Распечатывает адресуемые строки, последняя из которых становится текущей. Команду p можно добавить в качестве суффикса к любой другой команде, кроме e, f, r и w. Например, команда dp удалит текущую строку и выведет новую текущую строку.

P Включить/выключить приглашение * перед следующими командами. Первоначально приглашение отсутствует.

q Команда выхода из редактора. Автоматической записи в файл не происходит (см. ДИАГНОСТИКУ).

Q Выход из редактора без проверки изменения буфера после последней команды w.

($)r файл Указанный файл прочитывается и располагается после адресованной строки. Если имя файла отсутствует, то используется текущее имя файла (см. команды e и f). Команда r не изменяет текущее имя файла, кроме того случая, когда имя файла еще не установлено. Адрес 0 допустим, в этом случае прочитанный файл располагается в начале буфера. Если чтение прошло успешно, то распечатывается количество прочитанных символов. Текущей становится последняя прочитанная строка. Если вместо файла указан символ !, остаток строки рассматривается как команда shell'а [см. ], вывод которой вставляется в буфер редактора. Например, команда $r !ls вставит список файлов текущего каталога в конец редактируемого файла. Подобная команда не изменяет текущее имя файла.

(.,.)s/РВ/заменяющая_цепочка/ или (.,.)s/РВ/заменяющая_цепочка/g или (.,.)s/РВ/заменяющая_цепочка/n n = 1 - 512 Команда замены производит поиск по шаблону в указанном диапазоне адресов. Для каждой строки, удовлетворяющей шаблону, выполняется замена успешно сопоставленных не перекрывающихся цепочек символов на заменяющую_цепочку: всех, если используется индикатор глобальной замены g, n первых, если указано число, и только первой в противном случае. При отсутствии успешных сопоставлений выдается сообщение об ошибке. Текущей становится последняя строка, в которой была произведена замена. Любой символ, отличный от пробела и перевода строки, может быть использован вместо / в качестве разделителя РВ и заменяющей_цепочки.

Символ &, входящий в заменяющую_цепочку, заменяется на цепочку, сопоставленную с РВ в текущей строке. Специальное значение символа & можно отменить, используя \. Имеется и более общая возможность: конструкция \n, где n - цифра, заменяется на цепочку, сопоставленную в текущей строке с РВ, заключенным между n-й открывающей скобкой \( и соответствующей закрывающей скобкой \). Если заменяющая_цепочка состоит из одного символа %, то под этим подразумевается заменяющая_цепочка, использованная в предыдущей команде замены. Символ % теряет специальное значение, если в заменяющей_цепочке он не один, или если перед ним стоит символ \.

Строку можно разрезать, вставив в нее символ перевода строки. В заменяющей_цепочке переводу строки должен предшествовать символ \. Такая замена не допускается в рамках команд g и v.



(.,.) ta Эта команда аналогична команде m, только выполняет не перемещение, а копирование адресуемых строк и вставку их после строки с адресом a (который может равняться 0). Текущей становится последняя строка копии.

u Отмена (откатка) последнего изменения содержимого буфера, вызванного командами a, c, d, g, i, j, m, r, s, t, v, G или V.

(1,$)v/РВ/список_команд Эта команда аналогична глобальной команде g и отличается лишь тем, что список_команд выполняется только для строк, не удовлетворяющих РВ.

(1,$)V/РВ/ Эта команда аналогична интерактивной глобальной команде G и отличается лишь тем, что на первом этапе ищутся строки, не удовлетворяющие РВ.

(1,$)w файл Команда записи адресуемых строк в указанный файл. Если файл не существует, то он создается с режимом доступа 666 (доступен всем на чтение и запись), если только маска создания файлов [см. ] не изменяет этот режим. Текущее имя файла не изменяется, если до этого оно было каким-либо способом установлено. Если файл не указан, используется текущее имя файла (см. команды e и f). Текущей остается прежняя строка. Если команда завершается успешно, выводится количество записанных символов. Если вместо файла указан символ !, остаток строки рассматривается как команда shell'а [см. ], стандартным вводом которой являются адресуемые строки. Подобная команда не изменяет текущее имя файла.

($)= Распечатывается номер адресуемой строки. Текущей остается прежняя строка.

!команда Строка после ! рассматривается как команда shell'а [см. ]. Если в этой строке встречается неэкранированный символ %, он заменяется на текущее имя файла. Если символ ! является первым символом команды, он заменяется текстом предыдущей команды. Так, комбинация !! приведет к повторному выполнению предыдущей команды. Если в команду производилась любая из двух перечисленных подстановок, распечатывается окончательный текст команды. Текущей остается прежняя строка.

(.+1)перевод_строки "Команда", состоящая только из адреса, вызывает печать адресуемой строки, которая становится текущей. Пустая команда, состоящая только из символа перевода строки, эквивалентна конструкции .+1p; она полезна для продвижения по буферу.



Если нажата клавиша прерывания, редактор ed выдает сообщение об ошибке ? и переходит в свой командный режим.

Некоторые ограничения на размеры: не более 512 символов в строке, не более 256 символов в списке_команд при глобальных действиях и не более 64 символов в именах файлов. Ограничение на количество строк зависит от размеров доступной памяти; каждая строка требует дополнительно 1 (полу)слово.

При чтении файла ed отбрасывает нулевые байты.

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

Если завершающий разделитель для РВ или заменяющей_цепочки непосредственно предшествует переводу строки, то такой разделитель может быть опущен. В этом случае распечатывается содержимое адресуемой строки. Следующие пары команд эквивалентны:

s/s1/s2 s/s1/s2/p g/s1 g/s1/p ?s1 ?s1?

ФАЙЛЫ

/usr/tmp Подразумеваемый каталог для хранения времен- ных файлов. $TMPDIR Каталог, используемый вместо /usr/tmp, если переменная окружения TMPDIR существует и име- ет непустое значение. ed.hup В этом файле сохраняется рабочий файл при внезапном освобождении терминальной линии.

СМ. ТАКЖЕ

edit(1), , , , , , sed(1), , , .

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

ДИАГНОСТИКА

? При обнаружении ошибки в команде. ?файл Если файл недоступен.

Чтобы получить более подробные диагностические сообщения, следует пользоваться командами h и H.

Если, при наличии несохраненных изменений, делается попытка разрушить содержимое буфера командой e или q, ed выдает предупреждение (?) и позволяет продолжить редактирование. В этот момент повторная команда e или q возымеет действие. Опция командной строки -s отменяет проверку наличия изменений.

СЮРПРИЗЫ

Команда ! не должна появляться в списке_команд g и v.

Последовательность \n в РВ не рассматривается как символ перевода строки.

Если стандартный ввод редактора назначен не на терминал, ed завершится после первой же ошибки.









EFL(1)


НАЗВАНИЕ

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 файл

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

-w Не выдавать предупреждения. -# Не включать в порождаемую программу комментарии. -C Включать в порождаемую программу комментарии (режим по умолчанию).

Аргумент с предшествующим знаком равенства определяет опцию EFL, как если бы она встретилась в начале программы в операторе option. Значение опций по умолчанию для конкретной машины может быть выбрано из следующих вариантов: system=unix, system=gcos, или system=cray. Если значение system не задано явно, оно определяется машиной, на которой работает препроцессор. Другие специфические опции определяют стиль ввода/вывода, обработку ошибок, соглашения о символах продолжения, число символов, пакуемых в слово, а также форматы, установленные по умолчанию.

Препроцессор efl лучше всего использовать с компилятором .

СМ. ТАКЖЕ

cc(1), , .



EGREP(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(1)


НАЗВАНИЕ

enable - активация принтеров

СИНТАКСИС

enable принтер ...

ОПИСАНИЕ

Команда enable активирует указанные принтеры, допуская обработку запросов, выданных командой . Для выяснения статуса принтеров служит команда .

ФАЙЛЫ

/usr/spool/lp/*

СМ. ТАКЖЕ

disable(1), , .



END(3C)


НАЗВАНИЕ

end, etext, edata - последние адреса в программе

СИНТАКСИС

extern end; extern etext; extern edata;

ОПИСАНИЕ

Описываемые об екты не являются функциями или переменными, значения которых представляют интерес. Интерес представляют адреса описываемых об ектов. Адресом etext является адрес сразу за концом сегмента команд, адресом edata является адрес сразу за концом области инициализированных данных, адресом end является адрес сразу за концом области неинициализированных данных.

В момент начала выполнения программы ее верхняя граница (адрес сразу за концом сегмента данных) совпадает с адресом end, но верхняя граница может передвинуться при использовании системных вызовов из , функций из , стандартного ввода/вывода [см. ], средств получения временного профиля [см. ] и т.д. Поэтому текущее значение верхней границы программы следует определять при помощи системного вызова sbrk (0) [см. ].

СМ. ТАКЖЕ

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



ENV(1)


НАЗВАНИЕ

env - формирование окружения для выполнения команды

СИНТАКСИС

env [-] [имя=значение ...] [команда аргумент ...]

ОПИСАНИЕ

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

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

СМ. ТАКЖЕ

sh(1). exec(2), , в Справочнике программиста.



ENVIRON(5)


НАЗВАНИЕ

environ - окружение пользователя

ОПИСАНИЕ

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

PATH Последовательность маршрутов, используемых такими командами, как , , и , при поиске файла, у которого известно лишь неполное маршрутное имя. Маршруты отделяются друг от друга двоеточиями (:). Login(1) устанавливает значение PATH=:/bin:/usr/bin. HOME Содержит имя исходного каталога, устанавливаемого по файлу программой при входе пользователя в систему. TERM Тип терминала, для которого должны подготавливаться выводимые данные. Эта информация необходима командам , и др., которые могут использовать специфические возможности терминала конкретного типа. TZ Информация о часовом поясе. Имеет формат xxxnzzz, где xxx - сокращенное название для времени местного часового пояса, n - выраженное в часах отставание от всемирного времени (возможно, отрицательное), а zzz - сокращенное название для летнего времени местного часового пояса, если таковое имеется; например, EST5EDT.

Другие имена могут быть помещены в окружение командой export и оператором присваивания имя=значение языка shell [см. ], а также системным вызовом . Следует избегать конфликтов с shell-переменными, часто экспортируемыми из профайлов: MAIL, PS1, PS2, IFS.

СМ. ТАКЖЕ

, , , .

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



ENVIRON(7)


НАЗВАНИЕ

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:


Jn основан на июльском дне n n основан на июльском дне n Wn.d n 0-ый день недели d Mm.n.d n-ый день недели d в месяце m

Например:

EST5:00:00DT4:00:00;M4.1.0/2:00:00,M10.5.0/2:00:00.

ссылается на tz(7) страницу, введенную вручную, для для большего в TZ. HZ Определяет с численным значением число временных прерываний. Значения этой переменной зависит от технического обеспечения и создано в файле etc/default/login. Если HZ не определен, программы, зависящие от данного значения в герцах, такие как и 0, не будут вычисляться. LANG Определяет область действия языка, с которым хочет работать пользователь. Эта переменная может быть запрошена с применениями и утилитами для определения того, как выводить информацию на экран; какой язык использовать для сообщений, для определения порядка сортировки и других функций, зависящих от языка.

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

name=value

Например, присваивание:

TERM=h29

присваивает переменной Т значение "h29". Новое значение может быть "экспортировано" каждому последовательному вызову командного процессора с помощью экспортирования переменной с командой export (смотри ) или используя .

Пользователи командного С-процессора выполняют присваивание с помощью команды setenv. Например:

setenv TERM h29

Для более полной информации смотрите .

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

Отметим, что среда делается доступной для всех программ как строка массивов. Каждая строка имеет вид:

name=value

где name - имя экспортируемой переменной, и value 3 - текущее значение переменной. Для программ, начинающихся с вызова , среда доступна с помощью внешнего указателя environ. Для других программ собственные переменные среды доступны через вызовы getenv.

СМ. ТАКЖЕ

, , , getenv(2), login(7), , , tz(7)









ERF(3M)


НАЗВАНИЕ

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(1M)


НАЗВАНИЕ

errdead - извлечение из дампа записей об ошибках

СИНТАКСИС

/etc/errdead файл_с_дампом [файл_с_таблицей_имен]

ОПИСАНИЕ

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

Файл_с_дампом задает файл (или память), подлежащий исследованию. Подразумеваемый файл_с_таблицей_имен есть /unix.

ФАЙЛЫ

/dev/mem Память. /unix Файл с системной таблицей имен. /usr/bin/errpt Программа анализа. /usr/tmp/errXXXXXX Временный файл.

СМ. ТАКЖЕ

, .

ДИАГНОСТИКА

Диагностические сообщения могут исходить как от errdead, так и от . В любом случае они не нуждаются в пояснениях.



ERRDEMON(1M)


НАЗВАНИЕ

errdemon - демон регистрации ошибок системы

СИНТАКСИС

/usr/lib/errdemon [файл]

ОПИСАНИЕ

Демон регистрации ошибок системы errdemon собирает записи об ошибках, извлекая их из специального файла /dev/error и помещая в указанный файл. При отсутствии явных указаний записи об ошибках помещаются в файл /usr/adm/errfile. Если файл не существует, он создается, если существует, то записи об ошибках добавляются в конец, так что никакая информация об ошибках не теряется. Errdemon не проводит никакого анализа ошибок, весь анализ перекладывается на программу . Завершение выполнения демона регистрации ошибок происходит по программному сигналу завершения SIGTERM [см. ]. Только суперпользователь может запустить демон регистрации ошибок. В любой момент времени может выполняться не более одного демона регистрации ошибок системы.

ФАЙЛЫ

/dev/error Файл, откуда извлекаются записи об ошибках. /usr/adm/errfile Файл, куда помещаются записи об ошибках системы.

СМ. ТАКЖЕ

, , .

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



ERRFILE(4)


НАЗВАНИЕ

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(7)


НАЗВАНИЕ

error - интерфейс для регистрации ошибок

ОПИСАНИЕ

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

ФАЙЛЫ

/dev/error

СМ. ТАКЖЕ

.



ERRPT(1M)


НАЗВАНИЕ

errpt - обработка зарегистрированных ошибок системы

СИНТАКСИС

errpt [-s дата] [-e дата] [-a] [-p число_страниц] [-f] [файл ...]

ОПИСАНИЕ

Утилита errpt обрабатывает данные, собранные механизмом регистрации ошибок системы [см. ] и генерирует отчет об этих ошибках. Отчетом по умолчанию является сводная информация обо всех ошибках, зарегистрированных в указанных файлах. Опции применяются ко всем файлам и описываются ниже. Если имена файлов не указаны, errpt пытается использовать файл /usr/adm/errfile.

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

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

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

-s датаИгнорировать все записи, занесенные в файлы ранее указанной даты, где дата имеет вид ммддччммгг, такой же, как и в команде . -e дата Игнорировать все записи, занесенные в файлы позже указанной даты, где дата имеет вид, описанный выше. -a Вывести детальный отчет обо всех видах ошибок. -p число_страниц Ограничить размер детального отчета указанным количеством страниц. -f В детальном отчете для блочных устройств выводить информацию только о неисправимых ошибках.

ФАЙЛЫ

/usr/adm/errfile Файл регистрации ошибок системы.

СМ. ТАКЖЕ

, .

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



ERRSTOP(1M)


НАЗВАНИЕ

errstop - терминирование демона регистрации ошибок системы

СИНТАКСИС

/etc/errstop [файл_с_таблицей_имен]

ОПИСАНИЕ

Демон регистрации ошибок терминируется при помощи команды errstop. Эта команда реализована как процедура на языке shell. Посредством определяется идентификатор процесса демона, после чего ему посылается программный сигнал завершения [см. ].

Подразумеваемый файл_с_таблицей_имен есть /unix.

Только суперпользователь может выполнять команду errstop.

ФАЙЛЫ

/unix Файл с системной таблицей имен.

СМ. ТАКЖЕ

.

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

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



EX(1)


ИМЯ

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.

ФАЙЛЫ


/usr/lib/ex3.7strings Сообщения об ошибках /usr/lib/ex3.7recover Команда восстановления /usr/lib/ex3.7preserve Команда сохранения /etc/termcap Описывает возможности терминалов $HOME/.exrc Файл запуска редактора /tmp/Exnnnnn Временный файл редактора /tmp/Rxnnnnn Временный именованный буфер /usr/preserve Каталог сохранения

СМ. ТАКЖЕ

, , , , , termcap(5), .

РАЗРЕШЕНИЕ

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

ЗАМЕЧАНИЕ

Команда undo приводит к потере всех маркеров на измененных и затем восстановленных строках, если в этих отмаркированных строках были изменения.

Команда undo никогда не очищает модифицированное состояние буфера.

Команда z выводит число логических, а не физических строк. Если отображаются длинные строки, это может привести к переполнению экрана.

Если в командной строке использована опция "-", сообщения об ошибках ввода/вывода файла не печатают имя файла.

Отсутствует простой способ выполнения разового просмотра с подавлением регистра.

Данная реализация аргументов для команды next в этом редакторе допускает максимальную длину списка аргументов только 512 байтов.

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

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

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









EXEC(2)


НАЗВАНИЕ

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).


Массив argv содержит указатели на цепочки символов, ограниченные нулевыми байтами. Эти цепочки образуют доступный новому процессу список аргументов. По соглашению, в argv должен присутствовать как минимум первый элемент, указывающий на цепочку символов, равную path (или последнему компоненту path). За последним занятым элементом массива argv должен следовать пустой (нулевой) указатель.

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

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

extern char **environ;

помещается адрес массива указателей на цепочки символов, образующие окружение процесса. С помощью этой переменной (как и с помощью аргумента envp функции main) в новом процессе всегда можно получить доступ к окружению, независимо от использовавшегося варианта системного вызова exec. Разница лишь в том, что в случае вызовов execle и execve окружение нового процесса задается явно, а в остальных случаях наследуется у вызвавшего процесса.

Файлы, открытые в вызвавшем процессе, остаются открытыми в новом процессе, за исключением тех, у которых установлен флаг "закрыть при выполнении вызова exec" [см. ]. Если файл остался открытым, то указатель текущей позиции в файле сохраняется.

Реакция на сигналы сохраняется, за исключением того, что сигналы, которые перехватывались в вызвавшем процессе, вызывают терминирование нового процесса [см. ].

В случае, когда реакция на сигналы устанавливалась вызовом и задавалась как SIG_DFL, SIG_IGN или SIG_HOLD, эта реакция наследуется у вызвавшего процесса. Однако, если сигнал перехватывался, то устанавливается реакция SIG_DFL и все полученные, но не обработанные сигналы этого типа откладываются.

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



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

У нового процесса выключено профилирование.

Кроме того, новый процесс наследует у процесса, вызвавшего exec, следующие характеристики:

Значение поправки к приоритету [см. ]. Идентификатор процесса. Идентификатор родительского процесса. Идентификатор группы процессов. semadj значения [см. ]. Идентификатор группы терминала [см. ]. Режим трассировки [см. ]. Время, оставшееся до срабатывания будильника [см. ]. Текущий рабочий каталог. Корневой каталог. Маска режима создания файлов [см. ]. Ограничение на размер файла [см. ]. Счетчики времени, потраченного для обслуживания этого процесса (tms_utime, tms_stime, tms_cutime, tms_cstime) [см. ]. Блокировки доступа к сегментам файлов[см. и ].

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

[ENOENT] Компонент маршрута нового выполняемого файла не существует. [ENOTDIR] Компонент маршрута нового выполняемого файла не является каталогом. [EACCES] Один из каталогов, перечисленных в маршруте нового выполняемого файла, не доступен для просмотра. [EACCES] Новый выполняемый файл не является обычным файлом. [EACCES] Нет прав на выполнение нового файла. [ENOEXEC] Права на выполнение нового файла есть, но его заголовок не начинается с допустимого магического числа [см. a.out(4)]. [ETXTBSY] Новый выполняемый файл в настоящий момент открыт для записи некоторым процессом. [ENOMEM] Новый процесс требует больше памяти, чем позволяет системное ограничение MAXMEM. [E2BIG] Суммарная длина списка аргументов превышает системное ограничение, равное 5120 байт. [EFAULT] Отсутствует требуемое оборудование. [EFAULT] Некорректные адреса в качестве аргументов. [EAGAIN] Не хватает памяти. [ELIBACC] К требуемой разделяемой библиотеке не разрешен доступ на выполнение. [ELIBEXEC] Попытка непосредственно выполнить разделяемую библиотеку. [EINTR] Во время выполнения вызова exec перехвачен сигнал. [ENOLINK] Аргумент path указывает на удаленный компьютер, связи с которым в данный момент нет. [EMULTIHOP] Компоненты path требуют многократного обращения к удаленным компьютерам.

СМ. ТАКЖЕ

, , , , , , , , , , , , , , a.out(4), .

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

ДИАГНОСТИКА

Возврат из системного вызова exec свидетельствует об ошибке. В таком случае результат равен -1, а переменной errno присваивается код ошибки.









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


ИМЯ

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ты:


пoльзoвaтeльcкyю дoбaвкy к пpиopитeтy пpoцecca (cм. ) ID пpoцecca ID пpoцecca- oтцa ID гpyппы пpoцeccoв знaчeния ceмaфopoв (cм. ) ID тepминaльнoй гpyппы (cм. и signal(3)) флaг тpaccиpoвки (cм. , зaпpoc 0) тaймep пpoцecca (cм. ) тeкyщий кaтaлoг кopнeвoй кaтaлoг мacкy кoдa зaщиты (cм. ) мaкcимaльный paзмep фaйлa (cм. ) tms_utime, tms_stime, tms_cutime, tms_cstime (cм. ).

B пpoгpaммax нa языкe Cи для peaлизaции вызoвa exec мoжнo пoльзoвaтьcя фyнкциями execl и execv. Фyнкция execl пpимeняeтcя тoгдa, кoгдa имя выпoлняeмoгo фaйлa и пepeдaвaeмыe apгyмeнты извecтны зapaнee; oни yкaзывaютcя в видe cимвoльныx cтpoк - apгyмeнтoв фyнкции. Пo coглaшeнию, пepвый apгyмeнт дoлжeн coвпaдaть либo c имeнeм фaйлa, либo c пocлeдним кoмпoнeнтoм этoгo имeни. Пocлeдним apгyмeнтoм в cпиcкe дoлжeн быть нyлeвoй yкaзaтeль.

Фyнкция execv пpимeняeтcя, кoгдa зapaнee нeизвecтнo чиcлo apгyмeнтoв. Apгyмeнтaми в этoм cлyчae являютcя имя фaйлa и мaccив cтpoк, coдepжaщиx пepeдaвaeмыe фaйлy apгyмeнты. Пocлeдним элeмeнтoм мaccивa дoлжeн быть нyлeвoй yкaзaтeль.

Пpoгpaммa нa языкe Cи, пoлyчaющaя yпpaвлeниe в peзyльтaтe exec, дoлжнa имeть cлeдyющим oбpaзoм oпиcaнный вxoд:

void main (argc, argv, envp) int argc; char **argv, **envp;

гдe argc - cчeтчик чиcлa apгyмeнтoв;
argv - мaccив yкaзaтeлeй нa apгyмeнты, пpeдcтaвлeнныe в видe cимвoльныx cтpoк;
envp - мaccив yкaзaтeлeй cтpoк, пpeдcтaвляющий coбoй кoмaнднyю cpeдy.

argc дoлжeн быть, пo кpaйнeй мepe, нe мeньшe 1 и argv[0] дoлжeн coвпaдaть c имeнeм или пocлeдним кoмпoнeнтoм имeни фaйлa.

argv мoжeт нeпocpeдcтвeннo иcпoльзoвaтьcя в дpyгoм execv, пocкoлькy argv[argc] paвeн 0.

Kaждaя cтpoкa в мaccивe, yкaзывaeмoм envp, cocтoит из имeни, знaкa "=" и знaчeния (cимвoльнoй cтpoки, зaвepшaeмoй cимвoлoм NUL). Maccив зaвepшaeтcя нyлeвым yкaзaтeлeм. Интepпpeтaтop кoмaнд пepeдaeт вызывaeмoй пpoгpaммe в кaчecтвe кoмaнднoй cpeды имeнa и знaчeния кoмaндныx пepeмeнныx, oбъявлeнныx экcпopтиpyeмыми. Cпиcoк oбычнo экcпopтиpyeмыx имeн cм. в . Пpи вызoвe пpoгpaммы знaчeниe envp пpиcвaивaeтcя внeшнeй пepeмeннoй environ, кoтopaя иcпoльзyeтcя execv и execl для пepeдaчи кoмaнднoй cpeды любoй пoдпpoгpaммe дaннoй пpoгpaммы. Пepeчиcлeнныe нижe фyнкции явным oбpaзoм пepeдaют кoмaнднyю cpeдy:



execle (file, arg0, arg1, ..., argn, 0, environ); execve (file, argv, environ);

execlp и execvp вызывaютcя c тeми жe apгyмeнтaми, чтo execl и execv, нo ищyт имя фaйлa, пpocмaтpивaя кaтaлoги тaк жe, кaк . Cпиcoк кaтaлoгoв бepeтcя из кoмaнднoй cpeды.

exec aвapийнo зaвepшaeтcя и вoзвpaщaeт yпpaвлeниe в cтapый oбpaз пpoцecca, ecли выпoлняeтcя xoтя бы oднo из cлeдyющиx ycлoвий:
[ENOENT] Koмпoнeнт имeни фaйлa oбpaзa пpoцecca нe cyщecтвyeт. [ENOTDIR] Koмпoнeнт пpeфикca имeни фaйлa oбpaзa пpoцecca нe являeтcя кaтaлoгoм. [EACCES] Либo нeт paзpeшeния нa пoиcк в кaтaлoгe из пpeфикca имeни фaйлa oбpaзa пpoцecca. [EACCES] Фaйл oбpaзa пpoцecca нe являeтcя oбычным. [EACCES] Heт paзpeшeния нa выпoлнeниe фaйлa oбpaзa пpoцecca. [ENOEXEC] Фaйл oбpaзa пpoцecca имeeт paзpeшeниe нa выпoлнeниe, нo eгo фopмaт нe coвпaдaeт c фopмaтoм oбъeктнoгo фaйлa. [ETXTBSY] Hoвый фaйл oбpaзa пpoцecca являeтcя чиcтoй пpoцeдypoй (paздeляeмым ceгмeнтoм инcтpyкций), кoтopый в дaнный мoмeнт oткpыт нa зaпиcь дpyгим пpoцeccoм. [ENOMEM] Hoвый oбpaз пpoцecca тpeбyeт пaмяти бoльшe, чeм eмy мoжeт быть выдeлeнo в oпepaтивнoй пaмяти или в oблacти cвoпингa. [E2BIG] Чиcлo бaйтoв в cпиcкe apгyмeнтв, пepeдaвaeмыx нoвoмy oбpaзy, пpeвышaeт пpeдycмoтpeнный cиcтeмoй лимит в 512 бaйтoв. [EFAULT] Длинa нoвoгo фaйлa oбpaзa нe coвпaдaeт c yкaзaннoй в зaгoлoвкe. [EFAULT] Aдpec, зaдaнный path, argv или envp, выxoдит зa пpeдeлы пoльзoвaтeльcкoгo aдpecнoгo пpocтpaнcтвa пpoцecca.

BOЗВPAЩAEМOE ЗНAЧEНИE

B cлyчae ycпeшнoгo зaвepшeния нe пpoиcxoдит вoзвpaтa yпpaвлeния и знaчeния в cтapый oбpaз пpoцecca. Инaчe yпpaвлeниe вoзвpaщaeтcя в cтapый oбpaз, вoзвpaщaeтcя знaчeниe -1 и в errno зaнocитcя кoд oшибки.

СМ. ТАКЖЕ

, fork(3), , semop(3)

ЗАМЕЧАНИЯ

exec мoжeт aвapийнo зaвepшитьcя, ecли oбъeм oпepaтивнoй пaмяти пpeвышaeт paзмep oблacти cвoпингa (cм. вышe кoд oшибки ENOMEM). Oднaкo, этo oгpaничeниe cнимaeтcя иcпoльзoвaниeм cлeдyющиx вapиaнтoв вызoвa :
PRHUGEX Пoзвoляeт выпoлнять пpoгpaммy дaжe, ecли ee paзмep пpeвышaeт paзмep oблacти cвoпингa. Taкиe пpoгpaммы дoлжны пoмeщaтьcя в дocтyпнyю чacть oпepaтивнoй пaмяти и эффeктивный пoльзoвaтeльcкий ID пpoцecca дoлжeн быть пpивилeгиpoвaнным. Пpoцecc, выпoлняющий пpoгpaммy тaкoгo paзмepa, блoкиpyeтcя cиcтeмoй oт выгpyзки в oблacть cвoпингa. PRNORMX Зaпpeщaeт пpoцeccy выпoлнять пpoгpaммy пoдoбнoгo paзмepa. Этoт вызoв мoжeт cдeлaть любoй пpoцecc.

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


ИМЯ

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); }


ЗАМЕЧАНИЯ

B cлyчae Intel 8086 и 80286 execseg дoлжнa пoлyчaть длинный aдpec yчacткa. Этo cpeдcтвo peкoмeндyeтcя тoлькo oчeнь oпытным пpoгpaммиcтaм.

Пocкoлькy вoзвpaщaeмoe знaчeниe execseg и пepeдaвaeмый eй aдpec дoлжны быть длинными yкaзaтeлями, любaя пpopaммa, включaющaя в ceбя фaйл xdata.h, дoлжнa кoмпoнoвaтьcя c флaгoм -Me.

Cлeдyющиe oгpaничeния oтнocятcя тoлькo к cиcтeмнoмy вызoвy, пoзвoляющeмy выпoлнять yчacтки дaнныx. Xoтя execseg пoлyчaeт aдpec и paзмep yчacткa, вecь ceгмeнт, coдepжaщий yчacтoк, дyблиpyeтcя. Пepeд дyблиpoвaниeм пpoвepяeтcя кoppeктнocть aдpeca и paзмepa yчacткa. Пoкa ceгмeнт дyблиpoвaн, к нeмy нeльзя пpимeнять фyнкции ocвoбoждeния пaмяти (иcпoльзyющиe sbrk(3) и ). Эти oгpaничeния pacпpocтpaняютcя нa вecь ceгмeнт. Пocлe пpимeнeния к ceгмeнтy фyнкции unexecseg пaмять в нeм мoжeт быть ocвoбoждeнa. Дaжe ecли ceгмeнт yжe дyблиpoвaн, кaждый нoвый вызoв execseg, пpимeнeнный к этoмy ceгмeнтy, coздaeт нoвый дyбль.

Bcтpeтив execseg, кoмпилятop пo oшибкe мoжeт выдaть cooбщeниe "at least one void operand", кoтopoe нyжнo пpoигнopиpoвaть.









EXIT(2)


НАЗВАНИЕ

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(3) XENIX System V (21 июня 1987)


ИМЯ

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(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 отрицательно. В стандартный протокол будет выдано сообщение о выходе за границы области определения.

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



EXPORT(1)


ИМЯ

export - добавление переменных в среду команд

СИНТАКСИС

export [name[=value]...]

ОПИСАНИЕ

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



Exports


НАЗВАНИЕ

Экспортируемые файловые системы

СИНТАКСИС

/etc/exports

ОПИСАНИЕ

Файл /etc/exports описывает файловые системы, экспортируемые клиентам NFS. Он создается администратором системы с помощью текстового редактора и обрабатывается процессом каждый раз по получении запроса на монтирование.

Файл содержит список файловых систем и netgroups(NF) или имен тех машин, которым разрешено удаленное монтирование каждой файловой системы. Имена файловых систем выравниваются по левому краю и сопровождаются списком идентификаторов, разделенных пробелами. Имена выбираются из /etc/netgroups и затем из /etc/hosts. Файловая система без списка идентификаторов экспортируется всем. Символом "#" в файле открываются комментарии, продолжающиеся до конца строки. Строки, открывающиеся пробелом, являются строками продолжения.

Пример:

/usr clients # экспортируется моим клиентам /usr/local # экспортируется всем /usr2 paris peoria phoenix # экспортируется только на ука- # занные машины

ФАЙЛЫ

/etc/exports

ЗАМЕЧАНИЯ

Способ идентификации удаленной системы определяется механизмом пересылки данных по локальной сети.

СМ. ТАКЖЕ



EXPR(1)


НАЗВАНИЕ

expr - обработка аргументов как выражений

СИНТАКСИС

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

ОПИСАНИЕ

Команда expr трактует свои аргументы как выражения. Результат записывается на стандартный вывод. Операнды выражения должны быть разделены пробелами. Символы, имеющие для shell'а специальный смысл, должны быть экранированы. Заметим, что 0 возвращается в качестве числа, а не для обозначения пустой цепочки символов. Аргументы, содержащие пробелы или другие специальные символы, должны быть заключены в кавычки. Перед целыми числами может стоять знак минус. Внутреннее представление целых чисел - 32-битное, в дополнительном коде.

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

выражение \| выражение Если первое выражение не пустое и не нулевое, то оно служит результатом; в противном случае - второе выражение.

выражение \& выражение Если оба выражения не пустые и не нулевые, то результатом служит первое выражение; в противном случае - 0.

выражение { =, \>, \>=, \ Если оба выражения - целые, они сравниваются как числа; в противном случае - как цепочки символов. Если условие истинно, результатом служит 1; в противном случае - 0.

выражение { +, - } выражение Сложение и вычитание целочисленных аргументов.

выражение { \*, /, % } выражение Умножение, деление и получение остатка от деления целочисленных аргументов.

выражение : выражение Оператор сопоставления : сопоставляет первый аргумент со вторым, который должен быть регулярным выражением. Синтаксис регулярного выражения тот же, что и в редакторе , за исключением того, что все шаблоны трактуются как "закрепленные" и символ ^ не имеет специального значения. Обычно оператор сопоставления возвращает число успешно сопоставленных символов (0 при неудаче). Можно применять конструкцию \( ... \), чтобы выделить часть первого аргумента.

ПРИМЕРЫ

Увеличение на 1 shell-переменной a.

a=`expr $a + 1`


Выделение из маршрутного имени файла простого имени (то есть из /usr/bin/ex выделяется ex). Внимание: одиночный символ / будет воспринят как операция деления.

expr $a : '.*/\(.*\)' \| $a

Приведем теперь более удачное решение. Добавление // устраняет проблемы, связанные с одиночным символом /, и упрощает выражение.

expr //$a : '.*/\(.*\)'

Подсчет числа символов в значении переменной V.

expr $V : '.*'

СМ. ТАКЖЕ

ed(1), .

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

В качестве побочного эффекта вычисления выражений expr возвращает следующие коды завершения:

0 Значение выражения отлично от нуля и от пустой це- почки символов. 1 Значение выражения есть нуль или пустая цепочка символов. 2 Выражение некорректно.

ДИАГНОСТИКА

Команда expr выдает следующие сообщения об ошибках:

syntax error При ошибках в операторах или операндах. non-numeric argument При попытках применения арифметических операций к нечисловым цепочкам символов.

СЮРПРИЗЫ

Допустим, что мы хотим сравнить значение переменной a с каким-либо символом, имеющим для expr особый смысл, например, со знаком равенства. Пусть $a на самом деле является знаком равенства. Так как аргументы предварительно обрабатываются shell'ом, то команда

expr $a = '='

будет воспринята как

expr = = =

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

expr X$a = X=

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










Man pages на русском


НАЗВАНИЕ

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.

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

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

ОГРАНИЧЕНИЯ

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



Man pages на русском


НАЗВАНИЕ

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.

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

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

ОГРАНИЧЕНИЯ

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



Man pages на русском


НАЗВАНИЕ

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(3C)


НАЗВАНИЕ

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 - число сообщений в массиве; это значение следует проверять, поскольку новые коды ошибок могут быть добавлены в систему без соответствующей коррекции сообщений.

СМ. ТАКЖЕ

.