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



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


ИМЯ

dbminit, fetch, store, delete, firstkey, nextkey - yпpaвляeт бaзoй дaнныx

СИНТАКСИС

typedef struct {char *dptr;int dsize;} datum;



int dbminit (file) char *file;

datum fetch (key) datum key;

store (key, content) datum key, content;

delete (key) datum key;

datum firstkey ()

datum nextkey (key) datum key;

ОПИСАНИЕ

Эти фyнкции yпpaвляют paбoтoй бaзы дaнныx, в кoтopoй дocтyп к кaждoмy элeмeнтy бaзы ocyщecтвляeтcя пo ключy. Фyнкции мoгyт oбcлyживaть oчeнь бoльшиe бaзы дaнныx (дo миллиapдa блoкoв). Дocтyп пo ключy мoжeт быть кaк пpямым, тaк и пocлeдoвaтeльным. Пpoгpaммы, иcпoльзyющиe эти фyнкции, дoлжны кoмпoнoвaтьcя c флaгoм -ldbm.

Пoля key и content oпиcывaютcя c пoмoщью имeни типa datum, зaдaющeгo cтpoкy из dsize бaйтoв, нa кoтopyю yкaзывaeт dptr. Дoпycтимы пpoизвoльныe дaнныe в двoичнoй cиcтeмe cчиcлeния и cимвoльныe cтpoки. Бaзa дaнныx paзмeщaeтcя в двyx фaйлax. Пepвый фaйл этo кaтaлoг бaзы, coдepжaщий кapтy pacпpeдeлeния пaмяти. Bтopoй фaйл coдepжит coбcтвeннo дaнныe. Имя пepвoгo фaйлa имeeт cyффикc .dir, имя втopoгo - cyффикc .pag.

Для пoлyчeния дocтyпa к бaзe ee нyжнo oткpыть вызoвoм dbminit. B мoмeнт oткpытия фaйлы file.dir и file.pag (file - apгyмeнт фyнкции dbminit) дoлжны cyщecтвoвaть. Пycтaя бaзa coздaeтcя пyтeм coздaния этиx фaйлoв c нyлeвoй длинoй.

Пocлe oткpытия бaзы дaнныe из нee выбиpaютcя c пoмoщью фyнкции fetch и зaнocятcя в нee c пoмoщью фyнкции store. Bыбopкa и зaнeceниe пpoизвoдятcя c пoмoщью ключa - apгyмeнтa key. Kлюч и cвязaнныe c ним дaнныe yничтoжaютcя c пoмoщью фyнкции delete. Пocлeдoвaтeльный пpocмoтp вcex ключeй в бaзe мoжeт быть cдeлaн c пoмoщью фyнкций firstkey и nextkey. Firstkey вoзвpaщaeт пepвый ключ в бaзe, nextkey вoзвpaщaeт ключ, кoтopый cлeдyeт зa ключoм, являющимcя apгyмeнтoм фyнкции. Hижecлeдyющий цикл пoзвoляeт пpocмoтpeть вcю бaзy:

for(key=firstkey();key.dptr!=NULL;key=nextkey(key))

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

Фyнкции, вoзвpaщaющиe цeлыe знaчeния, в cлyчae oшибки вoзвpaщaют oтpицaтeльнoe чиcлo. B cлyчae ycпeшнoгo зaвepшeния вoзвpaщaeтcя 0. Фyнкции, вoзвpaщaющиe знaчeниe типa datum, в cлyчae oшибки ycтaнaвливaют пoлe dptr в NULL.

ЗAМEЧAНИЯ


Фaйл `.pag' мoжeт coдepжaть пycтыe oблacти, тaк чтo eгo oбъeм мoжeт пpимepнo в 4 paзa пpeвышaть oбъeм xpaнимыx в бaзe дaнныx. Пpeжниe вepcии XENIX пpи oбpaщeнии к пycтым oблacтям фaйлa мoгли зaнимaть пoд ниx peaльныe блoки диcкoвoгo пpocтpaнcтвa. Taкиe фaйлы нe мoгyт быть cкoпиpoвaны oбычными cpeдcтвaми (cp, cat, tp, tar, ar) бeз пpeдвapитeльнoгo зaпoлнeния пycтыx oблacтeй.

Укaзaтeль dptr в cтpyктypax типa datum, вoзвpaщaeмыx нeкoтopыми фyнкциями, yкaзывaeт cтaтичecкyю oблacть пaмяти, кoтopaя пepeзaпиcывaeтcя oчepeдным вызoвoм.

Cyммapнaя длинa пapы `ключ/дaнныe' нe дoлжнa пpeвышaть paзмepa блoкa (512 бaйтa). Бoлee тoгo, вce тaкиe пapы, имeющиe пpи xeшиpoвaнии oднo знaчeниe, дoлжны paзмeщaтьcя в oднoм блoкe. Ecли этo нe тaк, store вoзвpaщaeт oшибкy.

Delete нe измeняeт oбъeмa фaйлa, нo дeлaeт yдaлeнныe зaпиcи дocтyпными для нoвoгo иcпoльзoвaния.

Пopядoк ключeй, зaдaвaeмый фyнкциями firstkey и nextkey, oпpeдeляeтcя xeшиpoвaниeм.

Эти пpoгpaммы нepeeнтepaбeльны, пoэтoмy иx нeльзя иcпoльзoвaть для paбoты c нecкoлькими бaзaми oднoвpeмeннo.









DIRECTORY(3X)


НАЗВАНИЕ

directory: opendir, readdir, telldir, seekdir, rewinddir, closedir - операции над каталогами

СИНТАКСИС

#include <sys/types.h>

#include <dirent.h>

DIR *opendir (filename) char *filename;

struct dirent *readdir (dirp) DIR *dirp;

long telldir (dirp) DIR *dirp;

void seekdir (dirp, loc) DIR *dirp; long loc;

void rewinddir (dirp) DIR *dirp;

void closedir (dirp) DIR *dirp;

ОПИСАНИЕ

Функция opendir открывает каталог с именем filename и связывает с ним поток каталога. Opendir возвращает в качестве результата указатель, который используется в последующих операциях для идентификации потока каталога. Пустой указатель возвращается, если файл filename не доступен или не является каталогом, либо, если команда malloc(1M) не может выделить достаточного об ема памяти для структуры типа DIR или для буферов.

Функция readdir выдает указатель на следующий активный элемент каталога. Указатели на неактивные элементы каталога не выдаются. При достижении конца каталога или при выявлении некорректной позиции в каталоге возвращается пустой указатель.

Функция telldir выдает текущую позицию в указанном потоке каталога.

Функция seekdir устанавливает позицию для последующей операции readdir над потоком каталога. Данная позиция совпадает с той, которая была получена в результате выполнения операции telldir, вычислившей loc. Значения, которые возвращает telldir, корректны только в том случае, если каталог не сжимался и не расширялся. Такая проблема не возникает в случае версии 5, но может возникнуть для некоторых других типов файловых систем.

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

Операция closedir закрывает указанный поток каталога и освобождает структуру DIR.

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

opendir:

[ENOTDIR] Компонент маршрутного имени filename не является каталогом. [EACCES] Для компонента маршрутного имени filename отсутствует право на поиск. [EMFILE] Будет превышено максимально допустимое число описателей файлов. [EFAULT] Аргумент filename указывает за пределы отведенного процессу адресного пространства.


readdir:

[ENOENT] Текущая позиция каталога не соответствует корректному элементу. [EBADF] Описатель файла, определенный аргументом dirp, в данный момент некорректен. Возможная причина - поток был закрыт.

telldir, seekdir и closedir:

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

ПРИМЕР

Приведем фрагмент программы для поиска в каталоге элемента name:

dirp = opendir ("."); while ((dp = readdir (dirp)) != NULL) if (strcmp (dp->d_name, name) == 0) { closedir (dirp); return FOUND; } closedir (dirp); return NOT_FOUND;

СМ. ТАКЖЕ

, .

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

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

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

СМ. ТАКЖЕ

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

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



Man pages на русском


НАЗВАНИЕ

getenv - получение значения переменной окружения

СИНТАКСИС

char *getenv (name) char *name;

ОПИСАНИЕ

Пусть аргумент name указывает на цепочку символов имя. Функция getenv просматривает список переменных окружения [см. ] в поисках цепочки вида имя=значение и возвращает указатель на значение в текущем окружении, если такая цепочка обнаружена, и пустой указатель - в противном случае.

СМ. ТАКЖЕ

, , .



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

СМ. ТАКЖЕ

.

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



PRINTF(3S)


НАЗВАНИЕ

printf, fprintf, sprintf, snprintf, asprintf, vprintf, vfprintf, vsprintf, vsnprintf, vasprintf - вывод с преобразованием по формату

СИНТАКСИС

#include <stdio.h>

int printf (format, val ...) char *format;

int fprintf (stream, format, val ...) FILE *stream; char *format;

int sprintf (s, format [, val] ...) char *s, *format;

int snprintf(char *str, size_tsize, const char *format, ...)

int asprintf(char **ret, const char *format, ...)

#include <stdarg.h>

int vprintf(const char *format, va_list ap)

int vfprintf(FILE *stream, const char *format, va_list ap)

int vsprintf(char *str, char *format, va_list ap)

int vsnprintf(char *str, size_t size, const char *format, va_list ap)

int vasprintf(char **ret, const char *format, va_list ap)

ОПИСАНИЕ

Функция printf направляет данные в стандартный поток вывода stdin. Функция fprintf направляет данные в поток вывода, заданный аргументом stream. Функция sprintf направляет данные, заканчивающиеся пустым символом (\0), в массив s; пользователь должен позаботиться о выделении достаточного количества памяти для массива. Каждая функция возвращает число переданных символов (не считая пустого в случае sprintf), или отрицательное число, если при выводе обнаружилась ошибка.

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

Каждый спецификатор преобразования начинается символом %, после которого последовательно записываются:

Флаги (один, несколько или ни одного), которые уточняют смысл спецификации преобразования. Необязательная последовательность десятичных цифр, задающая минимальную ширину поля, в котором изображается результат преобразования. Если результат может быть изображен меньшим количеством символов, то поле дополняется слева (или справа, если задан флаг выравнивания по левой границе) пробелами до минимальной ширины; если последовательность, задающая ширину поля, начинается нулем, то для дополнения используются нули. Точность, задающая минимальное количество цифр в изображении результата преобразования типа d, i, o, u, x, X, количество цифр после десятичной точки в изображении результата преобразования типа e, E, f, максимальное количество значащих цифр в изображении результата преобразования типа g, G, или максимальное количество символов в изображении результата преобразования типа s. Точность записывается в виде точки (.), за которой следует несколько десятичных цифр; отсутствие цифр интерпретируется как ноль. Дополнение результата символами, обусловленное точностью, подавляет дополнение, обусловленное шириной поля. Необязательный символ l, означающий, что относящиеся к нему преобразования d, i, o, u, x, X применяются к целым выводимым значениям типа long. Для остальных преобразований символ l игнорируется. Символ, обозначающий тип преобразования.


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

Флаги и их смысл:
- Выравнивание результата преобразования по левой границе. + Обязательное изображение знака (для чисел со знаком). пробел Если первый символ результата преобразования со знаком отличен от + и -, то изображение результата предваряется пробелом. Тем самым флаг + аннулирует действие флага пробел. # Этот флаг означает, что значение преобразуется к "альтернативной форме". Для преобразований c, d, i, s, u этот флаг не имеет значения. Для преобразования типа o результат изображается с увеличенной точностью, с тем чтобы первая цифра результата была нулем. Для преобразований типа x, X ненулевой результат будет изображаться с префиксом 0x или 0X. Для преобразований типа e, E, f, g, G результат обязательно изобразится с десятичной точкой, даже если за ней нет цифр (обычно точка в этом случае опускается). Для преобразований g, G не подавляются незначащие хвостовые нули (что обычно делается).

Символы, обозначающие тип преобразования, и их смысл:
d, i, o, u, x, X Целое выводимое значение преобразуется в десятичное со знаком (d, i), беззнаковое восьмеричное (o), десятичное (u) или шестнадцатеричное (x, X); буквы abcdef изображают шестнадцатеричные цифры при преобразовании x, а ABCDEF - при преобразовании X. Точность задает минимальное количество цифр в изображении результата; если результат можно изобразить меньшим количеством цифр, то слева добавляются незначащие нули. Значение точности по умолчанию равно 1. Результат преобразования нуля с нулевой точностью - пустая цепочка. f Выводимое значение типов float или double преобразуется в десятичное число и изображается в виде [-]ddd.ddd, где число цифр после точки определяется точностью. Если точность опущена, то считается, что она равна 6; если точность равна нулю, точка не печатается. e, E Выводимое значение типов float или double преобразуется в десятичное число и изображается в виде [-]d.ddde+/-dd, где перед точкой находится ровно одна цифра, а число цифр после точки определяется точностью; по умолчанию точность равна 6; если точность равна нулю, точка не печатается. Спецификация E отличается от e только обозначением порядка (E вместо e). Порядок всегда содержит по крайней мере две цифры. g, G Выводимое значение типов float или double преобразуется в десятичное число и изображается либо в формате f, либо в формате e (или E, если задана спецификация G); точность определяется числом значащих цифр. Вид изображения зависит от значения аргумента: вид e используется только в том случае, если порядок меньше -4 или больше значения точности. Хвостовые незначащие нули подавляются; десятичная точка печатается, только если за ней есть цифры. c Печатается значение-символ. s Выводимое значение, заданное указателем, рассматривается как цепочка символов, ограниченная пустым символом (\0); печать цепочки прекращается либо по ограничителю, либо после вывода количества символов, равного значению точности. По умолчанию точность считается бесконечно большой; в этом случае цепочка печатается до тех пор, пока не встретится ограничитель. Пустой указатель (NULL) дает непредсказуемые результаты. % Печать символа %; выводимых значений не требуется.


RAND(3C)


НАЗВАНИЕ

rand, srand - простой генератор случайных чисел

СИНТАКСИС

int rand ( )

void srand (seed) unsigned seed;

ОПИСАНИЕ

Функция rand, использующая мультипликативный конгруэнтный генератор случайных чисел с периодом 2^32, возвращает последовательно псевдослучайные числа в диапазоне от 0 до 2^15-1.

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

ПРИМЕЧАНИЯ

Спектральные свойства функции rand оставляют желать лучшего. Функция представляет собой гораздо более качественный, хотя и более сложный генератор случайных чисел.

СМ. ТАКЖЕ

.



SACT(1)


НАЗВАНИЕ

sact - выдача информации о редактируемых версиях SCCS-файла

СИНТАКСИС

sact файл ...

ОПИСАНИЕ

Команда sact выдает информацию о невыполненных командах delta для указанного SCCS-файла. Такая ситуация возникает, если для файла была сделана команда get -e без последующего выполнения delta. Если указано имя каталога, sact обрабатывает все файлы в этом каталоге, начинающиеся с s.; файлы, к которым нет доступа на чтение, игнорируются без дополнительных сообщений. Если указано имя -, происходит чтение со стандартного ввода; каждая строка при этом трактуется как имя SCCS-файла, подлежащего обработке.

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

С_идентификатор существующей версии, в которой будут сделаны изменения, создающие новую версию. С_идентификатор новой версии, которая будет создана. Входное имя пользователя, который создаст новую версию (то есть того, кто выполнил get -e). Дата выполнения get -e. Время выполнения get -e.

СМ. ТАКЖЕ

, , , .

ДИАГНОСТИКА

Для раз яснений пользуйтесь командой .



SAG(1G)


НАЗВАНИЕ

sag - график функционирования системы

СИНТАКСИС

sag [-s время] [-e время] [-i сек] [-f файл] [-T терминал] [-x спецификация_оси] [-y спецификация_оси]

ОПИСАНИЕ

Команда sag графически отображает функционирование системы на основании данных, накопленных в двоичном файле командой . Данные различных видов могут отображаться как по отдельности, так и в любой комбинации. Могут быть выведены простые арифметические комбинации данных. Команда sag вызывает sar и находит необходимые данные, производя сопоставления с заголовками столбцов (запустите sar, чтобы увидеть,что имеется в Вашем распоряжении). Опции -s, -e, -i, -f просто передаются команде sar. Смысл остальных опций:

-T терминал

Настройка на конкретный тип терминала. См. по поводу поддерживаемых типов терминалов. Если эта опция отсутствует, используется значение $TERM.

-x спецификация_оси

Спецификация информации, соответствующей оси x. Имеет вид имя [операция имя] ... [нижняя_граница верхняя_граница].

-y спецификация_оси [; спецификация_оси] ...

Спецификация информации, соответствующей оси y. Имеет тот же вид.

Имя есть либо заголовок колонки в результатах sar, за которым может в квадратных скобках следовать имя устройства, либо целое число. Операция есть +, -, * или /; обрамляется пробелами. Отметим, что если в спецификации есть символы, интерпретируемые shell'ом, их нужно экранировать. В спецификации могут участвовать не более пяти имен. Круглые скобки игнорируются. В отличие от привычного порядка в sag + и - выполняются раньше, чем * и /. Операции одного приоритета выполняются слева направо. Если нижняя и верхняя граница не заданы, они вычисляются по исходным данным.

Если не задана спецификация оси x, используется время. Для оси y допускается до пяти спецификаций, разделенных символом ;. По умолчанию спецификация оси y имеет вид

"%usr 0 100;%usr + %sys 0 100;%usr + %sys + %wio 0 100"

ПРИМЕРЫ

Посмотреть сегодняшнее использование процессора:

sag

Посмотреть использование всех дисков на протяжении 15 минут:

TS=`date +%H:%M` sar -o tempfile 60 15 TE=`date +%H:%M` sag -f tempfile -s $TS -e $TE -y "r+w/s[dsk]"

СМ. ТАКЖЕ

, .



SAR(1)


НАЗВАНИЕ

sar - информация о функционировании системы

СИНТАКСИС

sar [-u] [-b] [-d] [-y] [-c] [-w] [-a] [-q] [-v] [-m] [-A] сек [число_интервалов] [-o файл] sar [-u] [-b] [-d] [-y] [-c] [-w] [-a] [-q] [-v] [-m] [-A] [-o файл] [-f файл] [-s время] [-e время] [-i сек]

ОПИСАНИЕ

Есть два способа использования команды sar. При первом способе sar опрашивает и накапливает счетчики активности операционной системы на заданном числе_интервалов, каждый из которых длится заданное число секунд. По умолчанию число_интервалов равно 1. При втором способе (когда не указан интервал опроса сек) sar выбирает данные из файла, куда они предварительно должны быть записаны. Этот файл либо указывается явно опцией -f, либо, по умолчанию, используется стандартный ежедневный протокол /usr/adm/sa/saдд для текущего дня дд.

Смысл опций команды sar:

-o файл

Задается файл, в котором сохраняются результаты работы команды sar; результаты записываются в двоичном виде.

-f файл

Файл, в который данные были записаны ранее командой sar. На основании этих данных выдаются результаты.

-s время

Время начала интересующего интервала; имеет формат чч[:мм[:сс]].

-e время

Время окончания интересующего интервала; имеет тот же формат.

-i сек

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

При обоих способах использования команды sar нужные счетчики активности выбираются следующими опциями:

-u Использование ЦП (по умолчанию):

%usr, %sys, %wio, %idle - время ЦП в режиме пользователя, в режиме системы, ожидание блочного ввода/вывода для какого-либо процесса, ожидание по другим причинам.

-b Использование буферов:

bread/s, bwrit/s - количество передач в секунду между системными буферами и дисками или другими блочными устройствами;
lread/s, lwrit/s - количество обращений к системным буферам;
%rcache, %wcache - процент попадания в кэш, соответственно (1-bread/lread)*100% и (1-bwrit/lwrit)*100%
pread/s, pwrit/s - количество небуферизованых передач.

-d Использование блочных устройств, то есть дисков или магнитофонов:

%busy, avque - время занятости устройства, средняя длина очереди обращений к устройству в это время;
r+w/s, blks/s - количество передач данных на устройство и с него, количество переданных блоков;
avwait, avserv - среднее время (мс) ожидания в очереди к устройству, среднее время обслуживания запроса устройством (для диска, например, это время установки головок на дорожку, поиска нужной записи и передачи данных).

-y Использование терминалов:

rawch/s, canch/s, outch/s - скорость ввода символов, скорость канонической обработки символов, скорость вывода символов (в символах/сек);
rcvin/s, xmtin/s, mdmin/s - скорости приема, передачи и модемных прерываний (в символах/сек).

-c Использование системных вызовов

scall/s - системные вызовы всех типов в секунду
sread/s, swrit/s, fork/s, exec/s - соответствующие системные вызовы в секунду
rchar/s, wchar/s - число символов, переданных системными вызовами и в секунду.

-w Подкачка и переключение процессов:

swpin/s, swpot/s, bswin/s, bswot/s - количество передач и количество переданных блоков при откачке и подкачке процессов (включая начальную загрузку некоторых программ) в секунду;
pswch/s - переключение процессов в секунду.

-a Доступ к файловой системе: iget/s, namei/s, dirblk/s. -q Средняя длина очереди и процент времени занятости:

runq-sz, %runocc - очередь готовых к выполнению процессов в памяти;
swpq-sz, %swpocc - очередь готовых к выполнению процессов, вытесненных из памяти.

-v Таблицы сегментов, процессов, описателей и файлов:

text-sz, proc-sz, inod-sz, file-sz - число элементов/размер каждой страницы в момент опроса;
text-ov, proc-ov, inod-ov, file-ov - переполнения между моментами опроса.

-m Использование сообщений и семафоров: msg/s, sema/s - количество примитивов в секунду. -A Все данные. Эквивалентно -udqbwcayvm.

ПРИМЕРЫ

Сегодняшняя загрузка ЦП:

sar

10 минут измерять загрузку ЦП, сохранив результаты в файле temp:

sar -o temp 60 10

Анализ данных об использовании дисков и магнитофонов (если данные накоплены в файле temp):

sar -d -f temp

ФАЙЛЫ

/usr/adm/sa/saдд Ежедневный протокол, где дд - номер дня в месяце.

СМ. ТАКЖЕ

.

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

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



SAR(1M)


НАЗВАНИЕ

sar: sa1, sa2, sadc - получение информации о функционировании системы

СИНТАКСИС

/usr/lib/sa/sadc [сек число] [вых_файл] /usr/lib/sa/sa1 [сек число] /usr/lib/sa/sa2 [-u] [-b] [-d] [-y] [-c] [-w] [-a] [-q] [-v] [-m] [-A] [-s время] [-e время] [-i сек]

ОПИСАНИЕ

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

Утилита sadc и shell-процедуры sa1 и sa2 используются для сбора, сохранения и обработки этих данных.

Утилита sadc, сборщик данных, собирает системную информацию заданное число раз через указанное количество секунд и записывает ее в двоичном виде в вых_файл или на стандартный вывод. Если аргументы сек и число опущены, выводится запись специального вида. Эта возможность используется при загрузке системы, чтобы отметить момент, когда все счетчики сбрасываются в 0. Следующая команда из файла /etc/init.d/perf

su sys -c "/usr/lib/sa/sadc /usr/adm/sa/sa`date +%d`"

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

Shell-процедура sa1, вариант sadc, используется для сбора и сохранения данных в двоичном виде в файле /usr/adm/sa/saдд, где дд - это текущий день. Смысл аргументов сек и число тот же, что и в случае утилиты sadc, их подразумеваемые значения равны 1. Следующие строки из файла /usr/spool/cron/crontabs/sys [см. ]

0 * * * 0,6 /usr/lib/sa/sa1 20,40 8-17 * * 1-5 /usr/lib/sa/sa1

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

Shell-процедура sa2, вариант , записывает ежедневный отчет в файл /usr/adm/sa/sarдд. Смысл опций тот же, что и в случае . Следующая строка из файла /usr/spool/cron/crontabs/sys


5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -A

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

Структура двоичного файла с ежедневной информацией такова:

struct sa { struct sysinfo si; /* См. */ struct minfo mi; /* См. */ struct dinfo di; /* См. */ int minserve, maxserve /* Мин. и макс. загруженность исполнителя РУФ */ int szinode; /* Число элем. в табл. описателей файлов */ int szfile; /* Число элем. в табл. файлов */ int szproc; /* Число элем. в табл. процессов */ int szlckf; /* Число элем. в табл. "закрытых" файлов */ int szlckr; /* Число элем. в табл. "закрытых" записей */ int mszinode; /* Размер табл. описателей */ int mszfile; /* Размер табл. файлов */ int mszproc; /* Размер табл. процессов */ int mszlckf; /* Макс. размер табл. "закрытых" файлов */ int mszlckr; /* Макс. размер табл. "закрытых" записей */ long inodeovf;/* Число переполнений табл. описателей */ long fileovf; /* Число переполнений табл. файлов */ long procovf; /* Число переполнений табл. процессов */ time_t ts; /* Текущее время */ long devio[NDEVS][4]; /* Информация об устройствах */ #define IO_OPS 0 /* Общее число запросов на ввод/вывод */ #define IO_BCNT 1 /* Общее число переданных блоков */ #define IO_ACT 2 /* Общее время ожидания освобождения устройства (в тактах часов) */ #define IO_RESP 3 /* Общее время работы устройства по вводу/выводу (в тактах часов) */ };

ФАЙЛЫ

/usr/adm/sa/saдд Файлы с ежедневной информацией. /usr/adm/sa/sarдд Файлы с ежедневными отчетами. /tmp/sa.adrfl Файл с адресами.

СМ. ТАКЖЕ

.

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









SAVETO(1M)


НАЗВАНИЕ

saveto, copyto - сохранение тома или файловой структуры на диске или ленте

СИНТАКСИС

/etc/saveto [hd*] [mt] [fd*] [cpio] [опции_find]

ОПИСАНИЕ

Утилита saveto делает копию корневой файловой структуры или ее части на вспомогательный носитель. Копирование выполняется одним из следующих способов:

Утилита делает физическую копию устройства на другой диск или ленту. На другом диске с помощью создается файловая система, а затем утилита в сочетании с делает логическую копию. Комбинацией утилит cpio и find делается логическая копия на ленту. Комбинацией утилит cpio и логическая копия расщепляется на несколько дискет.

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

Если утилита saveto используется для копирования на диск, то на этом диске инсталлируется UNIX и производится некоторая подготовительная работа, после которой с этого диска можно будет загружать систему. При использовании первого варианта будет копироваться используемая файловая система. Это, конечно, некорректное действие, и выполнять его следует только в однопользовательском режиме. Тем не менее, могут иметь место некоторые неприятности, а в суперблоке файловой системы флаг корректности всегда будет установлен в состояние "активна". Перед монтированием этой файловой системы она должна быть приведена в корректное состояние командой .

При указании опций_find они передаются команде find, за счет чего выполняется выборочное логическое копирование. Если опции_find не заданы, но нужно сделать логическую копию, в командной строке следует указать слово cpio. При этом скопируется некоторый подразумеваемый набор файлов. Утилита saveto написана на языке shell, так что сменить подразумеваемый набор несложно.

При копировании на дискету (fd*) всегда производится логическое копирование с расщеплением.

Утилита saveto выдает на стандартный вывод сообщение о начале копирования. Такое же сообщение записывается в файл /etc/savelog.

ПРИМЕРЫ

Быстрая копия всего диска:

/etc/saveto hd0s1

Копирование на магнитную ленту всех файлов из каталога /usr:

saveto mt usr

Копирование всех файлов, измененных после последнего выполнения saveto:

saveto fd / -newer /etc/savelog

ФАЙЛЫ

/etc/savelog

СМ. ТАКЖЕ

, , , , , .

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



SBNO(1)


НАЗВАНИЕ

sbno - поиск описателя файла, содержащего блок с данным номером

СИНТАКСИС

sbno специальный_файл номер_блока

ОПИСАНИЕ

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

Отметим, что sbno работает только в файловых системах версии 5.

СМ. ТАКЖЕ

.



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


НАЗВАНИЕ

sbrk, brk - pacпpeдeляeт пaмять в ceгмeнтe дaнныx

СИНТАКСИС

char *sbrk (incr) int incr;

int brk (addr) char *addr;

ОПИСАНИЕ

Sbrk и brk иcпoльзyютcя для динaмичecкoгo измeнeния paзмepa ceгмeнтa дaнныx тeкyщeгo пpoцecca; cм. . Измeнeниe paзмepa дeлaeтcя пyтeм ycтaнoвки для тeкyщeгo пpoцecca гpaницы ceгмeнтa дaнныx, т.e. aдpeca пepвoй ячeйки пaмяти, нaxoдящeйcя зa кoнцoм ceгмeнтa дaнныx пpoцecca. Paзмep ceгмeнтa yвeличивaeтcя, ecли гpaницa вoзpacтaeт.

Sbrk дoбaвляeт incr бaйтoв к знaчeнию гpaницы ceгмeнтa и cooтвeтcтвyющим oбpaзoм измeняeт выдeлeннoe ceгмeнтy мecтo. Incr мoжeт быть oтpицaтeлeн, чтo yмeньшaeт знaчeниe гpaницы и paзмep ceгмeнтa.

B cлyчae бoльшoй мoдeли пaмяти для 286 пpoцeccopa, ecли incr бoльшe чиcлa бaйтoв, ocтaвшиxcя дo кoнцa ceгмeнтa, sbrk aвтoмaтичecки paзмeщaeт тpeбyeмыe бaйты в нoвoм ceгмeнтe дaнныx. Teм caмым гapaнтиpyeтcя пpинaдлeжнocть зaпpoшeнныx бaйтoв oднoмy ceгмeнтy. Ecли incr oтpицaтeлeн и eгo aбcoлютнoe знaчeниe paвнo длинe тeкyщeгo ceгмeнтa дaнныx, ceгмeнт aвтoмaтичecки ocвoбoждaeтcя. Ecли incr oтpицaтeлeн и eгo aбcoлютнoe знaчeниe бoльшe длины тeкyщeгo ceгмeнтa, ceгмeнт ocвoбoждaeтcя и дoпoлнитeльныe бaйты yдaляютcя из пpeдыдyщeгo ceгмeнтa дaнныx. Пpeдыдyщим являeтcя ceгмeнт, coдepжaщий дaнныe, выдeлeнныe пocлeдним вызoвoм sbrk, нe oтнocящимcя к дaннoмy ceгмeнтy.

Sbrk aвapийнo зaвepшaeтcя и paзмep ceгмeнтa нe измeняeтcя, ecли выпoлняeтcя xoтя бы oднo из cлeдyющиx ycлoвий:

[ENOMEM] Зaпpoшeнo бoльшe пaмяти, чeм дoпycкaeт cиcтeмa (cм. ulimit(3)).

Пoпыткa ocвoбoдить пaмяти бoльшe, чeм ee былo y пpoцecca.

Пoпыткa ycтaнoвить гpaницy ceгмeнтa мeньшe пepвoнaчaльнoй. Пepвoнaчaльнaя гpaницa этo гpaницa в мoмeнт cтapтa пpoцecca плюc длинa paздeляeмыx дaнныx, кoтopыe были выдeлeны пocлe этoгo.

Brk ycтaнaвливaeт гpaницy ceгмeнтa paвнoй знaчeнию addr и cooтвeтcтвyющим oбpaзoм измeняeт выдeлeннoe ceгмeнтy мecтo. Brk зaвepшaeтcя c oшибкoй, ecли yкaзaнный aдpec зaдaeт нecyщecтвyющий ceгмeнт или пpeвышaeт дoпycтимый cиcтeмoй пpeдeл.

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

B cлyчae ycпeшнoгo зaвepшeния sbrk вoзвpaщaeт yкaзaтeль нa нaчaлo выдeлeннoгo мecтa, a brk вoзвpaщaeт 0. Инaчe вoзвpaщaeтcя знaчeниe -1 и в errno зaнocитcя кoд oшибки. B cлyчae бoльшoй мoдeли пaмяти sbrk coздaeт нoвый ceгмeнт дaнныx и вoзвpaщaeт eгo cтapтoвый aдpec.

СМ. ТАКЖЕ

ЗAМEЧAНИЯ

B cлyчae бoльшoй мoдeли пaмяти для 286 пpoцeccopa вызoв "sbrk(0)" нe oбязaтeльнo вoзвpaщaeт cтapтoвый aдpec cлeдyющeгo вызoвa sbrk. B чacтнocти, тaк бyдeт, ecли cлeдyющий вызoв coздaeт нoвый ceгмeнт дaнныx. Boзвpaщaeмoe вызoвoм "sbrk(0)" знaчeниe cлeдyeт иcпoльзoвaть для oпpeдeлния иcxoднoй гpaницы ceгмeнтa дaнныx.



SCANF(3S)


НАЗВАНИЕ

scanf, fscanf, sscanf - ввод с преобразованием по формату

СИНТАКСИС

include <stdio.h>

nt scanf (format [, pointer] ...) har *format;

nt fscanf (stream, format [, pointer] ...) ILE *stream; har *format;

nt sscanf (s, format [, pointer] ...) har *s, *format;

ОПИСАНИЕ

Функция scanf читает данные из стандартного потока ввода stdin. Функция fscanf читает данные из потока ввода, заданного аргументом stream. Функция sscanf читает цепочку символов с адресом s. Каждая из перечисленных функций вводит символы, интерпретирует их в соответствии с форматом и записывает по указанным адресам. Аргументами функций являются: format - формат, управляющий преобразованием, и pointers - указатели на области памяти, куда следует помещать результаты преобразований. Если для заданного формата не хватает указателей, результат непредсказуем; если же указателей слишком много, лишние просто игнорируются.

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

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

Спецификатор задает способ преобразования текущего входного поля; результат присваивается переменной, на которую указывает соответствующий аргумент pointer, если не задано подавление присваивания. Подавление присваивания позволяет пропускать в потоке ввода отдельные поля. Поле в потоке ввода определяется как последовательность символов, не содержащая пробелов, которая либо ограничивается "неуместным" (в данном контексте) символом, либо определяется шириной, если она задана. Для всех преобразований, кроме [ и c, пробелы в начале поля игнорируются.

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

% Из потока ввода должен быть прочитан единственный символ %; никаких присваиваний не выполняется. d Из потока ввода должно быть прочитано целое десятичное число; соответствующий аргумент должен быть указателем на целое. u Из потока ввода должно быть прочитано целое десятичное без знака; соответствующий аргумент должен быть указателем на целое без знака. o Из потока ввода должно быть прочитано целое восьмеричное число; соответствующий аргумент должен быть указателем на целое. x Из потока ввода должно быть прочитано целое шестнадцатеричное число; соответствующий аргумент должен быть указателем на целое. i Из потока ввода должно быть прочитано целое число; соответствующий аргумент должен быть указателем на целое. Значение числа вычисляется в соответствии с соглашениями языка C: префикс 0 обозначает восьмеричное число, префикс 0x - шестнадцатеричное, отсутствие префикса - десятичное. n Общее количество символов (включая пробельные), прочитанных с начала выполнения функции, запоминается в очередной переменной из списка аргументов. Из потока ввода ничего не читается. e, f, g

Из потока ввода должно быть прочитано число с плавающей точкой; оно представляет собой последовательность цифр с необязательным знаком, необязательной десятичной точкой и необязательным порядком; порядок обозначается буквой e или E, за которой может следовать +, - или пробел, а затем - целое число. Соответствующий аргумент должен быть указателем на переменную типа float. s Из потока ввода должна быть прочитана цепочка символов; соответствующий аргумент должен быть указателем на символьный массив достаточной длины, чтобы в нем поместились вводимые данные с завершающим пустым символом \0, который добавляется автоматически. Признак конца входного поля - пробельный символ. c Из потока ввода должен быть прочитан единственный символ; соответствующий аргумент должен быть указателем на символ. Обычный пропуск пробельных символов в этом случае не производится; для чтения ближайшего непробельного символа нужно задать спецификатор %1s. Если задана ширина поля, то соответствующий аргумент должен указывать на символьный массив; в этом случае вводится заданное количество символов. [ Входные данные обрабатываются особым образом. За открывающей скобкой следует ряд символов, которые называются шаблоном сканирования, а затем закрывающая скобка; входное поле представляет собой максимальный участок потока ввода, состоящий исключительно из символов шаблона. Если первым символом шаблона является ^, это означает, что входное поле представляет собой максимальный участок потока ввода, содержащий любые символы кроме перечисленных в шаблоне. Шаблон сканирования записывается по определенным правилам. Несколько символов можно задать конструкцией первый-последний; таким образом, ряд [0123456789] можно изобразить как [0-9]. При использовании этого правила первый должен быть лексикографически меньше или равен последнему, иначе минус рассматривается как обычный символ шаблона. Минус рассматривается как обычный символ, если он находится на первом или на последнем месте в шаблоне. Если в шаблон нужно включить закрывающую скобку, то она должна быть самым первым символом шаблона (возможно, с предшествующим ^), в противном случае она рассматривается как ограничитель шаблона. Соответствующий этому спецификатору аргумент должен быть указателем на символьный массив достаточной длины, способный вместить читаемые данные вместе с ограничителем \0, добавляемым автоматически. Это преобразование считается завершившимся успешно, если из потока ввода выбран хотя бы один символ, соответствующий шаблону. <


/p>

Кодам преобразований d, u, o, x, i может предшествовать символ l или h, означающий, что соответствующий аргумент указывает на переменную типа long или short, а не int. Аналогично, кодам e, f, g может предшествовать символ l, означающий, что соответствующий аргумент указывает на переменную типа double, а не float. Для остальных кодов преобразований модификаторы l и h игнорируются.

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

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

ПРИМЕРЫ



В результате вызова

nt n; float x; char name[50]; = scanf("%d%f%s", &i, &x, name);

при наличии во входном потоке символов

5 54.32E-1 Bill

будет присвоено: переменной n - значение 3, переменной i - значение 25, переменной x - значение 5.432, а в массив name будет занесено Bill\0. После вызова

nt i,j; float x; char name[50]; void)scanf("%i%2d%f%*d %[0-9]", &j, &i, &x,name);

при наличии во входном потоке символов

11 56789 0123 56a72

будет присвоено: переменной j - значение 9, переменной i - значение 56, переменной x - значение 789., последовательность 0123 будет пропущена, а в массив name будет занесено 56\0. Если после этого вызова последует вызов getchar [см. ], то будет прочитан символ a. В результате вызова

nt i, j, s, e; char name[50]; void)scanf("%i %i %n%s%n", &i, &j, &s, name, &e);

при наличии во входном потоке

x11 0xy johnson

будет присвоено: переменной i - значение 17, переменной j - значение 0, переменной s - значение 6, в массив name будет занесено xy\0, а переменной e присвоено значение 8. Таким образом, длина заполненной части массива name равна e - s = 2. При следующим за этим вызове getchar [см. ] будет прочитан пробел.

СМ. ТАКЖЕ

, , , , .

ДИАГНОСТИКА

Описанные функции возвращают значение EOF при исчерпании потока ввода, или число успешно введенных и преобразованных величин.

СЮРПРИЗЫ

Заключительные пробельные символы (включая перевод строки) остаются в потоке ввода непрочитанными, если только они не были явно затребованы форматом.









SCC(1)


НАЗВАНИЕ

scc - компилятор C-программ, выполняемых без операционной системы

СИНТАКСИС

scc [+[библ]] [опция ...] [файл ...]

ОПИСАНИЕ

Команда scc подготавливает указанные файлы для выполнения без операционной системы. Синтаксис и семантика аргументов опция и файл те же, что и в команде ; однако опция -p (профилирование), а также любое обращение из объектного модуля к системным примитивам приводят к невозможности выполнения полученной программы в отсутствие операционной системы.

Команда scc определяет константу компилятора STANDALONE; за счет этого можно организовать условную компиляцию частей программы только для случая выполнения без операционной системы.

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

A Диск RP04/05/06, магнитофон TU16 или совместимые с ними плюс диски RM05 и RM80, ленты TU78 и TS11 или совместимые с ними. B Диск RK11/RK05, диск RP11/RP03, магнитофон TM11/TU16 или совместимые с ними.

Если аргумент +библ не указан, подразумевается +A. Если указан только +, дополнительная конфигурационная библиотека не загружается, пользователь может использовать свою библиотеку.

ФАЙЛЫ

/lib/crt2.o Загрузчик программ, выполняемых без операционной системы. /usr/lib/lib2.a Библиотека для программ, выполняемых без операционной системы. /usr/lib/lib2A.a +A конфигурационная библиотека (только для PDP-11). /usr/lib/lib2B.a +B конфигурационная библиотека (только для PDP-11).

СМ. ТАКЖЕ

, .

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



SCCSDIFF(1)


НАЗВАНИЕ

sccsdiff - сравнение двух версий в SCCS-файле

СИНТАКСИС

sccsdiff -rс_идентификатор1 -rс_идентификатор2 [-p] [-sразмер] файл ...

ОПИСАНИЕ

Команда sccsdiff сравнивает две версии в SCCS-файле и генерирует различия между ними. Может быть указано несколько SCCS-файлов, опции относятся ко всем файлам.

-rс_идентификатор1 -rс_идентификатор2

С_идентификатор1 и с_идентификатор2 определяют сравниваемые версии в SCCS-файле. Версии в указанном порядке передаются программе .

-p Отфильтровать вывод каждого файла через .

-sразмер Задается размер сегментов, которые bdiff передает команде . Этой опцией пользуются, если diff аварийно завершается из-за высокой загруженности системы.

ФАЙЛЫ

/tmp/get????? Временные файлы

СМ. ТАКЖЕ

, , , .

ДИАГНОСТИКА

файл: No differences

Означает, что версии полностью совпадают.

Для раз яснения других сообщений пользуйтесь командой .


Внутренние ключевые слова [см. ]. Каждый флаг имеет вид:

@f флаг текст

при этом текст может отсутствовать.

Определены следующие флаги:

@f t тип программы @f v имя программы @f i @f b @f m имя модуля @f f мин версия @f c макс версия @f d версия по умолчанию @f n @f j @f l закрытые версии @f q значение, определенное пользователем @f z зарезервировано для интерфейсов

Флаг t определяет подстановку вместо идентифицирующего ключевого слова %Y%. Флаг v управляет заданием номеров запросов на модификацию в дополнение к комментариям, если присутствует текст, он задает программу проверки номеров запросов. Флаг i управляет тем, считается ли сообщение "No id keywords" предостережением или ошибкой. Если флага i нет, это сообщение является предостережением, иначе - фатальной ошибкой (то есть файл не будет извлечен или версия не будет создана). Если присутствует флаг b, в команде get можно использовать опцию -b для создания ответвления от дерева версий. Флаг m определяет первый формат размещения значения идентифицирующего ключевого слова %M%. Флаг f задает минимальную версию, которая может быть выбрана для редактирования, то есть версии ниже нее не могут быть добавлены. Флаг c задает максимальную версию, которая может быть выбрана для редактирования, то есть версии выше нее не могут быть добавлены. Флаг d задает номер версии по умолчанию, если он не указан в команде . Наличие флага n приводит к тому, что при создании новой версии будет создавать пустыми все пропущенные версии (например, создавая версию 5.1 после версии 2.7 имеем пропущенные версии 3 и 4). Эти пустые версии могут затем быть использованы для новых ветвей. Отсутствие флага n приводит к отсутствию пропущенных версий в SCCS файле, использовать их в будущем для новых ветвей нельзя. Флаг j означает, что допускается использование нескольких команд одновременно для редактирования одной и той же версии SCCS-файла. Флаг l задает список версий, закрытых для редактирования (get(1) с опцией -e). Флаг q задает подстановку вместо идентифицирующего ключевого слова %Q%. Флаг z используется в специализированных интерфейсных программах.

Комментарии

Любой текст, окруженный строками @t и @T. Обычно секция комментариев содержит описание назначения файла.

Тело

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

@I DDDDD @D DDDDD @E DDDDD

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

СМ. ТАКЖЕ

, , , .









SCHEDULE(8)


НАЗВАНИЕ

schedule - база данных для автоматического системного резервного копирования.

ОПИСАНИЕ

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

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

Каждая структура в этом файле занимает отдельную строку. Пустые строки и строки комментариев (начинающиеся с #) могут располагаться в любом месте. Распознаются некоторые ключевые слова:

site sitename Аргумент sitename передается команде fsave в качестве описания метки ленты. Обычно sitename - это название фирмы или номера здания. media drive k sizes... [format] Устройство drive - это дисковод гибких дисков, способный обслуживать диски перечисленных емкостей sizes (в килобайтах). Аргумент format, если он задан, - это команда системы UNIX, используемая для форматирования описанных дискет. media drive d density sizes... [format] Устройство drive - это стример, поддерживающий плотность записи density и способный обслуживать ленты указанных размеров sizes (в футах). Как и для дискет, format - это команда системы UNIX, используемая для форматирования описанных лент. [0-9] size savetime importance marker Описание каждого уровня резервного копирования, как это представлено в разделе . Установки по умолчанию таковы:

Level (уровень)Size (размер)Savetime (время хранения)Importance (важность)Marker (маркер) 0-"1 год"критическаянет 1-"3 месяца"необходимаянет 2...7-"1 месяц"важнаянет 8-"2 недели"полезнаянет 9-"1 неделя"предупредительнаянет

<


/p>

Должны быть заданы все четыре поля. Поле size подразумевает использование первого размера, заданного в соответствующем списке media sizes.

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

/dev/rfilesys cycle Файловая система, располагающаяся на устройстве /dev/filesys, предназначается для резервного копирования в соответствии со значением цикла cycle, который представляет собой список уровней дампа разделенных пробелами (команде dump передаются цифры от 0 до 9) или букв x, означающих отсутсвие дампа.

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

Вот пример файла schedule:

# SYSTEM BACKUP SCHEDULE site mymachine

# Media entries

# 96 tpi 1.2 MB floppy 0 # media /dev/rfd096ds15 k 1200 format /dev/rfd096ds15

# 96 tpi 1.2 MB floppy 1 # media /dev/rfd196ds15 k 1200 format /dev/rfd196ds15

# Cartridge tape 0 # media /dev/rct0 d 20000 300 450 600 tape erase

# 9-track tape 0 # media /dev/rmt0 d 1600 2400 1200 600

# Backup Descriptor Table # Backup Vol. Save for Vitality Label # level size how long (importance) marker 0 - "1 year" critical "a red sticker" 1 - "4 months" necessary "a yellow sticker" 8 - "3 weeks" useful "a blue sticker" 9 - "1 week" precautionary none # Schedule Table # 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 # Filesystem M T W T F M T W T F M T W T F M T W T F /dev/rroot 0 x 9 x 9 8 x 9 x 9 1 x 9 x 9 8 x 9 x 9 /dev/ru 9 0 9 9 9 9 8 9 9 9 9 1 9 9 9 9 8 9 9 9

В приведенном выше примере файловая система /dev/root копируется на уровне 0, когда fsphoto запускается первый раз (в понедельник), и если этот дамп пройдет успешно, то в следующий раз (во вторник) резервное копирование не выполняется. Если и этот этап пройдет успешно, то в третий раз (среда) будет выполняться дамп 9-го уровня. В случае его успешного завершения в четвертый раз (четверг) дамп не выполняется, а в пятый раз запуска fsphoto (пятница) будет выполняться дамп 9-го уровня.



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

Продолжая этот пример, на 19-й запуск fsphoto будет выполняться дамп /dev/rroot 9-го уровня, на двадцатый раз дамп не выполняется, а на двадцать-первый раз (понедельник каждой пятой недели) цикл начнется сначала с дампа 0-го уровня.

Для более крупной и быстрее меняющейся файловой системы /dev/ru дампирование выполняется чаще (при каждом запуске fsphoto - раз в день, а не через раз), и уровни выбраны так, чтобы исключить выполнение двух полномасштабных дампов (например, на уровнях 0 и 1) крупных файловых систем в один и тот же день. Цикл резервного копирования короче - две недели вместо четырех.

СМ. ТАКЖЕ

, ,

ПРИМЕЧАНИЯ

Ключевые слова и имена файлов не должны следовать за пробелами или табуляциями.

Нет необходимости задавать имя первичного (/dev/r*) устройства для каждой файловой системы, но если это сделано, резервное копирование пойдет быстрее.









SCNHDR(4)


НАЗВАНИЕ

scnhdr - заголовок секции об ектного файла обычного формата

СИНТАКСИС

#include <scnhdr.h>

ОПИСАНИЕ

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

struct scnhdr { char s_name[8]; /* Имя секции */ long s_paddr; /* Физический адрес */ long s_vaddr; /* Виртуальный адрес */ long s_size; /* Размер секции */ long s_scnptr; /* Указатель на бесструк турные данные в файле */ long s_relptr; /* Указатель в файле на инф. о настр. ссылок */ long s_lnnoptr; /* Указатель в файле на инф. о номерах строк */ unsigned short s_nreloc; /* Число ссылок, требующих настройки */ unsigned short s_nlnno; /* Число элементов в таблице номеров строк */ long s_flags; /* Флаги */ };

Указатели в файле представляют собой смещение в байтах относительно начала файла; они могут быть использованы как смещения при использовании макроса FSEEK [см. ]. Если секция инициализирована, то файл содержит реальные данные. Неинициализированные секции несколько отличаются. Они имеют размер, имена, определенные в них, и ссылающиеся на них. Но они не содержат информации о настройке ссылок, номерах строк и данных. Следовательно, у неинициализированной секции нет бесструктурных данных в об ектном файле, и значения полей s_scnptr, s_relptr, s_lnnoptr, s_nreloc, и s_nlnno равны нулю.

СМ. ТАКЖЕ

, a.out(4).

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



SCR_DUMP(4)


НАЗВАНИЕ

src_dump - формат файла с образом экрана, создаваемого пакетом curses

СИНТАКСИС

scr_dump (file)

ОПИСАНИЕ

Функция scr_dump из пакета копирует содержимое экрана в файл. Формат этого файла описан ниже.

Имя терминала (tty-файла) имеет длину 20 символов; время модификации (относящееся к tty-файлу терминала, с экрана которого снят образ) имеет тип time_t; все остальные числа и символы имеют тип chtype [см. <curses.h>]. Поля переводами строк не разделяются.

магическое число: восьмеричное 0433 имя терминала время модификации число колонок число строк длина строки символы строки {для каждой строки экрана} длина строки символы строки .... есть метки? {1, если есть метки экрана} строка курсора колонка курсора

Сохраняется только то число символов строки, которое указано. Например, если длина строки равна 0, символов этой строки в файле не будет. Если значение есть метки? равно 1, затем следует

число меток ширина метки символы метки_1 символы метки_2 ...

СМ. ТАКЖЕ

.



SCREEN(HW)


НАЗВАНИЕ

screen - файлы tty[01-n], color, monochrome, ega, vga - адаптер дисплея и видеомонитор.

ОПИСАНИЕ

Файлы устройств tty[01-n] обоеспечивают символьный ввод/вывод между системой, дисплеем видеомонитора и клавиатурой. Каждый из этих файлов соответствует отдельному устройству телетайпа. Хотя количество экранов ограничивается 12, точное число (n) доступных экранов зависит от объема памяти компьютера. По умолчанию экраны устанавливаются в режим терминала ASCII 80x25.

Сообщения ядра системы об ошибках записываются в /dev/console, обычно соответствующему текущему экрану. Если по умолчанию для записи системных сообщений об ошибках установлено устройство вывода /dev/console, и используемый экран переключается в графический режим, то сообщения на консоли не высвечиваются. Когда видеоустройство возвращается в текстовый режим, то высвечивается соответствующее информационное сообщение, а текст сообщений об ошибках может быть восстановлен из файла /usr/adm/messages.

Хотя все устройства tty[01-n] могут быть открыты одновременно, только одно из них может быть активным в данный момент. Активное устройство формирует свой экран и перехватывает на себя управление клавиатурой. Будет ошибкой пытаться получить доступ к файлам color, monochrome или ega, если отсутствует соответствующий адаптер или нет связанного с ним экрана в многоэкранном режиме.

Для переключения на следующий экран введите код Ctrl-PrtSc с помощью клавиш Ctrl и PrtSc. Любой активный экран может быть выбран введением кода alt-Fn, где Fn - одна из функциональных клавиш. Например, F1 относится к устройству tty01.

Режимы управления

Для изменения режима дисплея видеомонитора откройте файл, соответствующий этому режиму. Например, для переключения выдачи на дисплей CGA программа должна открыть файл /dev/color и использовать отображение селектора ioctl s, возвращенного после вызова open (команды открытия), на файловый дескриптор. Применение файлов устройств поможет обеспечить программную совместимость в будущем.

Экраны могут быть назначены различным адаптерам (в многоадаптерных системах) с использованием следующих ioctl s:


SWAPMONO Выбирает монохромный дисплей в качестве устройства вывода видеомонитора. SWAPCGA Выбирает регулярный цветной дисплей в качестве устройства вывода видеомонитора. SWAPEGA Выбирает улучшенный цветной дисплей в качестве устройства вывода видеомонитора. SWAPVGA Выбирает видеографический растровый цветной дисплей в качестве устройства вывода видеомонитора.

Чтобы узнать какой тип адаптера дисплея в настоящий момент присоединен к видеомонитору, вы можете использовать ioctl(2) со следующим параметром:

CONS_CURRENT Возвращает тип адаптера дисплея присоединенного в текущий момент к видеомонитору: MONO, CGA, EGA или VGA.

Режимы дисплея

Для изменения видеорежима дисплея могут использоваться следующие селекторы ioctl s:

SW_B80x25 Выбирает чернобелый текстовый режим 80x25 (MONO, CGA, EGA, VGA). SW_C80x25 Выбирает цветной текстовый режим 80x25 ( CGA, EGA, VGA). SW_BG320 Выбирает чернобелый графический режим 320x200 (CGA, EGA, VGA). SW_CG320 Выбирает цветной графический режим 320x200 ( CGA, EGA, VGA). SW_BG640 Выбирает чернобелый графический режим 640x200 ( CGA, EGA, VGA). SW_EGAMONO80x25 Выбирает режим EGA 7 - эмулирует поддержку, предоставляемую монохромным дисплеем.(EGA, VGA). SW_EGAMONOAPA Выбирает графический режим EGA F 640x350. (EGA с мнохромным монитором.) SW_ENHMONOAPA2 Выбирает режим EGA F* (EGA с монохромным монитором). SW_ENHB40x25 Выбирает черно-белый текстовый режим 40x25 EGA. (EGA, VGA). SW_ENHC40x25 Выбирает цветной текстовый режим 40x25 EGA. (EGA, VGA). SW_ENHB80x25 Выбирает черно-белый текстовый режим 80x25 EGA. (EGA, VGA). SW_ENHC80x25 Выбирает цветной текстовый режим 80x25 EGA. (EGA, VGA). SW_CG320_D Выбирает графический режим EGA 320x200 (режим EGA D.) (EGA, VGA). SW_CG640_E Выбирает графический режим EGA 640x200 (режим EGA E.) (EGA, VGA). SW_CG640x350 Выбирает графический режим EGA 640X350 (режим EGA 10.) (EGA, VGA). SW_ENH_CG640 Выбирает графический режим EGA 10*. (EGA, VGA). SW_MCAMODE Инициализирует монохромный адаптер .(MONO). SW_VGA40x25 Выбирает цветной режим VGA 40X25 (режим VGA 1+). (VGA). SW_VGA80x25 Выбирает чернобелый режим VGA 80X25 (режим VGA 2+). (VGA). SW_VGAM80x25 Выбирает режим VGA 7+ - эмулирует поддержку, предоставляемую монохромным дисплеем. (VGA с мнохромным монитором.) SW_VGA11 Выбирает графический режим VGA 640x480 (режим VGA 11.) (VGA). SW_VGA12 Выбирает графический режим VGA 640x480 (режим VGA 12.) (VGA). SW_VGA13 Выбирает графический режим VGA 320x200 (режим VGA 13.) (VGA).



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

Получение информации о режиме дисплея

Следующие запросы ioctl() обеспечивают получение информации о текущем режиме дисплея:

CONS_GET Возвращает текущий режим дисплея, установленный для текущего адаптера дисплея. (Все типы.) CGA_GET Возвращает текущий режим дисплея, установленный для графического адаптера дисплея. (Только CGA.) EGA_GET Возвращает текущий режим дисплея, установленный для улучшенного графического адаптера дисплея. (Только EGA.) MCA_GET Возвращает текущий режим дисплея, установленный для монохромного адаптера дисплея. (Только MONO.) VGA_GET Возвращает текущий режим дисплея, установленный для видеографического растрового адаптера дисплея. (Только VGA.)

Режимы отображения памяти

Процедура ioctl(2) используется для отображения памяти дисплея различных устройств в область данных пользователя. На 20286-х машинах ioctl() возвращает селектор памяти дисплея. Макрос sotofar используется для создания дальнего указателя этого селектора так, чтобы можно было работать с памятью дисплея. Макрос sotofar находится в файле /usr/include/sys/sysmacros.h. На 80386-х машинах ioctl() возвращает символьный указатель (char *).

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

Для отображения памяти дисплея можно использовать следующие запросы ioctl():

MAPCONS Отображает память дисплея адаптера, используемого в текущий момент, в область пользовательских данных. (Все типы адаптеров.) MAPMONO Отображает память дисплея монохромного адаптера, используемого в текущий момент, в область пользовательских данных. (Только MONO.) MAPCGA Отображает память дисплея цветного графического адаптера, используемого в текущий момент, в область пользовательских данных. (Только CGA.) MAPEGA Отображает память дисплея улучшенного графического адаптера, используемого в текущий момент, в область пользовательских данных. (Только EGA.) MAPVGA Отображает память дисплея видеографического растрового адаптера, используемого в текущий момент, в область пользовательских данных. (Только VGA.)



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

char far *dp; int selector; . . . fd=open("/dev/color",O_WRONLY); selector=ioctl(fd,MAPCGA,0); dp=sotofar(selector,0); . . .

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

Переключите режим с помощью ioctl() ("переключение" может выполняться и на уже установленный режим). Смотрите подраздел "Режимы дисплея" в данном разделе. Измените начальный адрес с помощью in-on-port/out-on-port (операций через порты) ioctl().

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

Порт ввода/вывода графического адаптера

Вы можете использовать ioctl(2) для записи байта в порт графического адаптера или чтения байта из этого порта. Параметр arg функции ioctl использует следующую структуру данных io_arg:

struct port_io_arg { struct port_io_struct args[4]; };

Как показано выше структура io_arg указывает на массив из четырех структур данных port_io. Структура port_io имеет следующий формат:

struct port_io_struct { char dir; /*direction flag (in vs. out)*/ unsigned_int port; /*port address*/ char data; /*byte of data*/ };

Для одного вызова ioctl вы можете задать одну, две, три или четыре структуры port_io_struct. Величина dir может принимать значение IN_ON_PORT для задания чтения байта из порта графического адаптера или значение OUT_ON_PORT для записи байта в этот порт. Величина port является целым числом, задающим адрес нужного порта графического адаптера. Величина data содержит байт, принимаемый из порта или посылаемый в этот порт.



Если вы не используете ни одну из структур port_io, присвойте величине port нулевое значение и опустите неиспользуемые структуры в конце массива. Адреса и назначение портов различных адаптеров смотрите в документации по аппаратной части.

Для работы с портом графического адаптера вы можете использовать следующие команды ioctl(2):

MGAIO Чтение или запись байта в порт монохромного адаптера. (Только MONO.) CGAIO Чтение или запись байта в порт цветного графического адаптера. (Только CGA.) EGAIO Чтение или запись байта в порт улучшенного графического адаптера. (Только EGA.) VGAIO Чтение или запись байта в порт видеографического растрового адаптера. (Только VGA.) CONSIO Чтение или запись байта в порт текущего графического адаптера. (Все типы адаптеров.)

Для чтения байта из любого порта графического адаптера присвойте величине dir значение IN_ON_PORT, а величине port - адрес порта графического адаптера. Считанный байт будет возвращен в переменную data.

Для записи байта присвойте величине dir значение OUT_ON_PORT, величине port - адрес порта графического адаптера, а величине data - байт, который вы хотите записать в порт.

Функциональные клавиши

ioctl(2) может использоваться для задания или для получения текущего назначения функциональных клавиш. При этом параметр arg функции ioctl использует следующую структуру данных fkeyarg:

struct fkeyarg { unassigned int keynum; char keydef [MAXFK]; /*Comes from char flen; ioctl.h via comcrt.h*/ }

Для получения или назначения определений функциональных клавиш вы можете использовать следующие запросы ioctl(2):

GETKEY Получает текущее определение функциональной клавиши. Номер этой клавиши должен быть записан в keynum. Строка, приписанная данной клавише, будет возвращена в keydef, а длина этой строки - в flen, когда ioctl завершит свою работу. SETKEY Приписывает данную строку функциональной клавише. Номер этой клавиши должен быть записан в keynum, а длина строки (количество символов) - в переменную flen.

Экранные управляющие последовательности



Следующие символьные последовательности определяются стандартом ANSI X3.64-1979 и могут использоваться для управления и модификации экрана дисплея. Для достижения желаемого эффекта каждое Pn нужно заменить соответствующим десятичным кодом ASCII. Последняя колонка содержит коды termcap(M), где "n/a" означает "не применяется".

Использование в управляющей последовательности 7- и 8-разрядных символов является допустимым для каждого определенного действия. Например, команда ANSI ED может быть вызвана с помощью последовательности "ESC[ Pn j" (0x1b-0x5b-Pn-0x4a, 7-разрядные символы) или последовательности "CSI Pn j" (0x9b-Pn-0x4n, 8-разрядные символы).
Обозначение ISOПоследовательностьДействиеКод termcap ED
(Erase in Display)CSI pN JОчищает весь дисплей или его часть. Pn=0: очистка с активной позиции до конца дисплея. Pn=1: очистка от начала дисплея до активной позиции. Pn=2: очистка всего дисплея. cd EL
(Erase in Line)CSI Pn KОчищает всю строку или ее часть. Pn=0: очистка с активной позиции до конца строки. Pn=1: очистка от начала строки до активной позиции. Pn=2: очистка всей строки. ce ECH
(Erase Character)CSI Pn XСтирает символы Pn. n/a CBT
(Cursor Backward Tabulation)CSI Pn ZПередвигает активную позицию назад на Pn табуляций. bt SU
(Scroll Up)CSI Pn SПрокручивает экран вверх на Pn строк, вставляя снизу пустые строки. sf SD
(Scroll Down)CSI Pn TПрокручивает экран вниз на Pn строк, вставляя сверху пустые строки. sr CUP
(Cursor Position)CSI P1;P2 HПеремещает активную позицию на координату P1 по вертикали и P2 по горизонтали. cm HVP
(Horizontal & Vertica Position)CSI P1;P2 fПеремещает активную позицию на координату P1 по вертикали и l P2 по горизонтали. n/a CUU
(Cursor Up)CSI Pn AПеремещает активную позицию на Pn строк вверх. up(ka) CUD
(Cursor Down)CSI Pn BПеремещает активную позицию на Pn строк вниз. do(kd) CUF
(Cursor Forward)CSI Pn CПеремещает активную позицию на Pn позиций вправо. nd(kr) CUB
(Cursor Backward)CSI Pn DПеремещает активную позицию на Pn позиций назад. bs(kl) HPA
(Horizontal Position Absolute)CSI Pn `Перемещает активную позицию на колонку Pn. n/a HPR
(Horizontal Position Relative)CSI Pn aПеремещает активную позицию на Pn символов вправо. n/a VPA
(Vertical Position Absolute)CSI Pn dПеремещает активную позицию на строку Pn. n/a VPR
(Vertical Position Relative)CSI Pn eПеремещает активную позицию на Pn строк вниз. n/a IL
(Insert Line)CSI Pn LВставляет Pn новых пустых строк. al ICH
(Insert Character)CSI Pn @Вставляет Pn пустых позиций для Pn символов. ic DL
(Delete Line)CSI Pn MУдаляет Pn строк. dl

DCH
(Delete Character)CSI Pn PУдаляет Pn символов. dc

CPL
(Cursor to Previous Line)CSI Pn FПеремещает активную позицию на Pn строк вверх и на начало строки. n/a CNL
(Cursor to Next Line)CSI Pn EПеремещает активную позицию на Pn строк вниз и на начало строки. n/a CGR
(Select Graphic Rendition)CSI 0 mСброс ярких, мигающих, пустых, подчеркнутых и инвертированных символов. Цвет: восстанавливает нормальные установки цветов. n/a SGRCSI 1 mУстанавливает атрибут яркости. Цвет: устанавливает атрибут интенсивности (меняет color на lt_color). n/a SGRCSI 4 mУстанавливает подчеркивание. Цвет: без изменения. n/a SGRCSI 5 mУстанавливает мигание. Цвет: меняет фон с lt_color на color; символ мигает. n/a SGRCSI 7 mУстанавливает инвертирование. Цвет: инвертирует выбранные цвета. so SGRCSI 10 mВыбирает первичный шрифт. GE SGRCSI 11 mВыбирает первый альтернативный шрифт. Разрешает высвечивание символов ASCII с кодами, меньшими 32, в виде символов, зашитых в ПЗУ. n/a SGRCSI 12 mВыбирает второй альтернативный шрифт. Перед выдачей в виде символов, зашитых в ПЗУ, переключает старший бит расширенного кода ASCII. GS SGRESC[ 4 mУстанавливает подчеркивание. Цвет: без изменения. n/a SGRCSI3 C mЦвет: выбор цвета символа C (см. таблицу 1 ниже). n/a SGRCSI4 C mЦвет: выбор цвета фона C (см. таблицу 1 ниже). n/a SGRSCI 8 mУстанавливает мигание. n/a <



/p>

Следующие коды цветов и последовательности определены Международной организацией по стандартизации ISO DP 6429.
Таблица 1

СЦвет 0Черный 1Красный 2Зеленый 3Желтый 4Синий 5Маджента 6Циан 7Белый
Обозначение ISOПоследовательностьДействиеКод termcap SM
(Set Mode)ESC[2hБлокировка клавиатуры. Игнорирует ввод с клавиатуры, пока она не будет разблокирована. Символы не сохраняются. n/a MC
(Media Copy)ESC[2iСодержимое экрана пересылается на главный адаптер. Текущее содержимое экрана посылается прикладной программе. n/a RM
(Reset Mode)ESC[2lСнимает блокировку клавиатуры и восстанавливает прием ввода с клавиатуры. n/a Следующие коды цветов и последовательности составляют дополнительные управляющие последовательности.

Таблица 2

СnЦветCnЦвет 0Черный8Серый 1Красный9С.-голубой 2Зеленый10С.-зеленый 3Желтый11С.-циановый 4Синий12С.-красный 5Маджента13C. маджента 6Циан14Желтый 7Белый15C.-белый
Обозначение ISOПоследовательностьДействиеКод termcap n/aCSI=cAУстанавливает цвет бордюра с. c - десятичное значение, выбираемое из таблицы 2, приведенной выше. (Эта последовательность под- держивается не на всякой аппаратуре.) n/a n/aCSI=p;dBЗадает параметры "звонка" p и d в десятичном виде. p - период звучания в единицах 840.3 наносекунд, а d - длительность звучания в единицах 100 миллисекунд. n/a n/aCSI=s;eCУстанавливает вид курсора с начальной линией s и последней линией e. n/a n/aCSI=xDВключает или выключает (x=1 или 0) интенсивность цвета фона. n/a n/aCSI=xEУстанавливает или сбрасывает (x=1 или 0) бит мигания вместо бита интенсивности фона контроллера дисплея 6845. n/a n/aCSI=cFУстанавливает нормальный цвет символов с.(с - десятичное число, выбираемое из таблицы 2.) n/a n/aCSI=c GУстанавливает нормальный фон. (См. таблицу 2.) n/a n/aCSI=c HУстанавливает инвертированный цвет символов. (См. таблицу 2.) n/a n/aCSI=c IУстанавливает инвертированный цвет фона. (См. таблицу 2.) n/a n/aCSI=c JУстанавливает цвет символов в графике. (См. таблицу 2.) n/a n/aCSI=c KУстанавливает цвет фона в графике. (См. таблицу 2.) n/a n/aESC[PngОбеспечивает доступ к альтернативному графическому набору символов, который не совпадает с набором "графического режима". Смотрите документацию по десятичным/символьным кодам (Pn) и возможным высвечиваемым символам. n/a n/aESCQFn'string'Приписывает строку string функциональной клавише Fn. Ограничителями строки ' и ' могут служит любые символы, не встречающиеся в этой строке. Функциональные клавиши нумеруются от 0 до 9 (F1=0, F2=1 и т.д.) n/a n/aESC[Pnz
CSIPnzPn должно быть равно номеру экрана, на который осуществляется переключение. Срабатывает только в том случае, если экран был сконфигурирован во время загрузки, в противном случае никакого эффекта не будет.n/a ФАЙЛЫ

/dev/console /dev/tty[02-n] /dev/color /dev/monochrome /dev/ega /dev/vga

СМ. ТАКЖЕ

console(5), ioctl(2), keyboard(HW), keymap(5), mapkey(8), mapchan(5), multiscreen(5), setcolor(1), stty(1), systty(5), vidi(1), termcap(5), tty(5)

SCSI(7)


НАЗВАНИЕ

scsi: hd*, fd*, mt - диск, дискета, магнитная лента

ОПИСАНИЕ

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

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

Параметры устройств описываются во включаемом файле <sys/io.h>. В поле тип диска находится основная конфигурационная информация. Каждый полубайт (4 бита) имеет специальное значение:

Подустройство SCSI-устройства. Номер первого сектора на диске (0 или 1). SCSI-идентификатор устройства (7 для приводов дискет). Собственно тип диска, означающий:

0для диска 1для магнитной ленты 2для дискет 256 байт/сектор 3для дискет 512 байт/сектор 4для дискет 1024 байт/сектор 5для дискет 512 байт/сектор в формате MS DOS.

Заметим, что эти данные о томе носят только информационный характер и почти не имеют значения для драйвера. Если информация о разбиении на логические диски [строка HDLDEV в файле ] содержит l_AUTO, драйвер во время генерации системы выполнит автоконфигурацию, получив из файла <sys/io.h> размер носителя информации [см. ].

ФАЙЛЫ

/dev/dsk/hd* Диски как блочные устройства. /dev/rdsk/hd* Диски как бесструктурные устройства. /dev/dsk/fd* Дискеты как блочные устройства. /dev/rdsk/fd* Дискеты как бесструктурные устройства. /dev/mt Магнитная лента. /usr/include/sys/disk.h Информация о дисках. /usr/include/sys/io.h Конфигурационная информация.

СМ. ТАКЖЕ

.

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



SCSI(HW)


НАЗВАНИЕ

scsi - небольшой компьютерный интерфейс к периферийным устройствам.

ОПИСАНИЕ

SCSI обеспечивает стандартный интерфейс к периферийным устройствам, таким как жесткие диски, принтеры, стримеры и прочие. SCSI работает через плату главного адаптера, который может поддерживать до 8 контроллеров, каждый из которых поддерживает до 8 устройств. Заметьте, что к контроллеру можно присоединить только 4 жестких диска.

Схема формирования малых чисел для устройств SCSI (например, для жесткого диска) - та же самая, что и подобная схема для других устройств.

Каждый контроллер SCSI имеет свое собственное главное число устройства.

ПРИМЕЧАНИЯ

Эта утилита не применима ко всем конфигурациям аппаратных и программных средств и не может включаться в ваши дистрибуции.

В настоящий момент единственным главным адаптером SCSI, поддерживаемым в системе, является адаптер Adaptec AHA-1540, управляющий одним или двумя жесткими дисками и одним стримером.

СМ. ТАКЖЕ

hd(HW), tape(HW)



SDB(1)


НАЗВАНИЕ

sdb - символьный отладчик

СИНТАКСИС

sdb [-W] [-w] [объектный_файл [образ_памяти [список_каталогов]]]

ОПИСАНИЕ

По команде sdb запускается символьный отладчик, предназначенный для отладки программ на языках C и Фортран 77. Его можно использовать для анализа объектных файлов и образа памяти, а также для выполнения программ под управлением пользователя.

объектный_файл - это файл с выполняемой программой, откомпилированной с опцией -g (отладка). Если она не была компилирована с опцией -g, возможности символьной отладки ограничиваются, но объектный_файл можно анализировать, равно как можно отлаживаться на уровне машинных команд и процедур. По умолчанию объектный_файл - a.out.

Образ_памяти - это файл с образом памяти, полученный после завершения выполнения объектного_файла. По умолчанию имя образа_памяти есть core. Образ_памяти не обязан присутствовать; знак - на его месте ведет к игнорированию образа.

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

Команда sdb обрабатывает следующие опции:

-W Если файлы с исходными текстами отсутствуют или оказываются новее, чем объектный_файл, выдается предупреждение. Опция -W подавляет проверку и, соответственно, выдачу предупреждения. -w Разрешение изменять объектный_файл и образ_памяти.

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

При отладке имена переменных пишутся точно так же, как в языках C или Фортран 77. Доступ к переменным, локальным для некоторой процедуры, осуществляется посредством конструкции процедура:переменная. Если имя процедуры не указано, используется процедура, содержащая текущую строку. Можно ссылаться на элемент структуры как на структура.элемент; или, посредством указателей, как на указатель->элемент; ссылка на элемент массива выглядит как массив[номер]. Переход от указателя к указуемому объекту записывается как указатель[0]. Допускаются комбинации этих конструкций. Доступ к переменным из общих блоков Фортрана осуществляется аналогично обращению к элементам структур с заменой имени структуры на имя общего блока. Переменные из непоименованного общего блока записываются в виде .переменная.

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

Если адрес указан на месте имени структурной переменной, то шаблоном структуры будет шаблон последней из структур, к которой выполнялся доступ посредством sdb. Вообще, sdb рассматривает структуру как набор переменных; при указании имени структуры выводятся все ее элементы. Исключение составляет вывод адресов: выводится адрес начала структуры, а не отдельных ее элементов.

Элементы многомерных массивов записываются в виде массив[номер][номер]..., или массив[номер,номер,...]. На месте номера может употребляться также конструкция номер;номер, задающая диапазон изменения индекса ("вырезку" из массива); * обозначает весь допустимый диапазон данного индекса. Если символы * являются последними в списке индексов, их можно опустить. При выдаче адресов, как и в случае структур, сообщается адрес всего массива или вырезки, но не адрес каждого из элементов. Многомерные массивы-аргументы подпрограмм на языке Фортран 77 не могут быть выведены как массивы, так как они являются указателями, значения которых есть адреса массивов. Сам массив может быть получен в символическом виде из вызывающей функции. Кроме того, следует учитывать, что sdb отсчитывает индексы от нуля.

Ссылка на конкретный экземпляр переменной из стека делается в виде процедура:переменная,номер. При этом могут использоваться все описанные ранее способы доступа к элементам структур и массивов. Номер - это номер появления процедуры в стеке, считая ближайший к вершине экземпляр первым. Если процедура не указана, используется та, что выполняется в данный момент.

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

Можно оперировать не только со строками исходного текста, но и с адресами, используя конструкцию адрес:.

Пока под управлением sdb выполняется процесс (см. ниже команды r и k), все адреса относятся к программе процесса; в другие моменты они относятся к объектному_файлу или образу_памяти.

Адресация в файле


Отладчик sdb позволяет работать с двумя файлами - об ектным и образом памяти. При этом адрес_в_файле получается из указанного пользователем адреса с помощью отображения, ассоциированного с каждым из двух файлов. Отображение задается двумя тройками (b1, e1, f1) и (b2, e2, f2). Адрес_в_файле вычисляется следующим образом:

если b1 <= адрес < e1 то адрес_в_файле = адрес + f1 - b1 иначе если b2 <= адрес < e2 то адрес_в_файле = адрес + f2 - b2 иначе адрес некорректен

Изначально оба отображения настроены на файлы типов a.out(4) и соответственно. Если какой-либо из указанных в командной строке файлов имеет неподходящий тип, b1 и f1 устанавливаются равными 0, e1 полагается равным максимально допустимому размеру файлов; тем самым можно обращаться к произвольному месту файла без преобразования адреса.

Для того, чтобы sdb мог работать с большими файлами, элементы троек хранятся как 32-разрядные целые числа со знаком.

Команды

Команды для просмотра данных

t Вывести стек вызовов завершившейся или остановленной программы.

T Вывести вершину стека вызовов.

переменная/clm

Вывести значение переменной с учетом длины l и формата m. Число c - счетчик, означающий, что содержимое области памяти, начинающейся по адресу указанной переменной, будет выведено как c переменных заданного типа. Спецификаторы длины:
b Один байт. h Два байта (полуслово). l Четыре байта (слово).

Спецификаторы формата:

c Символ. d Десятичное целое. u Десятичное целое без знака. o Восьмеричное целое. x Шестнадцатеричное целое. f 32-разрядное вещественное число одинарной точности. g 64-разрядное вещественное число двойной точности. s Переменная есть указатель на цепочку символов; выводятся символы этой цепочки. a Вывести цепочку символов, начиная с адреса переменной; нельзя использовать с регистровыми переменными. p Указатель на процедуру. i Дизассемблировать машинную команду и вывести указанные в ней адреса в числовом и символическом виде. I Дизассемблировать машинную команду и вывести указанные в ней адреса только в числовом виде.



Спецификатор длины может использоваться только с форматами c, d, u, o и x. Любая из спецификаций clm может быть опущена. Если опущены все спецификации, то sdb подбирает подходящую длину и формат в соответствии с типом переменной. Если указана спецификация m, то для вывода используется заданный формат. Задание спецификации l может привести к усечению выводимых данных. Счетчик c задает количество единиц памяти, начиная от адреса переменной, которые надлежит вывести. Количество байт в этой единице определяется спецификатором l или, если он не указан, размером указанной переменной. Если счетчик указан со спецификаторами формата s или a, то он определяет количество выводимых символов; иначе цепочка выводится до нулевого байта или до 128 символов включительно. Последнюю из просматривавшихся переменных можно повторно вывести командой ./. Если просматривалась структурная переменная, по команде ./ выводится только последний элемент структуры.

Метасимволы языка * и ? могут использоваться в шаблонах имен процедур и переменных. Таким образом в ограниченном виде предоставляются средства сопоставления с шаблонами. Если не указано имя процедуры, то шаблон сравнивается с глобальными и локальными для данной процедуры именами переменных; если имя процедуры задано - то только с именами ее локальных переменных. Для сравнения только с именами глобальных переменных используйте форму :шаблон.

номер_строки?lm
переменная:?lm

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

переменная=lm
номер_строки=lm
число=lm

Вывести адрес переменной, номера_строки или значение числа по формату, заданному lm. Формат по умолчанию - lx. Последний вариант команды используется для перевода чисел из одной системы счисления в другую.

переменная!значение

Присвоить переменной указанное значение. Значение может быть числом, символьной константой или переменной. Значение должно быть определено; выражения, результатом которых является несколько значений (например, структуры) недопустимы. Символьные константы записываются в виде 'символ. Числа рассматриваются как целые; только если есть десятичная точка или показатель степени, число рассматривается как вещественное двойной точности. Регистры рассматриваются как целые. Переменная может быть выражением, которое означает более чем одну переменную (например, имя массива или структуры). Если указан адрес переменной, то считается, что эта переменная имеет тип int. Если для присваивания необходимо преобразование типов, используются соглашения языка C.

x Вывести содержимое машинных регистров и текущую машинную команду.

X Вывести текущую машинную команду.



Команды для просмотра файлов с исходными текстами

e процедура
e имя_файла
e каталог/
e каталог имя_файла

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

/регулярное_выражение/

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

?регулярное_выражение?

То же, что и предыдущая команда, только поиск выполняется в обратном направлении.

p Вывести текущую строку.

z Вывести текущую строку и следующие за ней 9 строк. Текущей станет последняя выведенная строка.

w Окно. Вывести 10 строк вокруг текущей строки.

номер

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

число+

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

число-

Переместиться назад на заданное число строк и вывести новую текущую строку.

Команды управления выполнением программы

счетчик r аргументы
счетчик R

Начать выполнение программы с заданными аргументами. Команда r без аргументов запускает программу с предыдущим набором аргументов, а R - действительно без аргументов. Аргументы, начинающиеся с < или >, означают переназначение стандартного ввода или вывода соответственно. Если счетчик задан, будет проигнорировано (счетчик-1) точек прерывания.

номер_строки c счетчик
номер_строки C счетчик

Продолжить выполнение после точки прерывания или настоящего прерывания. Если счетчик задан, будет проигнорировано (счетчик-1) точек прерывания. По команде C выполнение будет продолжено с возбуждения сигнала, вызвавшего приостановку программы, а по команде c этот сигнал проигнорируется. Если указан номер_строки, то перед началом выполнения в заданную строку будет вставлена временная точка прерывания, которая после завершения команды будет удалена.

номер_строки g счетчик



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

s счетчик
S счетчик

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

i
I Пошаговое выполнение машинных команд. По команде I выполнение будет продолжено с возбуждения сигнала, вызвавшего приостановку программы, а по команде i этот сигнал игнорируется.

переменная$m счетчик
адрес:m счетчик

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

уровень v

Задать полноту выводимой информации при выполнении команд s, S, m. Если уровень опущен, то выводится только название подпрограммы и исходного файла. Если уровень 1 или больше, то при выполнении выводится также исходная строка. Если уровень 2 или больше, то также выводятся все команды ассемблера, соответствующие данной строке.

k Терминировать процесс, выполняющий отлаживаемую программу.

процедура(арг1, арг2, ... )
процедура(арг1, арг2, ... )/m

Выполнить указанную процедуру с заданными аргументами. Аргументы могут быть целыми числами, символами, цепочками символов или именами переменных, доступных из текущей процедуры. Во втором варианте результат выполнения процедуры выводится в формате m (по умолчанию d). Выполнить отдельную процедуру можно, лишь если редактирование связей осуществлялось командой cc -g.

номер_строки b команды_отладчика

Установить точку прерывания на указанную строку. Если указано имя процедуры без номера_строки (например, proc:), точка прерывания устанавливается на первую строку процедуры, даже если она компилировалась без опции -g. Если номер_строки не указан, то точка прерывания устанавливается на текущую строку. Если команды_отладчика не указаны, то выполнение приостанавливается перед точкой прерывания и управление возвращается sdb. Иначе при достижении точки прерывания выполняются указанные команды_отладчика и работа программы продолжается. Если команд несколько, они разделяются точкой с запятой. Если в качестве команды используется k, то управление передается sdb.

B Вывести список точек прерывания.

номер_строки d



Снять точку прерывания с заданной строки. Если номер_строки не указан, то запрашивается подтверждение на удаление каждой точки прерывания: выдается ее местоположение и читается ответ (со стандартного ввода). Если ответ начинается с y или d, то точка прерывания снимается.

D Удалить все точки прерывания.

l Вывести последнюю выполненную строку.

номер_строки a

Оповещение. Если номер_строки имеет вид процедура:номер, то выполняется команда номер_строки b l. Если номер_строки имеет вид процедура:, то выполняется команда процедура: b T.

Прочие команды

!команда

Команда интерпретируется shell'ом [см. ].

перевод_строки

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

CTRL+D

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

<имя_файла

Читать команды из указанного файла; по достижении его конца читать команды со стандартного ввода. Эта команда не может быть вложенной.

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

М [?/] [*] b e f

Изменить тройку, управляющую отображением адресов. Аргументы ? и / указавают на отображения, ассоциированные с объектным_файлом и образом_памяти соответственно. Если не указана *, то изменяется первая тройка (b1, e1, f1), иначе - вторая. Если задано меньше трех значений, то оставшиеся элементы тройки остаются неизменными.

"строка

Вывести указанную строку. Разрешается использовать управляющие последовательности языка C \символ, где символ не есть цифра.

q Выйти из отладчика.

Команды отладки отладчика

V Вывести версию отладчика.

Q Вывести список отлаживаемых файлов и процедур.

Y Переключить режим выдачи внутренней отладочной информации.

ФАЙЛЫ

a.out core

СМ. ТАКЖЕ

, , .

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

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



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

Данные, хранящиеся в секции команд, недоступны из функций.

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

СЮРПРИЗЫ

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

Отладчик sdb плохо приспособлен для отладки Фортран-программ. Трудно получить доступ к элементам общих блоков и формальным аргументам, элементы многомерных массивов нумеруются по строкам, а не по столбцам. Кроме того, sdb несовместим с компилятором . Рекомендуем пользоваться отладчиком КРОТ.









SDDATE(1)


ИМЯ

sddate - Печатает и назначает даты резервирования.

СИНТАКСИС

sddate[ name lev date ]

ОПИСАНИЕ

Если параметр отсутствует, печатается содержимое файла даты резервирования /etc/ddate. Файл даты резервирования обслуживается командой и содержит самую последнюю дату резервирования каждого уровня резервирования для каждой файловой системы.

Если аргументы заданы, вход замещается или формируется в файле /etc/ddate. Аргумент name(имя) - это последняя компонента имени пути к устройству, аргумент lev - это номер уровня резервирования (от 0 до 9) и аргумент date - это время в форме, соответствующей команде :

mmddhhmm[yy],

где первые две буквы mm - это две цифры номера месяца в диапазоне от 01-12, две буквы dd - это две цифры порядкового номера дня в месяце, две буквы hh соответствуют двум цифрам часа в военном формате от 00 - 23 и последние две буквы mm соответствуют двум цифрам минут в диапазоне от 00 - 59. Две цифры года yy необязательны, предполагается что это смещение от 1900 года, т.е. 19yy.

Иногда возникает желание зарезервировать файловые системы с помощью дословного их копирования в среду резервирования. Команда sddate может быть использована для формирования входа "уровня 0" в /etc/ddate, который затем позволит дополнительно расширить возможности резервирования. Например команда:

sddate rhd0 5 10081520

формирует вход /etc/ddate, показывая резервирования уровня 5 /dev/rhd0 8 октября в 15часов 20 минут.

ФАЙЛЫ

/etc/ddate

СМ. ТАКЖЕ

, ,

ДИАГНОСТИКА

bad conversion - Если дата установлена синтаксически некорректно.



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


ИМЯ

sdenter, sdleave - cинxpoнизиpyeт дocтyп к paздeляeмым ceгмeнтaм дaнныx

СИНТАКСИС

#include <sys/sd.h>

int sdenter (addr, flags) char *addr; int flags;

int sdleave (addr) char *addr;

ОПИСАНИЕ

Sdenter иcпoльзyeтcя пpи пoпыткe тeкyщeгo пpoцecca пoлyчить дocтyп к coдepжимoмy paздeляeмoгo ceгмeнтa дaнныx. Apгyмeнт addr paвeн знaчeнию, вoзвpaщeннoмy пpeдыдyщим вызoвoм . Bыпoлняeмoe дeйcтвиe oпpeдeляeтcя apгyмeнтoм flags, кoтopый cтpoитcя лoгичecкoй cлoжeниeм cлeдyющиx флaгoв:

SD_NOWAIT Ecли дpyгoй пpoцecc yжe cдeлaл вызoв sdenter пo oтнoшeнию к этoмy ceгмeнтy дaнныx, нo нe cдeлaл cooтвeтcтвyющий sdleave c флaгoм SD_UNLOCK, пpoцecc нe ждeт ocвoбoждeния ceгмeнтa и фикcиpyeтcя oшибкa ENAVAIL.

SD_WRITE Укaзывaeт, чтo пpoцecc coбиpaeтcя дeлaть зaпиcь в paздeляeмый ceгмeнт дaнныx. Пpoцecc, пpиcoeдинивший paздeляeмый ceгмeнт дaнныx c ycтaнoвлeнным флaгoм SD_RDONLY, нe мoжeт выпoлнять sdenter c флaгoм SD_WRITE.

Sdleave иcпoльзyeтcя для yкaзaния тoгo, чтo тeкyщий пpoцecc зaкoнчил мoдификaцию coдepжимoгo paздeляeмoгo ceгмeнтa дaнныx.

Moдификaции paздeляeмoгo ceгмeнтa дaнныx, cдeлaнныe мeждy вызoвaми sdenter и sdleave, выпoлняютcя кoppeктнo и мoгyт быть yчтeны дpyгими пpoцeccaми. He peкoмeндyeтcя нaдoлгo ocтaвлять ceгмeнт пoд дeйcтвиeм вызoвa sdenter: кaк тoлькo зaвepшeнa тeкyщaя paбoтa c ceгмeнтoм, вызывaть sdleave. B чacтнocти, нe peкoмeндyeтcя мeждy sdenter и sdleave выпoлнять cиcтeмныe вызoвы.

Ecли ceгмeнт был coздaн бeз флaгa SD_UNLOCK, мeждy sdenter и sdleave зaпpeщeн cиcтeмный вызoв fork.

Boзвpaщaeмoe знaчeниe

B cлyчae ycпeшнoгo зaвepшeния вoзвpaщaeтcя знaчeниe 0. Инaчe вoзвpaщaeтcя знaчeниe -1 и в errno зaнocитcя кoд oшибки. Oшибкa EINVAL oзнaчaeт, чтo пpoцecc вызвaл sdenter c флaгoм SD_WRITE, a ceгмeнт yжe пpиcoeдинeн дpyгим пpoцeccoм c флaгoм SD_RDONLY. Oшибкa ENAVAIL oзнaчaeт, чтo в sdenter yкaзaн флaг SD_NOWAIT, a paздeляeмый ceгмeнт нe cвoбoдeн.

СМ. ТАКЖЕ

,

ЗAМEЧAНИЯ

Эти cpeдcтвa cпeцифичны для XENIX и мoгyт oтcyтcтвoвaть в дpyгиx peaлизaцияx UNIX. Пpoгpaммы, иcпoльзyющиe эти фyнкции, дoлжны кoмпoнoвaтьcя c флaгoм -lx.



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


ИМЯ

sdget, sdfree - пpиcoeдиняeт и oтcoeдиняeт paздeляeмый ceгмeнт дaнныx

СИНТАКСИС

#include <sys/sd.h>

char *sdget (path, flags, size[, mode]) char *path; int flags, mode; long size;

int sdfree (addr) char *addr;

ОПИСАНИЕ

Sdget пpиcoeдиняeт paздeляeмый ceгмeнт дaнныx к пpocтpaнcтвy дaнныx тeкyщeгo пpoцecca. Ceгмeнт зaдaeтcя имeнeм path. Bыпoлняeмыe дeйcтвия oпpeдeляютcя apгyмeнтoм flags, кoтopый cтpoитcя лoгичecким cлoжeниeм cлeдyющиx флaгoв:

SD_RDONLY Пpиcoeдинить ceгмeнт тoлькo для чтeния.

SD_WRITE Пpиcoeдинить ceгмeнт для чтeния и зaпиcи.

SD_CREAT Ecли ceгмeнт cyщecтвyeт и нe иcпoльзyeтcя (нeaктивeн), дeйcтвиe эквивaлeнтнo coздaнию пycтoгo ceгмeнтa. Инaчe ceгмeнт coздaeтcя в cooтвeтcтвии c size и mode. Знaчeниe mode зaдaeт пpaвa дpyгиx пpoцeccoв пo чтeнию и зaпиcи этoгo ceгмeнтa. Дoпycтимы фyнкции, пpимeняeмыe к oбычным фaйлaм. Пpaвo выпoлнeния ceгмeнтa лишeнo cмыcлa. Пocлe coздaния ceгмeнт инициaлизиpyeтcя нyлями.

SD_UNLOCK Hecкoлькo пpoцeccoв мoгyт имeть дocтyп к ceгмeнтy мeждy sdenter и sdleave.

Sdfree oтcoeдиняeт paздeляeмый ceгмeнт дaнныx oт тeкyщeгo пpoцecca. Ceгмeнт зaдaeтcя aдpecoм пpиcoeдинeния addr. Ecли тeкyщий пpoцecc cдeлaл paнee вызoв sdenter, нo нe cдeлaл sdleave, пepeд oтcoeдинeниeм ceгмeнтa aвтoмaтичecки выпoлняeтcя sdleave.

Koгдa нe ocтaeтcя бoльшe пpoцeccoв, пpиcoeдинившиx дaнный ceгмeнт, coдepжимoe ceгмeнтa пepecтaeт cyщecтвoвaть и ни oдин пpoцecc нe мoжeт пpиcoeдинить ceгмeнт бeз coздaния eгo пocpeдcтвoм sdget c флaгoм SD_CREAT. B errno зaнocитcя кoд oшибки EEXIST, ecли пpoцecc пытaeтcя coздaть paздeляeмый ceгмeнт дaнныx, кoтopый yжe cyщecтвyeт и иcпoльзyeтcя. B errno зaнocитcя кoд oшибки ENOTNAM, ecли пpoцecc пpимeняeт sdget к фaйлy, кoтopый cyщecтвyeт, нo нe имeeт тип paздeляeмыx дaнныx.

ЗAМEЧAНИЯ

Иcпoльзoвaниe флaгa SD_UNLOCK имeeт cмыcл в cиcтeмe c cooтвeтcтвyющeй aппapaтнoй пoддepжкoй.

B cлyчae 286 пpoцeccopa sdget и дpyгиe oпepaции c paздeляeмыми ceгмeнтaми дaнныx cлeдyeт пpимeнять тoлькo для бoльшoй мoдeли пaмяти. Пpoгpoaммы c мaлoй и cpeднeй мoдeлями, пытaющиecя иcпoльзoвaть paздeляeмыe ceгмeнты дaнныx, нaтaлкивaютcя нa нexвaткy пaмяти. Aппapaтypa 286 пpoцeccopa нe пoзвoляeт в cлyчae мaлoй мoдeли peaлизoвaть paздeляeмыe ceгмeнты дaнныx, пpeднaзнaчeнныe тoлькo для чтeния. Oднaкo, тaкиe ceгмeнты peaлизyютcя в бoльшoй мoдeли.

B cлyчae 386 пpoцeccopa aдpecнoe пpocтpaнcтвo 32-битoвoe и paздeляeмыe ceгмeнты дaнныx мoгyт иcпoльзoвaтьcя бeз oгpaничeний, cвoйcтвeнныx 286 пpoцeccopy.

sdget aвтoмaтичecки yвeличивaeт гpaницy ceгмeнтa дaнныx, ycтaнaвливaя ee cpaзy пocлe paздeляeмoгo ceгмeнтa дaнныx. Этo вoздeйcтвyeт нa пocлeдyющиe вызoвы sbrk и brk, кoтopыe пытaютcя вoccтaнoвить пpeжнюю гpaницy. B чacтнocти, пoпыткa вoccтaнoвить гpaницy, кoтopaя былa дo вызoвa sdget, пpивoдит к oшибкe.

Эти cpeдcтвa cпeцифичны для XENIX и мoгyт oтcyтcтвoвaть в дpyгиx peaлизaцияx UNIX. Пpoгpaммы, иcпoльзyющиe эти фyнкции, дoлжны кoмпoнoвaтьcя c флaгoм -lx.

Boзвpaщaeмoe знaчeниe



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


ИМЯ

sdgetv, sdwaitv - cинxpoнизиpyeт дocтyп к paздeляeмым дaнным

СИНТАКСИС

#include <sys/sd.h>

int sdgetv (addr) char *addr;

int sdwaitv (addr, vnum) char *addr; int vnum;

ОПИСАНИЕ

Sdgetv и sdwaitv мoгyт иcпoльзoвaтьcя взaимoдeйcтвyющими пpoцeccaми пpи дocтyпe к paздeляeмым ceгмeнтaм дaнныx. Oбe фyнкции вoзвpaщaют нoмep вepcии paздeляeмoгo ceгмeнтa дaнныx, пpиcoeдинeннoгo пpoцeccoм пo aдpecy addr. Hoмep вepcии ceгмeнтa измeняeтcя вcякий paз, кoгдa кaкoй-либo пpoцecc выпoлняeт sdleave для этoгo ceгмeнтa.

Sdgetv пpocтo вoзвpaщaeт нoмep вepcии ceгмeнтa.

Sdwaitv пepeвoдит тeкyщий пpoцecc в oжидaниe, пoкa нoмep вepcии yкaзaннoгo ceгмeнтa нe cтaнeт paвным vnum.

Boзвpaщaeмoe знaчeниe

B cлyчae ycпeшнoгo зaвepшeния sdgetv и sdwaitv вoзвpaщaют пoлoжитeльнoe цeлoe чиcлo, являющeecя тeкyщим нoмepoм вepcии yкaзaннoгo paздeляeмoгo ceгмeнтa дaнныx. Инaчe вoзвpaщaeтcя знaчeниe -1 и в errno зaнocитcя кoд oшибки.

СМ. ТАКЖЕ

,

ЗAМEЧAНИЯ

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



SDIFF(1)


НАЗВАНИЕ

sdiff - распечатка несоответствий в файлах в виде таблицы построчного сравнения

СИНТАКСИС

sdiff [-w ширина] [-l] [-s] [-o вых_файл] файл1 файл2

ОПИСАНИЕ

Команда sdiff использует результат работы утилиты для того, чтобы сформировать листинг построчного сравнения двух файлов. Каждая строка листинга содержит: либо пару строк исходных файлов, разделенных пробелами в случае совпадения или знаком | в случае несовпадения; либо строку файла1 с пометкой < при ее отсутствии в файле2; либо соответственно строку файла2 с пометкой >. Пример:

x | y a a b < c < d d > c z z

Допускаются следующие опции:

-w ширина

Установить ширину выдачи. По умолчанию ширина равна 130 символам.

-l Для каждой пары одинаковых строк печатать только левую часть вывода.

-s Не печатать одинаковые строки.

-o вых_файл

Использовать вых_файл, как имя третьего файла, в который под управлением пользователя выполняется слияние двух исходных файлов. Одинаковые строки из файла1 и файла2 копируются в вых_файл автоматически. Блок отличий (одного и того же характера - то есть различающиеся строки; строки, имеющиеся только в файле1; строки имеющиеся только в файле2) выводится пользователю и сопровождается приглашением %, в ответ на которое должна последовать одна из команд:

l Добавить левую колонку к файлу вывода. r Добавить правую колонку к файлу вывода. s Включить режим молчания; не печатать совпадающие строки. v Выключить режим молчания. e l Вызвать редактирование левой колонки. e r Вызвать редактирование правой колонки. e b Вызвать редактирование с конкатенацией левой и правой колонок. e Вызвать редактирование для файла нулевой длины. q Выйти из программы.

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

СМ. ТАКЖЕ

, .



SED(1)


НАЗВАНИЕ

sed - пакетный редактор

СИНТАКСИС

sed [-n] [-e сценарий] [-f с_файл] ... [файл ...]

ОПИСАНИЕ

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

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

В нормальном режиме sed циклически выполняет следующие действия:

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

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

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

В контекстном адресе конструкция \?регулярное_выражение?, где ? - любой символ, эквивалентна конструкции /регулярное_выражение/. Например, в контекстном адресе \xabc\xdefx второй x означает сам себя, поэтому значением выражения является abcxdef. Управляющая последовательность \n соответствует символу перевода строки, который включается в буфер. Точка . соответствует любому символу, кроме последнего перевода строки в буфере. Командная строка без адреса применима к любому буферу. Командная строка с одним адресом применима к буферу с соответствующим адресом. Командная строка с двумя адресами применима к буферам с адресами в диапазоне от первого до второго включительно (если второй адрес является числом, которое не превосходит номера строки, выбранной первой, обрабатывается только одна строка). Затем процесс повторяется, начиная с первого адреса.


С помощью функции отрицания ! (см. ниже) команды редак- тирования могут быть применены к буферу, не попадающему в указанный диапазон адресов.

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

Аргумент текст состоит из одной или более строк. Все строки, кроме последней, заканчиваются на \, чтобы экранировать символ перевода строки. Символы \ в тексте трактуются так же, как в заменяющей цепочке символов команды s, и могут использоваться для экранирования начальных пробелов и табуляций, которые обычно из командной строки удаляются. Аргументы ч_файл и з_файл должны быть последними в строке, перед ними должен быть ровно один пробел. Все з_файлы создаются до начала работы. Может быть до 10 различных з_файлов.
(1)a\ текст Добавить. Вывести текст перед чтением следующей входной строки. (2)b метка Перейти к команде :, содержащей метку. Если метка пуста, перейти на конец сценария. (2)c\ текст Заменить. Удалить содержимое буфера. При 0 или 1 адресе или в конце 2-адресного диапазона вывести текст. Начать новый цикл. (2)d Удалить содержимое буфера. Начать новый цикл. (2)D Удалить начало буфера, до первого перевода стро- ки. Начать новый цикл. (2)g Заменить содержимое буфера содержимым хранилища. (2)G Добавить к содержимому буфера содержимое хранили- ща. (2)h Заменить содержимое хранилища содержимым буфера. (2)H Добавить к содержимому хранилища содержимое буфе- ра. (1)i\ текст Вставить. Вывести текст. (2)l Вывести буфер, заменяя непечатные символы на пары символов ASCII и разбивая длинные строки. (2)n Скопировать буфер на стандартный вывод. Заменить содержимое буфера на следующую входную строку. (2)N Добавить к буферу следующую входную строку с сох- ранением символа перевода строки. (Текущий номер строки изменяется). (2)p Скопировать буфер на стандартный вывод. (2)P Скопировать начальный сегмент буфера (до первого перевода строки) на стандартный вывод. (1)q Выйти. Перейти на конец сценария. Нового цикла не начинать. (2)r ч_файл Прочитать содержимое ч_файла. Поместить его на стандартный вывод перед чтением следующей входной строки. <



/p>

(2)s/регулярное_выражение/замена/флаги

Подставить замену вместо фрагментов буфера, отождествленных с регулярным_выражением. Вместо / можно использовать любой символ. Детали см. в . Флаги могут быть опущены или иметь следующие значения:
g Заменить все вхождения регулярного_выражения, а не только первое. p Если замена произошла, вывести содержимое буфера. w з_файл Если замена произошла, добавить содержимое буфера к з_файлу.

(2)t метка Проверить. Перейти к команде :, содержащей метку, если со времени последнего чтения входной строки или последнего выполнения команды t в буфере выполнялись подстановки. Если метка пуста, перейти на конец сценария. (2)w з_файл Записать. Добавить содержимое буфера к з_файлу. (2)x Обменять содержимое буфера и хранилища.

(2)y/цепочка1/цепочка2/

Заменить все символы буфера, содержащиеся в цепочке1, на соответствующие символы цепочки2. Длины цепочек должны совпадать.

(2)! функция Отрицание. Применить функцию (или группу, если функция начинается с {) только к строкам, которые не соответстуют адресам. (0): метка Не делает ничего. Содержит лишь метку, на которую может быть осуществлен переход командами t или b. (1)= Вывести в качестве отдельной строки номер текущей строки. (2){ Выполнить следующие команды, вплоть до соответст- вующего символа }. (0) Пустая команда.

СМ. ТАКЖЕ

, , .

SEMCTL(2)


НАЗВАНИЕ

semctl - операции управления семафорами

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h>

int semctl (semid, semnum, cmd, arg) int semid, cmd; int semnum; union semun { int val; struct semid_ds *buf; ushort *array; } arg;

ОПИСАНИЕ

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

GETVAL Получить значение семафора semval [см. ]. {Требуется право на чтение.} SETVAL Установить значение семафора semval равным arg.val. {Требуется право на изменение.} После успешного выполнения этой команды значение semadj, соответствующее заданному семафору во всех процессах, устанавливается равным 0. GETPID Получить значение sempid. {Требуется право на чтение.} GETNCNT Получить значение semncnt. {Требуется право на чтение.} GETZCNT Получить значение semzcnt. {Требуется право на чтение.}

Следующие команды cmd читают и устанавливают значение каждого семафора в множестве семафоров:

GETALL Прочитать значения семафоров в массив, на который указывает arg.array. {Требуется право на чтение.} SETALL Установить значения семафоров равными значениям элементов массива, на который указывает arg.array. {Требуется право на изменение.} После успешного выполнения этой команды значения semadj, соответствующие заданным семафорам во всех процессах, устанавливаются равными 0.

Предоставляются также следующие команды:

IPC_STAT Поместить текущее значение каждого поля структуры данных, ассоциированной с идентификатором semid, в структуру, на которую указывает arg.buf. Содержимое этой структуры определяется в . {Требуется право на чтение.} IPC_SET Присвоить следующим полям структуры данных, ассоциированной с идентификатором semid, соответствующие значения, находящиеся в структуре, на которую указывает arg.buf:

sem_perm.uid sem_perm.gid sem_perm.mode /* Только младшие 9 бит */

Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid. IPC_RMID Удалить из системы идентификатор семафора, определяемый значением semid, ликвидировать множество семафоров и ассоциированную с ним структуру данных. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid.


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

[EINVAL] Значение аргумента semid не является корректным идентификатором множества семафоров. [EINVAL] Номер семафора semnum меньше 0 или превышает значение sem_nsems. [EINVAL] Некорректное значение аргумента cmd, определяющее команду. [EACCES] Нет прав на выполнение операции у вызывающего процесса. [ERANGE] Значение аргумента cmd равно SETVAL или SETALL и значение, которое присваивается семафору, больше максимально допустимого в системе. [EPERM] Значение аргумента cmd равно IPC_RMID или IPC_SET и действующий идентификатор пользователя вызывающего процесса не равен ни идентификатору суперпользователя, ни значению поля sem_perm.cuid или sem_perm.uid в структуре данных, ассоциированной с идентификатором semid. [EFAULT] Значение arg.buf указывает за пределы отведенного процессу адресного пространства.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

При успешном завершении системного вызова возвращаются следующие значения, в зависимости от команды cmd:
GETVALЗначение семафора semval. GETPIDИдентификатор процесса sempid. GETNCNTЗначение semncnt. GETZCNTЗначение semzcnt. Результат успешного выполнения остальных операций равен 0.

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

SEMGET(2)


НАЗВАНИЕ

semget - получение идентификатора множества семафоров

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h>

int semget (key, nsems, semflg) key_t key; int nsems, semflg;

ОПИСАНИЕ

Системный вызов semget возвращает идентификатор множества семафоров, ассоциированный с ключом key.

Идентификатор и ассоциированные с ним структура данных и множество из nsems семафоров [см. ] создаются для ключа key в следующих случаях:

Значение аргумента key равно IPC_PRIVATE. Ключ key еще не имеет ассоциированного с ним идентификатора множества семафоров и выражение (semflg & IPC_CREAT) истинно.

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

Значения полей sem_perm.cuid, sem_perm.uid, sem_perm.cgid и sem_perm.gid устанавливаются равными действующему идентификатору пользователя и, соответственно, действующему идентификатору группы вызывающего процесса. Младшие 9 бит поля sem_perm.mode устанавливаются равными 9 младшим битам аргумента semflg. Значение поля sem_nsems устанавливается равным значению аргумента nsems. Значение поля sem_otime устанавливается равным 0 и значение поля sem_ctime устанавливается равным текущему времени.

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

[EINVAL] Значение аргумента nsems меньше или равно 0, или больше максимально допустимого в системе. [EACCES] Для ключа key уже существует идентификатор множества семафоров, но не могут быть предоставлены права доступа [см. ], определенные в 9 младших битах аргумента semflg. [EINVAL] Для ключа key уже существует идентификатор множества семафоров, но количество семафоров в ассоциированном множестве меньше значения nsems и значение nsems не равно 0. [ENOENT] Для ключа key не существует идентификатор множества семафоров и выражение (semflg & IPC_CREAT) ложно. [ENOSPC] Идентификатор множества семафоров должен быть создан, но тогда будет превышено максимально допустимое количество идентификаторов в системе. [ENOSPC] Идентификатор множества семафоров должен быть создан, но тогда будет превышено максимально допустимое количество семафоров в системе. [EEXIST] Для ключа key уже существует идентификатор множества семафоров и выражение ((semflg & IPC_CREAT) & (semflg & IPC_EXCL)) истинно.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

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



SEMOP(2)


НАЗВАНИЕ

semop - операции над множеством семафоров

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/sem.h>

int semop (semid, sops, nsops); int semid; struct sembuf **sops; unsigned nsops;

ОПИСАНИЕ

Системный вызов semop используется для выполнения набора операций над множеством семафоров, ассоциированным с идентификатором semid. Значение аргумента sops является указателем на массив структур, описывающих операции (см. СЮРПРИЗЫ). Значение аргумента nsops равно количеству структур в массиве. Каждая структура, описывающая операцию, содержит следующие поля:

short sem_num; /* Номер семафора */ short sem_op; /* Операция над семафором */ short sem_flg; /* Флаги операции */

Каждая операция, специфицированная значением sem_op, выполняется над соответствующим семафором, заданным значениями semid и sem_num.

Значение поля sem_op специфицирует одну из трех операций:

Если значение sem_op отрицательно, то выполняется одно из следующих действий {Требуется право на изменение.}:

Если значение семафора semval [см. ] больше или равно абсолютной величине sem_op, то абсолютная величина sem_op вычитается из значения semval. Аналогично, если выражение (sem_flg & SEM_UNDO) истинно, то абсолютная величина sem_op добавляется к значению переменной semadj вызывающего процесса для заданного семафора [см. ]. Если значение семафора semval меньше абсолютной величины sem_op и выражение (sem_flg & IPC_NOWAIT) истинно, то сразу же возвращается управление вызывающему процессу. Если значение семафора semval меньше абсолютной величины sem_op и выражение (sem_flg & IPC_NOWAIT) ложно, то увеличивается значение semncnt соответствующего семафора и приостанавливается выполнение вызывающего процесса до появления одного из следующих событий:

Значение semval становится большим или равным абсолютной величине sem_op. Когда это происходит, то соответствующее заданному семафору значение semncnt уменьшается на 1, абсолютная величина sem_op вычитается из значения semval и, если выражение (sem_flg & IPC_UNDO) истинно, абсолютная величина sem_op добавляется к значению semadj вызывающего процесса для заданного семафора.


Идентификатор множества семафоров, над которым вызывающий процесс выполняет операцию, удаляется из системы [см. ]. Когда это происходит, переменной errno присваивается значение EIDRM и вызывающему процессу возвращается -1.

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

Если значение sem_op положительно, то оно добавляется к значению semval и, если выражение (sem_flg & SEM_UNDO) истинно, значение sem_op вычитается из значения semadj вызывающего процесса для заданного семафора. {Требуется право на изменение.} Если значение sem_op равно нулю, выполняется одно из следующих действий {Требуется право на чтение}:

Если значение семафора semval равно нулю, то управление сразу же возвращается вызывающему процессу. Если значение семафора не равно нулю и выражение (sem_flg & IPC_NOWAIT) истинно, управление сразу же возвращается вызывающему процессу. Если значение семафора не равно нулю и выражение (sem_flg & IPC_NOWAIT) ложно, то значение semzcnt для соответствующего семафора увеличивается на 1 и выполнение вызывающего процесса приостанавливается до появления одного из следующих событий:

Значение semval становится равным нулю. Когда это происходит, то соответствующее заданному семафору значение semzcnt уменьшается на 1.

Идентификатор множества семафоров, над которым вызывающий процесс выполняет операцию, удаляется из системы. Когда это происходит, переменной errno присваивается значение EIDRM и вызывающему процессу возвращается -1.

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

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



[EINVAL] Значение аргумента semid не является корректным идентификатором множества семафоров. [EFBIG] Номер семафора sem_num меньше нуля или больше или равен количеству семафоров в множестве, определяемом идентификатором semid. [E2BIG] Количество заданных операций nsops больше максимально допустимого в системе. [EACCES] У вызывающего процесса нет прав на выполнение операции [см. ]. [EAGAIN] Выполнение операции привело бы к приостановке вызывающего процесса, а выражение (semflg & IPC_NOWAIT) истинно. [ENOSPC] Превышается максимально допустимое количество процессов, устанавливающих флаг SEM_UNDO. [EINVAL] Превышается максимально допустимое количество семафоров, для которых вызывающий процесс устанавливает флаг SEM_UNDO. [ERANGE] Значение семафора semval превышает максимально допустимое системой. [ERANGE] Значение semadj превышает максимально допустимое системой. [EFAULT] Аргумент sops указывает за пределы отведенного процессу адресного пространства.

При успешном выполнении системного вызова значение sempid для каждого семафора, заданного массивом структур, на который указывает sops, устанавливается равным идентификатору (номеру) вызывающего процесса.

СМ. ТАКЖЕ

, , , , , .

ДИАГНОСТИКА

Если системный вызов semop завершается неудачей из-за получения сигнала, то вызывающему процессу возвращается -1, а переменной errno присваивается значение EINTR. Если системный вызов semop завершается неудачей из-за удаления из системы идентификатора множества семафоров semid , то возвращается -1 и errno присваивается значение EIDRM.

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

СЮРПРИЗЫ

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









SERIAL(HW)


НАЗВАНИЕ

tty[a-h], tty[A-H], tty2[a-h], tty2[A-H] - интерфейс к последовательным портам.

ОПИСАНИЕ

Файлы tty[a-h], tty[A-H], tty2[a-h], tty2pA-H] к стандартным и дополнительным последовательным портам компьютера. Каждый из этих файлов соответствует одному последовательному порту (с модемным управлением или без него). Эти файлы получают свое имя в соответствии со следующими соглашениями:

Первое число в имени файла соответствует разъему платы расширения COM. Строчные буквы указывают на отсутствие модемного управления. Прописные буквы указывают на наличие модемного управления портом.

Файлы tty1a и tty1A относятся к порту COM1, а файлы tty2a и tty2A относятся к порту COM2.

Например, если плата расширения COM1 имеет четыре порта, плата COM2 - один, то вы можете обращаться к следующим файлам:

tty1a tty1A tty1b tty1B tty1c tty1C tty1d tty1D

tty2a tty2A

Каждый последовательный порт может использоваться в режиме с модемным управлением и в режиме без модемного управления. Имена устройств в следующей таблице относятся к последовательным портам с модемным управлениям и без него. В первой части таблицы описываются платы COM1, а во второй части - платы COM2. "Малое число" - это малое число устройства соответствующего порта (см. mknod(1)).

Последовательные порты Тип платыБез модемного расширения контроляС модемным контролем  Малое числоИмяМалое числоИмя 1 порт0tty1a128tty1A   4 порт1tty1b129tty1B  2tty1c130tty1C  3tty1d131tty1D  4tty1e132tty1E 8 порт5tty1f133tty1F  6tty1g134tty1G  7tty1h135tty1H   1 порт8tty1a136tty1A   4 порт9tty1b137tty1B  10tty1138tty1C  11tty1d139tty1D  12tty1e140tty1E 8 порт13tty1f141tty1F  14tty1g142tty1G  15tty1h143tty1H

Векторы прерывания:

Для плат COM1 - 4

Для плат COM2 - 3

Список адресов ввода/вывода смотрите в "Описании", прилагаемом к дистрибуции.

Доступ к файлам

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


В случае многопортовых плат расширения при необходимости создания дополнительных файлов вы должны использовать программу mkdev(8).

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

При попытке работать с неинсталлированным или неопределенным последовательным портом возникнет ошибка.

Последовательные порты могут использоваться в различных целях при осуществлении последовательной связи, например, для присоединения терминалов к компьютеру, подключения принтеров или формирования сети последовательной связи с другими компьютерами. Обратите внимание, что последовательный порт может функционировать на большинстве стандартных скоростей передачи данных в системе UNIX и что эти порты (на большинстве компьютеров) имеют конфигурацию типа DTE (Data Terminal Equipment - терминальное оборудование). В следующей таблице определяется, как используется каждый вывод в 25- и 9-жильных соединениях:
25-ж. 9-ж.Описание 22Передача данных 33Прием данных 47Запрос на передачу 58Сброс для передачи 75Сигнальная земля 81Обнаружение несущей частоты (установка готовности данных) 204Готовность терминала Для терминального (или прямого) соединения требуются только 2,3 и 7 (2,3 и 5 для 9-жильного) выводы.

Порт с модемным управлением использует выводы 2, 3 и 7 также, как и порт без модемного управления: передача - на 2 выводе, прием - на 3 выводе. Вывод 7 - заземление. Для порта, работающего в режиме без модемного управления, состояние всех прочих выводов не устанавливается и не читается. Для порта с модемным управлением требуется получение сигналов на выводах 4 и 20 (RTS и DTR), и порт не может быть открыт без получения сигнала на выводе 8 (CXD). То есть передача данных на выводе 2 не будет осуществляться до тех пор, пока не будет сигнала от другого источника на выводе 8.



Подробности функционирования последовательных портов в системе UNIX смотрите на страницах документации tty(5) и termio(5).

ФАЙЛЫ

/dev/tty1[a-h] /dev/tty1[A-H] /dev/tty2[a-h] /dev/tty2[A-H]

СМ. ТАКЖЕ

cmos(HW), csh(C), cu(C), getty(ADM), mkdev(ADM), mknod(C), nohup(C), open(S), termio(M), tty(M), uucp(C)

ПРИМЕЧАНИЯ

Если вы подключаетесь через последовательный порт с модемным управлением, то прекращение связи на этой линии отключает вас и уничтожает ваши фоновые процессы. Смотрите nohup(1) и csh(1).

Нельзя в одно и то же время использовать один и тот же порт в обоих режимах - с модемным управлением и без него. Например, нельзя использовать одновременно tty1a и tty1A.

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









SET(1)


ИМЯ

set - установка режимов

СИНТАКСИС

set [+|-][aefmnuvx [arg...]]

ОПИСАНИЕ

Команда set устанавливает (-) или обнуляет (+) флаг, устанавливает позиционные параметры arg, а если этот аргумент отсутствует, то все позиционные параметры обнуляются.

ФЛАГИ

-a все переменные экспортируются; -e завершение работы при ошибке для интерактивного режима работы Shell; -f запрещение подстановки имен файлов; -m вывод номера задания при запуске; -n команды читаются, но не выводятся; -u считать ошибкой отсутствие параметра при подстановке; -v все строки, читаемые интерпретатором, выводить в стандартный файл вывода; -x вывод команд перед выполнением.



SETBUF(3S)


НАЗВАНИЕ

setbuf, setvbuf - назначение буферов для потока

СИНТАКСИС

#include <stdio.h>

void setbuf (stream, buf) FILE *stream; char *buf;

void setvbuf (stream, buf, type, size) FILE *stream; char *buf; int type, size;

ОПИСАНИЕ

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

Требуемый размер буфера определяется константой BUFSIZ, заданной во включаемом файле <stdio.h>:

char buf [BUFSIZ];

Функция setvbuf также может быть использована сразу после открытия потока, но перед тем, как выполнена первая из процедур ввода/вывода. Аргумент type определяет тип буферизации. Допустимы следующие типы буферизации, описанные в <stdio.h>:

_IOFBF

Полная буферизация ввода/вывода.

_IOLBF

Строчная буферизация вывода; буфер вывода выталкивается при выдаче символа перевода строки, заполнении буфера или запросе на ввод.

_IONBF

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

Если значение buf не равно NULL, массив, на который указывает buf, будет использоваться вместо автоматически назначаемых буферов. Аргумент size задает размер используемого буфера. Константа BUFSIZ, определенная во включаемом файле <stdio.h>, является разумным значением для размера буфера. Если ввод/вывод небуферизован, то аргументы buf и size игнорируются.

По умолчанию вывод на терминал является строчно буферизованным, а весь остальной ввод/вывод буферизуется полностью.

СМ. ТАКЖЕ

, , , , .

ДИАГНОСТИКА

Если указано некорректное значение для аргументов type или size, то функция setvbuf возвращает ненулевое значение. В противном случае результат равен 0.

ПРИМЕЧАНИЯ

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



SETCLOCK(8)


НАЗВАНИЕ

setclock - устанавливает в системе реальное время (время суток).

СИНТАКСИС

setclock [time]

ОПИСАНИЕ

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

MMddhhmmyy

где MM - месяц, hh - час, mm - минуты, yy - две последние цифры года. Если год не задается, то берется текущая установка yy. Например, команда

082615035

устанавливает время суток на 15:03, 26 августа, 1985 года.

ФАЙЛЫ

/etc/setclock

СМ. ТАКЖЕ

ПРИМЕЧАНИЯ

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



SETCOLOR(1)


ИМЯ

setcolor,ssetcolour - Назначает цвет экрана

СИНТАКСИС

setcolor -[nbrgopc] argument [argument]

ОПИСАНИЕ

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

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

голубой (blue) лиловый (magenta) светло-голубой (lt_blue) светло-лиловый (lt_magenta) бирюзовый (cyan) белый (white) светло-бирюзовый (lt_cyan) ярко-белый(hi_white) коричневый (brown) черный (black) желтый (yellow) серый (gray) зеленый (green) красный (red) светло-зеленый (lt_green) светло-красный (lt_red)

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

-n Устанавливает на экране "обычные" белые символы на черном фоне.

color [color]

Устанавливает для переднего плана первый цвет. Назначает фону второй цвет, если определен выбор для второго цвета.

-b color

Устанавливает указанный цвет для фона.

-r color

Устанавливает для символов негативного видеоизображения переднего плана первый цвет. Устанавливает для символов негативного видеоизображения фона второй цвет.

-g color

Устанавливает первый цвет для графических символов переднего плана. Устанавливает для графических символов фона второй цвет.

-o Устанавливает цвет для рамки экрана (область overscan).

-p pitch duration (длительность основного тона)

Устанавливает основной тон и длительность звонка. Основной тон это промежуток времени в микросекундах, длительность измеряется в 1/5 части секунды. В случае использования этой опции, комбинация control-G (звонок) должна быть отображена на экране для выполнения команды.

Например:

setcolor -p 2500 2 echo^G

-cfirst last

Устанавливает первую и последнюю линии сканирования курсора.

ЗАМЕЧАНИЯ

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

Иногда изменяя цвет экрана можно продлить жизнь вашего монитора.



SETDOMAINNAME(3)


НАЗВАНИЕ

getdomainname, setdomainname - получить/установить имя текущего домена

СИНТАКСИС

getdomainname(name,namelen) char *name; int namelen;

setdomainname(name,namelen) char *name; int namelen;

ОПИСАНИЕ

Функция getdomainname возвращает имя домена для текущего процессора, ранее установленное функцией setdomainname. Параметр namelen описывает размер массива name. Возвращаемое имя дополняется пустыми символами.

Функция setdomainname присваивает домену главной машины имя name, имеющее длину namelen. Вызов этой функции доступен только суперпользователю и обычно используется только при начальной загрузке системы. Назначение доменов состоит в создании видимости двух работающих сетей, объединяемых общим host-именем. Различие между сетями проводится по имени домена.

Возвращаемое значение:

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

ОШИБКИ

[EFAULT] Параметр name связан с неверным адресом. [EPERM] Пользователь, вызвавший функцию, не является суперпользователем. Эта ошибка имеет отношение только к функции setdomainname.

ЗАМЕЧАНИЯ

Длина имени домена ограничена 64 символами.



SETHOSTENT(3)


НАЗВАНИЕ

gethostent, gethostbyaddr, gethostbyname, sethostent, endhostent - получить сведения о главной сетевой машине

СИНТАКСИС

#include <netdb.h>

struct hostent *gethostent()

struct hostent *gethostbyname(name) char *name;

struct hostent *gethostbyaddr(addr,len,type) char *addr; int len,type;

sethostent(stayopen) int stayopen

endhostent()

ОПИСАНИЕ

Функции gethostent, gethostbyname и gethostbyaddr возвращают указатель на объект, имеющий следующую структуру и описывающий строку в главной сетевой БД /etc/hosts:

struct hostent { char *h_name; /* официальное host-имя */ char **h_aliases; /* список псевдонимов */ int h_addrtype; /* тип адреса */ int h_length; /* длина адреса */ char *h_addr; /* адрес */ };

ЭЛЕМЕНТЫ СТРУКТУРЫ

h_name Официальное имя главной машины. h_aliases Массив альтернативных имен главной машины, оканчивающийся нулем. h_addrtype Тип возвращаемого адреса; в настоящее время всегда AF_INET. h_length Длина адреса в байтах. h_addr Указатель на сетевой адрес для главной машины.

Функция gethostent считывает следующую строку файла, в случае необходимости открывая этот файл.

Функция sethostent открывает и переходит к началу файла. Если флаг stayopen имеет ненулевое значение, главная БД не будет закрываться после каждого вызова функции gethostent.

Функция endhostent закрывает файл.

Функции gethostbyname и gethostbyaddr последовательно просматривают файл с самого начала в поисках имени или адреса главной машины.

ФАЙЛЫ

/etc/hosts

ДИАГНОСТИКА

По достижении конца файла или в случае появления ошибки возвращается нулевой указатель.

ЗАМЕЧАНИЯ

Вся информация сохраняется в статической области, поэтому в целях сохранения ее необходимо скопировать. Адрес может иметь только формат Internet.



SETJMP(3C)


НАЗВАНИЕ

setjmp, longjmp - нелокальная передача управления

СИНТАКСИС

#include <setjmp.h>

int setjmp (env) jmp_buf env;

void longjmp (env, val) jmp_buf env; int val;

ОПИСАНИЕ

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

Функция setjmp сохраняет текущее стековое окружение в массиве env (тип jmp_buf определен во включаемом файле <setjmp.h>) для последующего использования функцией longjmp. Результат функции setjmp равен 0.

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

С помощью функции longjmp невозможно вернуть нулевое значение. Если при вызове longjmp аргумент val равен 0, setjmp все равно вернет 1. Тем самым всегда есть возможность отличить естественный возврат из функции setjmp от искусственного, ставшего результатом выполнения longjmp. Значения всех глобальных объектов в момент искусственного возврата из setjmp, естественно, те же, что и в момент вызова longjmp. Значения локальных объектов соответствуют экземпляру функции, вызвавшей setjmp.

ПРИМЕР

#include <setjmp.h>

jmp_buf env; int i=0; main () { void exit (); if (setjmp (env) != 0) { (void) printf ( "Значение i при 2-ом возврате из setjmp: %d\n",i); exit (0); } (void) printf ( "Значение i при 1-ом возврате из setjmp: %d\n",i); i = 1; g(); /* Недостижимый фрагмент */ } g() { longjmp (env, 1); /* Недостижимый фрагмент */ }

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

Значение i при 1-ом возврате из setjmp: 0 Значение i при 2-ом возврате из setjmp: 1

СМ. ТАКЖЕ

.

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

Если при обращении к функции longjmp передается аргумент env, не заполненный setjmp, или последний вызов setjmp был в функции, из которой уже произошел возврат, то Вам гарантируется абсолютный хаос.



SETKEY(1)


ИМЯ

setkey - Назначение функциональных клавиш

СИНТАКСИС

setkey keynum string

ОПИСАНИЕ

Команда setkey назначает данную строку (string) ANSI выводом функциональной клавиши компьютера, задаваемой параметром keynum. Например, команда:

setkey 1 date

Назначает строку "date" как вывод функциональной клавиши 1. Параметр string может содержать управляющие символы, такие как символ новой строки и его следует взять в кавычки, чтобы защитить от обработки интерпретатором shell. Например, команда:

setkey 2 "pwd;lc\n"

ставит в соответствии функциональной клавише 2 командную последовательность "pwd;lc". Обратите внимание как символ новой строки вставляется в строку с кавычками. Это вызовет выполнение команд в том случае, если нажата функциональная клавиша 2. Иначе, клавишу Enter следует нажать после нажатия функциональной клавиши, как в предыдущем примере.

ФАЙЛЫ

/bin/setkey

ЗАМЕЧАНИЯ

Команда setkey работает только на клавиатуре консоли.

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

Хотя размер строковой таблицы соответствия команды setkey занимает 512 байт существует ограничение в 30 символов, которые могут быть назначены любой отдельной функциональной клавише.

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

В таблице приведенной ниже представлены значения keynum (номер комбинации) для функциональных клавиш:

Функциональная клавиша
Function key Номер комбинации
keynum Функциональная клавиша
Function key Номер комбинации
keynum F1 1 Ctrl-F10 34 F2 2 Ctrl-F11 35 F3 3 Ctrl-F12 36 F4 4 Ctrl-Shift-F1 37 F5 5 Ctrl-Shift-F2 38 F6 6 Ctrl-Shift-F3 39 F7 7 Ctrl-Shift-F4 40 F8 8 Ctrl-Shift-F5 41 F9 9 Ctrl-Shift-F6 42 F10 10 Ctrl-Shift-F7 43 F11 11 Ctrl-Shift-F8 44 F12 12 Ctrl-Shift-F9 45 Shift-F1 13 Ctrl-Shift-F10 46 Shift-F2 14 Ctrl-Shift-F11 47 Shift-F3 15 Ctrl-Shift-F12 48 Shift-F4 16   Shift-F5 17   Shift-F6 18 Цифровая клавиша клавиатуры
Numeric Key-Pad Номер комбинации keynum Shift-F7 19 Shift-F8 20 Shift-F9 21 7 49 Shift-F10 22 8 50 Shift-F11 23 9 51 Shift-F12 24 - 52 Ctrl-F125 4 53 Ctrl-F226 5 54 Ctrl-F327 6 55 Ctrl-F428 + 56 Ctrl-F529 1 57 Ctrl-F630 2 58 Ctrl-F731 3 59 Ctrl-F832 0 60 Ctrl-F933  



SETMNT(1M)


НАЗВАНИЕ

setmnt - обновление таблицы смонтированных файловых систем

СИНТАКСИС

/etc/setmnt

ОПИСАНИЕ

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

файловая_система каталог

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

ФАЙЛЫ

/etc/mnttab

СМ. ТАКЖЕ

.

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

СЮРПРИЗЫ

Если имя файловой_системы или каталога длиннее 32 символов, могут возникнуть сложности.

Команда setmnt содержит внутри себя ограничение на максимальное число записей в таблице.



SETMNT(8)


НАЗВАНИЕ

setmnt - формирует таблицу /etc/mnttab.

СИНТАКСИС

/etc/setmnt

ОПИСАНИЕ

setmnt создает таблицу /etc/mnttab (см. mnttab(3)), которая требуется для команд и unmount(8). setmnt читает стандартный ввод и для каждой строки создает запись в таблице mnttab. Строки ввода имеют формат:

filesys node

где filesys - имя специального файла файловой системы (например, "hd0"), а node - корневое имя этой файловой системы. Таким образом filesys и node становятся первыми двумя символьными строками в записи mnttab(3).

ФАЙЛЫ

/etc/mnttab

СМ. ТАКЖЕ

mnttab(3)

ПРИМЕЧАНИЯ

Если filesys или node - длинне 128 символов, возникает ошибка.

setmnt устанавливает без уведомления верхнюю границу максимального количества записей mnttab.

setmnt обычно вызывается файлом /etc/rc при загрузке системы.



SETPGRP(1)


НАЗВАНИЕ

setpgrp - выполнение команды в рамках отдельной группы процессов

СИНТАКСИС

setpgrp команда [аргумент ...]

ОПИСАНИЕ

Setpgrp выполняет команду в рамках отдельной группы процессов. Идентификатор этой группы равен идентификатору процесса, запущенного для выполнения команды.

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

cd /net setpgrp /net/x25 &

СМ. ТАКЖЕ

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

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

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

setpgrp команда1; команда2

setpgrp применяется только к команде1. Строка

setpgrp (команда1; команда2)

синтаксически некорректна.


НАЗВАНИЕ

setpgrp - установка идентификатора группы процесса

СИНТАКСИС

int setpgrp ( )

ОПИСАНИЕ

Системный вызов setpgrp устанавливает идентификатор группы вызывающего процесса равным идентификатору этого процесса и возвращает tpgrp



SETTIME(8)


НАЗВАНИЕ

settime - изменяет даты обращения к файлам и их корректировки.

СИНТАКСИС

settime mmddhhmm [yy] [-f fname] name

ОПИСАНИЕ

Устанавливает даты обращения к файлам и их модификации. Эти даты устанавливаются в соответствии с заданными в командной строке датами или с датами, заданными посредством опции -f и находящимися в файле fname. Для установки новой даты можно использовать только один из этих способов. Здесь mm - номер месяца, dd - номер дня месяца, hh - номер часа (по 24-часовой системе), вторые mm минуты, yy - последние две цифры года, задавать которые не обязательно. Например:

settime 1008004583 ralph pete

устанавливает даты обращения и модификации файлов ralph и pete на 8 октября, 12:45, 1983. В другом примере:

settime -f ralph john

дата в файле john устанавливается равной дате в файле ralph.

ПРИМЕЧАНИЯ

Рекомендуется использовать вместо settime команду touch.



SH(1)


ИМЯ

sh - Вызывает командный интерпретатор shell.

СИНТАКСИС

sh [-ceiknrstuvx] [args]

ОПИСАНИЕ

Shell - это cтандартный командный язык программирования, который выполняет чтение команд с терминала или из файла. Ниже смотрите описание раздела ВЫЗОВ (INVOCATION), в котором описаны значения аргументов интерпретатора shell.

КОМАНДЫ

Простая команда(simple-command) - это последовательность слов(words), не содержащих пустых символов и разделенных пробелами (пустой символ(blank) - это знак табуляции или пробел). Первое слово определяет имя выполняемой команды. За исключением того что определено ниже, оставшиеся слова передаются как аргументы в вызванную команду. Имя команды передается как аргумент 0 (смотрите команду ). В случае нормального завершения работы простой команды значение (value) - это состояние ее выхода, а в случае аварийного завершения (восьмеричное значение)1000+ значение состояния (status) (т.е. если аварийно завершилась основная процедура файла). Смотрите команду signal(S), где приведен список оценок состояний.

Конвейер(pipeline) - это последовательность одной или более команд, разделенных символом вертикальная черта (|). (Символ ^ устаревший синоним для символа вертикальная черта и его не следует использовать в конвейере).Стандартный вывод каждой команды, кроме последней, связан каналом pipe(S) cо стандартным вводом следующей команды. Каждая команда выполняется как отдельный процесс; интерпретатор shell ждет завершения последней команды.

Список(list) - это последовательность одного или более конвейеров, разделенных символами ;,&,&& или (две вертикальные черты) и необязательно завершающихся символами ; или &. Из этих четырех символов, символы ; и & имеют одинаковый приоритет, который ниже чем у символов && и . Символы && и также имеют равный приоритет. Точка с запятой (;) вызывает последовательное выполнение предыдущего конвейера; амперсанд (&) вызывает асинхронное выполнение предыдущего конвейера (т.е. интерпретатор shell не ждет завершения этого конвейера). Символ &&() вызывает список(list) следующий за ним для выполнения, только если состояние выхода предыдущего конвейера равно нулю (не ноль). Произвольное количество символов новых строк может появиться в списке (list) вместо точки с запятой (;) для разделения команд.

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


for name [in word...] do list done

Каждый раз при выполнении команды for аргумент name устанавливается для следующего слова(word), взятого из списка in word. Если аргумент in word... отсутствует, то команда for выполнит аргумент do list один раз для каждого установленного позиционного параметра (смотрите ниже описание раздела ПОДСТАНОВКА ПАРАМЕТРА (Parameter Substitution)). Выполнение завершается, когда в списке больше нет слов(words).

case word in [ pattern [|pattern ]...)list ;;] case

Команда case выполняет список list, связанный с первым шаблоном(pattern), который соответствует аргументу word. Форма шаблонов совпадает с формой, используемой при генерации имени файла (смотрите описание раздела ГЕНЕРАЦИЯ ИМЕНИ ФАЙЛА (Filename Generation)).

if list then list [ elif list then list ] [ else list ] fi

Аргумент list,следующий за командой if выполняется и, если возвращаемое состояние выхода равно 0, то выполняется список list следующий за первым параметром then. Иначе, выполнится список list, следующий за elif и, если его значение равно 0, то выполнится список list, относящийся к следующему then. В противном случае, выполнится else list. Если не выполняются аргументы else list или then list, то команда if возвращает нулевое состояние выхода.

while list do list done

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

(list)

Выполнять аргумент list в субинтерпретаторе sub-shell

{ list;}

Аргумент list просто выполняется

name () { list;}

Определить функцию, на которую ссылаются с помощью аргумента name. Тело функций это список (list) команд между фигурными скобками {}. Ниже описано выполнение функций (смотрите описание раздела ВЫПОЛНЕНИЕ (Execution)).



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

if then else elif fi case esac for while until do done { }

КОММЕНТАРИИ

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

ПОДСТАНОВКА КОМАНДЫ

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

ПОДСТАНОВКА ПАРАМЕТРА

Символ $ используется для ввода подставляемых параметров(parameters). Позиционные параметры могут быть установлены значениями команды set. Значения переменным могут быть назначены следующей записью:

name=value[ name=value]... (имя-значение)

Сравнение шаблона с численным значением value не производится.

${parameter}

Параметр(parameter) - это последовательность букв,цифр или символов подчеркивания, имя (name) это цифра или любой из символов *,@,#,?,-,$ и !. Значение параметра,если такое существует, замещается. Фигурные скобки требуются только когда за параметром (parameter) следует буква, цифра или знак подчеркивания, которые не будут интерпретированы как часть его имени. Имя (name) должно начинаться с буквы или символа подчеркивания.Если параметр (parameter) это цифра, то это позиционный параметр. Если параметр (parameter) это символ * или @, то все позиционные параметры, начинающиеся с $1, замещаются (разделенные пробелами). Параметр $0 устанавливается с аргумента ноль,когда происходит вызов shell.

${parameter:-word}

Ecли параметр (parameter) установлен и не равен нулю, то происходит подстановка его значения, иначе подставляется word.

${pаrameter:=word}

Еcли параметр (parameter) не назначен или равен нулю, то установить его в word; значение параметра затем подставляется. Позиционные параметры не могут быть назначены этим способом.

${parameter:?word}

Если параметр (parameter) установлен и не ноль, то происходит подстановка его значения, иначе печатается аргумент word и осуществляется выход из shell. Если аргумент word отсутствует, то печатается сообщение "Параметр равен нулю или не установлен".

${parameter:+word}



Если параметр (parameter) установлен и не равен нулю, то подставить аргумент word; иначе ничего не подставляется. В выше приведенном описании, аргумент word не рассматривается кроме тех случаев, когда он должен быть использован как подставляемая строка, так что в следующем примере команда pwd выполнится если только аргумент d не установлен или равен нулю:

echo ${d:-`pwd`}

Если двоеточие (:) опушено в вышеприведенном примере, то shell только проверит установлен параметр (parameter) или нет.

Следующие параметры автоматически устанавливаются интерпретатором shell:
# количество позиционных параметров в десятичном виде; - состояние флагов,установленных при вызове shell или командой set; ? десятичное значение кода возврата последней синхронно выполненной команды; $ номер процесса текущего shell; ! номер процесса вызвавшего последнюю фоновую команду.

Следующие параметры используются интерпретатором shell:

CDPATH Путь поиска для команды cd. Смотрите раздел ВСТРОЕННЫЕ КОМАНДЫ (Special Commands) команда "cd".

HOME Аргумент по умолчанию (входной каталог) для команды cd.

РATH Путь поиска команд ( смотрите ниже описание раздела ВЫПОЛНЕНИЕ (Execution)).

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

MAILCHECK

Этот параметр определяет как часто (в секундах) интерпретатор shell будет контролировать прибытие почты в файлах, определенных параметрами MAIL и MAILPATH. Значение по умолчанию 600 секунд(10 минут). Если установлен ноль, то shell будет проверять прибытие почты перед каждым приглашением.

MAILPATH

Двоеточие разделяет список имен файлов. Если этот параметр установлен, интерпретатор shell информирует пользователя о прибытии почты в любом из указанных файлов. За каждым именем файла может следовать символ % и сообщение, которое будет напечатано когда измениться время модификации. Сообщение по умолчанию "you have mail - для вас есть почта".

PS1 Первичная строка подсказка по умолчанию "$".

PS2 Вторичная строка подсказка по умолчанию ">".

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

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

SHELL При своей активизации,shell просматривает среду в поисках этого имени (смотрите ниже описание раздела СРЕДА (Environment)). Если оно найдено и содержит 'r', как часть его значения, то shell cтановится ограниченным.



Интерпретатор shell получает по умолчанию следующие значения PATH, PS1, PS2 и IFS, в то время как совсем не устанавливаются интерпретатор shell параметры HOME и MAIL (хотя HOME устанавливается командой login(5)).

ИНТЕРПРЕТАЦИЯ ПУСТОГО СИМВОЛА

После подстановки параметра и команды, результаты подстановки просматриваются для определения символов внутренних разделителей полей (символы определены в параметре IFS) и разделяются на отдельные аргументы, если таковые символы найдены. Явные нулевые аргументы (" " или ' ') сохраняются. Неявные нулевые аргументы ( возникающие из параметров, которые не имеют значений) удаляются.

ГЕНЕРАЦИЯ ИМЕНИ ФАЙЛА

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

ЗАКЛЮЧЕНИЕ В КАВЫЧКИ (Quoting)

Cледующие символы имеют специальное назначение в интерпретаторе shell и вызывают завершение команды word (кроме случаев, когда эти символы заключены в кавычки):

; & ( ) | ^ < > символ новой строки, пробел, символ табуляции

Символ может быть заключен в кавычки (т.е.подготовлен для установки самого себя) предшествующим ему символом \. Комбинация пары символов \ и знак новой строки игнорируются. Все символы, заключенные между парой одинарных кавычек (' '), за исключением одинарной кавычки(апостроф), берутся в кавычки. Внутри двойных кавычек (" ") осуществляется подстановка параметра и команды и символ \ заключает в кавычки символы \,`," и $. Символ "$ *" эквивалентен "$1 $2...", тогда как символ "$@" эквивалентен "$1" "$2"....

ПОДСКАЗКА



Когда вы работаете в интерактивном режиме, то перед чтением команды интерпретатор shell выводит подсказку, значение параметра PS1. Если в любой момент времени набрана новая строка и требуется продолжение ввода текста для завершения набора команды, то появляется вторичная подсказка(т.е.значение параметра PS2).

ПРОГРАММА ПРОВЕРКИ ОРФОГРАФИИ

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

$cd/usr/spol/uucp cd/usr/spool/uucp?y ok

ВВОД/ВЫВОД

Перед выполнением команды, ее ввод и вывод может быть переадресован с помощью специальной системы обозначений интерпретируемой shell. Обозначения могут появится где-либо в простой команде, а также могут предшествовать или следовать за командой (сommand). Они не переходят в вызванную команду; подстановка располагается перед словом word или цифрой digit:

<word Cтандартный ввод берется из файла word( дескриптор файла 0).

>word Cтандартный вывод направляется в файл word( дескриптор файла 1). Если файл не существует, то он создается; иначе, он урезается до нулевой длины.

>>word Стандартный вывод направляется в файл word. Если файл существует, то вывод добавляется к нему (путем установки указателя на конец файла); в противном случае, файл создается.

<<[-]word Интерпретатор shell считывает ввод до строки, имеющей то же самое значение, что и word, или до конца файла. Результирующий документ становится стандартным вводом. Если любой символ аргумента word заключен в кавычки, то символы документа не интерпретируются, иначе, осуществляется подстановка параметра и команды, (неустраненные) символы \ и знак новой строки игнорируются, а также символ \ должен быть использован для заключения в кавычки символов \,$,' и первого символа аргумента word. Если символ -(черта) добавлен к символам <<, то все впереди стоящие символы табуляции отсекаются из аргумента word и из документа.

<&digit Дескриптор файла стандартного ввода получается в результате дублирования дескриптора файла digit. (Смотрите описание команды dup(S)). Подобно этому для стандартного вывода используется конструкция >&digit.

<&- Стандартный ввод закрыть. Подобно этому, для стандартного вывода используется комбинация >&-.



Если любой, из выше перечисленных, конструкций предшествует цифра, то файл будет иметь дескриптор, задаваемый этой цифрой (вместо используемых по умолчанию дескрипторов 0 и 1). Например,

...2>&1

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

Если за командой следует символ &, то стандартный ввод по умолчанию для команды это пустой файл /dev/null. Иначе,среда для выполнения команды содержит дескрипторы файлов вызываемого shell, измененные спецификациями ввода/вывода.

СРЕДА

Среда (environment)(смотрите описание команды ) это список пар "имя-значение", который передается в выполняемую программу точно также как и обычный список аргументов. Интерпретатор shell взаимодействует со средой несколькими способами. При вызове, shell просматривает среду и создает параметр для каждого найденного имени, назначая ему соответствующее значение. Выполненные команды наследуют ту же самую среду. Если пользователь изменяет значения этих параметров или создает новые, то никакие из этих параметров не влияют на среду, кроме команды export, которая используется для связи параметров shell со средой. Среда просмотренная любой выполненной командой состоит из любых неизмененных пар "имя-значение" первоначально унаследованных интерпретатором shell, минус любые пары удаленные с помощью команды unset, плюс любые изменения или дополнения, каждые из которых должны быть записаны в командах export.

Среда для любой простой команды (simple-command) может быть увеличена c помощью использования перед ней одного или более назначений параметров. Таким образом:

TERM=450cmd args и (export TERM; TERM=450; cmd args)

эквивалентны (что касается выполнения выше приведенной команды сmd).

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

CИГНАЛЫ

Сигналы INTERRUPT(прерывание) и QUIT(выход) для вызванной команды игнорируются, если за командой следует символ &; иначе, сигналы имеют значения унаследованные интерпретатором shell от его родительского процесса, с ожиданием сигнала 11. Ниже смотрите описание команды trap).

ВЫПОЛНЕНИЕ



Каждый раз когда выполняется команда осуществляются вышеприведенные подстановки. Если имя команды не соответствует одной из ВСТРОЕННЫХ КОМАНД, но соответствует имени определенной функции, то функция выполняется в процессе shell (заметим как это отличается от выполнения процедур shell). Позиционные параметры $1,$2... устанавливаются для аргументов функции. Если имя команды не соответствует ни встроенной команде, ни имени определенной функции, то создается новый процесс и осуществляется попытка выполнить команду с помощью команды .

Параметр shell PATH определяет путь поиска каталога, содержащего команду. Имена альтернативных каталогов разделяются двоеточием(:). Путь по умолчанию это :/bin:/usr/bin (определяя текущий каталог в таком порядке /bin и /usr/bin). Заметим, что текущий каталог определяется именем нулевого пути, которое может появиться сразу после знака равенства или между символами двоеточие(:) в любом месте в списке пути. Если имя команды содержит символ /, то путь поиска не используется. Иначе, каждый каталог указанный в пути поиска просматривается для поиска выполняемого файла. Если файл выполняемый, но не является файлом a.out, то он будет представлять собой файл, содержащий команды shell. Субинтерпретатор sub-shell (т.е.отдельный процесс) создается для его чтения. Заключенная в скобки команда также выполняется в субинтерпретаторе sub-shell.

Местоположение в пути поиска, где была найдена команда, запоминается shell (чтобы избежать лишних действий позднее). Если команда была найдена в связном каталоге, ее местоположение должно быть переопределено всякий раз, когда изменяется текущий каталог. Интерпретатор shell забывает все сохраненные местоположения, всякий раз, когда переменная PATH изменяется или выполняется команда hash-r (описание ее смотрите ниже).

ВСТРОЕННЫЕ КОМАНДЫ

Для этих команд разрешена переадресация ввода/вывода.

: Пустая команда. Это команда ничего не делает.Возвращает нулевое состояние выхода.

.file

Cчитать и выполнить команду из указанного файла(file), после чего вернуться назад. Для поиска каталога, содержащего файл(file), используется путь поиска определенный параметром PATH.

break[ n ]



Выход из объемлющего цикла for или while, если таковой существует. Если задано n, то выполняется выход из уровня n.

continue[ n ]

Начать следующую итерацию объемлющего цикла for или while. Если задано n, то возобновляется выполнение с n-го объемлющего цикла.

cd[ arg ]

Команда изменяет текущий каталог на указанную в аргументе arg. Параметр shell HOME это аргумент arg по умолчанию. Параметр shell CDPATH определяет путь поиска каталога, содержащего arg. Альтернативные имена каталогов разделяются двоеточием. Путь по умолчанию это нулевой (определяющий текущий каталог). Заметим, что текущий каталог определяется именем нулевого пути, которое может появиться сразу после знака равенства или между символами двоеточие(:), в любом месте в списке пути. Если аргумент arg начинается с символа /, то путь поиска не используется. Иначе, каждый каталог из пути просматривается для поиска arg.

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

echo[arg...]

Записывает аргументы, разделенные пробелами и заканчивающиеся символом новой строки, в стандартный вывод. Аргументы могут быть заключены в кавычки. Кавычки требуются для того чтобы интерпретатор shell корректно интерпретировал эти специальные escape последовательности:
\b возврат на одну позицию \c печатает строку без символа новой строки \f прогон страницы \n символ новой строки \r возврат каретки \t табуляция \v вертикальная табуляция \\ символ backslash \n 8-битовый символ, чей код ASCII представляет собой 1,2,3-х разрядное число в восьмеричной форме, число n должно начинаться с нуля

eval[ arg...]

Аргументы arg читаются интерпретатором shell в качестве ввода, и полученная в результате команда (команды) выполняется.

exec[ arg...]



Вместо интерпретатора shell выполняется команда, задаваемая аргументами, новый процесс не создается. В команде могут присутствовать аргументы ввода/вывода, если кроме них в команде exec нет других аргументы, происходит переназначение ввода/вывода shell.

exit[ n ]

Вызывает завершение работы shell с состоянием выхода n. Если параметр n опущен, состояние выхода будет состояние выхода последней выполненной команды. Признак конца файла также приведет к выходу из интерпретатора shell.

export[ name...]

Указанные переменные names помечаются для автоматического экспорта в среду (environment) выполняемых далее команд. Если аргументы не заданы, печатается список всех имен экспортируемых в этот shell.

hash[ -r ][ name...]

Для каждого имени (name), местоположение в пути поиска команды указанной параметром name определяется и запоминается интерпретатором shell. Опция -r вызывает shell для устранения всех запомненных местоположений. Если параметры не заданы, то предоставляется информация о запомненных командах. Hits (справки) это количество вызовов команды процессом shell. Cost (затраты) это мера работы, требуемая чтобы разместить команду в пути поиска. Существуют определенные ситуации, в которых требуется, чтобы сохраненные размещения команды были пересчитаны. Команды, для которых это будет сделано помечаются звездочкой(*), стоящей рядом с информацией hits. Сost будет наращена, после того как сделают пересчет.

newgrp[ arg...]

Эквивалентна команде exec newgrp arg...

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

read[ name...]

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

readonly[ name...]

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

return[ n ]



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

set[ -eknuvx[ arg...]]

-е Если интерпретатор shell неинтерактивный,то осуществляется немедленный выход, в случае если команда завершилась с ненулевым кодом завершения работы. -f Запрет формирования имени файла. -h Разместить и запомнить функциональные команды как функции,которые определены (функциональные команды обычно размещаются, когда функция выполнена). -k Поместить в среду все ключевые параметры для команды, а не только те, которые предшествуют имени команды. -n Считать команды, но не выполнять их. -u Считать ошибкой подстановку неустановленных переменных. -v Печатать входные строки shell по мере их считывания. -x Печатать команды и их параметры по мере их выполнения. Хотя этот флаг передается в субинтепретатор (sub-shell), он не может быть отслежен в этих субинтерпретаторах. -- Не изменять любые флаги; полезен в установке $1 в -.

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

shift[n]

Позиционные параметры с $2... переименовываются в $1...

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

times

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

trap[ arg ][ n ]...

Параметр arg представляет собой команду, которую следует считать и выполнить при получении сигнала (сигналов) n.(Заметим,что параметр вычисляется дважды: сначала при установке прерывания на сигнал, а потом при его обработке). Команды прерывания trap выполняются в порядке номера сигнала. Максимальный номер сигнала - 16. Любые попытки к установке прерывания на сигнал, который был игнорирован на входе в текущий shell не эффективны. Попытка установить прерывание на сигнал 11(дефект памяти) приведет к ошибке. Если параметр arg отсутствует, то все прерывания n восстанавливаются в их исходные значения. Если параметр arg является пустой строкой, то указанный сигнал игнорируется интерпретатором shell и вызываемыми из него командами. Если n равно нулю, то параметр arg команды выполнится при выходе из shell. Команда trap без параметров печатает список команд связанных с каждым номером сигнала.

type[ name...]



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

ulimit[[ -f ]n ]

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

unset[ name...]

Для каждого имени (name), команда удаляет соответствующую переменную или функцию. Не могут быть использованы следующие переменные PATH,PS1,PS2,MAILCHECK и IFS, так как их нельзя сбрасывать.

umask[ ооо ]

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

wait[ n ]

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

ВЫЗОВ

Если shell вызван через команду и первый символ нулевого параметра это -, то команды первоначально читаются из входного файла /etc/profile, а затем из файла $HOME/.profile, если такие файлы существует. После этого, команды считываются как описано ниже, что происходит также в случае, когда shell вызван как /bin/sh. Приведенные ниже флаги интерпретируются shell только при вызове. Отметим, что кроме того что указывается флаг -с или -s, первому аргументу назначается имя файла содержащего команды, и оставшиеся аргументы передаются как позиционные параметры в этот командный файл:
-с string Если задан флаг -с, то команда считывается из строки string. -s Если задан флаг -s или если аргументы не сохраняются, то команды считываются из стандартного ввода. Любые оставшиеся аргументы определяют позиционные параметры. Вывод интерпретатора shell записывается в файл с дескриптором 2. -t Если задан флаг -t, то читается и выполняется одиночная команда и интерпретатор shell завершается. Этот флаг предназначается для использования только программами написанными на языке С и бесполезен в интерактивном режиме. -i если задан флаг -i или если ввод и вывод shell связаны с терминалом, то этот shell является интерактивным. В этом случае, сигнал завершения TERMINATE игнорируется ( так что команда kill 0 не вызовет прекращение работы интерактивного shell) и сигнал прерывания INTERRUPT перехватывается и игнорируется( так что команда wait прерываема). Во всех случаях, сигнал выхода QUIT игнорируется shell. -r если задан флаг -r, то работает ограниченный shell. (смотрите описание команды ).



Оставшиеся флаги и аргументы приведены в описании команды set приведенной выше.

СОСТОЯНИЕ ВЫХОДА

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

ФАЙЛЫ

/etc/profile системный файл по умолчанию profile,если ника- кие другие не присутствуют $HOME/.profile читается логическим интерпретатором shell при подключении /tmp/sh* временный файл для символов >>

/dev/null источник пустого файла

СМ. ТАКЖЕ

, , login(5), newgrp (1), , , , , , , , signal(S), , , a.out(3), profile(5), .

ЗАМЕЧАНИЯ

Команда readonly (без параметров) осуществляет такой же вывод как и команда export.

Если используются символы << для обеспечения стандартного ввода в асинхронном процессе, вызванном с помощью символа &, то shell имеет путаную информацию о имени вводного документа; создается файл содержащий "мусор" /tmp/sh* и shell сообщает о невозможности найти этот файл с помощью другого имени.

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

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

Когда пользователь команды входит в систему, то она читает и выполняет команды из файла /etc/profile до выполнения команд из файла пользователя $HOME/.profile. Поэтому, вы можете изменить среду для всех пользователей команды в системе, отредактировав файл /etc/profile.









SHL(1)


НАЗВАНИЕ

shl - менеджер семейства shell'ов

СИНТАКСИС

shl

ОПИСАНИЕ

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

Текущим называется экземпляр shell'а, который может производить ввод с клавиатуры. Другие экземпляры при попытке ввода с клавиатуры блокируются. Выводимая разными членами семейства информация может перемешиваться. Чтобы блокировать вывод экземпляра, который не является текущим, необходимо для этого члена семейства установить опцию loblk в stty.

Для передачи управления от члена семейства к менеджеру используется символ-переключатель swtch в stty (обычно CTRL+Z). Приглашением менеджера является >>>, что помогает отличить его от члена семейства.

Экземпляр shell'а связан с виртуальным терминалом (/dev/sxt/???). Виртуальным терминалом можно управлять так же, как и обычным, с помощью и . Каждый экземпляр имеет собственный идентификатор группы процессов.


Справка по синтаксису команд shl.

layers [-l] [имя ...]

Для каждого имени вывести имя экземпляра и идентификатор группы процессов. Опция -l добавляет к выводу информацию в стиле . Если аргументы не указаны, выдается информация обо всех существующих экземплярах.

resume [имя]

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

toggle

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

unblock имя [имя ...]

Не блокировать вывод соответствующих экземпляров, когда они не являются текущими. Это эквивалентно сбросу для экземпляра опции loblk в stty.

quit Закончить работу. Всем экземплярам посылается сигнал освобождения линии.

имя Сделать экземпляр с указанным именем текущим.

ФАЙЛЫ

/dev/sxt/??? Виртуальные терминалы. $SHELL Переменная, содержащая составное имя используемого shell'а (по умолчанию /bin/sh).

СМ. ТАКЖЕ

, .

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

СЮРПРИЗЫ

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

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

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

nohup who > /dev/sxt/010

Если сигнал освобождения линии игнорируется shell'ом (например, после команды trap '' 1).

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

Если менеджер терминируется сигналом SIGKILL (kill -9), пользователь может оказаться в ситуации, когда для нормального продолжения работы необходимо выйти из системы и снова войти в нее. Кроме того, экземпляры будут продолжать выполняться до тех пор, пока они не будут явно терминированы или не произойдет перезагрузка системы. Пользователи, которые хотят завершить работу с менеджером, не должны использовать SIGKILL.









SHMCTL(2)


НАЗВАНИЕ

shmctl - операции управления разделяемыми сегментами памяти

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h>

int shmctl (shmid, cmd, buf) int shmid, cmd; struct shmid_ds *buf;

ОПИСАНИЕ

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

IPC_STAT Поместить текущие значения полей структуры данных, ассоциированной с идентификатором разделяемого сегмента shmid, в структуру, на которую указывает аргумент buf. Содержимое структуры описано в . {Требуется право на чтение.} IPC_SET Присвоить следующим полям структуры данных, ассоциированной с идентификатором shmid, соответствующие значения, находящиеся в структуре, на которую указывает аргумент buf:

shm_perm.uid shm_perm.gid shm_perm.mode /* Только младшие 9 бит */

Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля shm_perm.cuid или shm_perm.uid в структуре, ассоциированной с идентификатором shmid. IPC_RMID Удалить из системы идентификатор разделяемого сегмента, заданный аргументом shmid, ликвидировать сегмент и ассоциированную с ним структуру данных. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный либо идентификатору суперпользователя, либо значению поля shm_perm.cuid или shm_perm.uid в структуре данных, ассоциированной с идентификатором shmid. SHM_LOCK Удержать в памяти разделяемый сегмент, специфицированный идентификатором shmid. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный идентификатору суперпользователя. SHM_UNLOCK Освободить разделяемой сегмент памяти, специфицированный идентификатором shmid. Эта команда может выполняться только процессом, который имеет действующий идентификатор пользователя, равный идентификатору суперпользователя.


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

[EINVAL] Значение аргумента shmid не является корректным идентификатором разделяемого сегмента. [EINVAL] Некорректное значение аргумента cmd, определяющее команду. [EACCES] Значение аргумента cmd равно IPC_STAT, но у вызывающего процесса нет прав на выполнение операции чтения [см. ]. [EPERM] Значение аргумента cmd равно IPC_RMID или IPC_SET, а действующий идентификатор пользователя вызывающего процесса не равен ни идентификатору суперпользователя, ни значению поля shm_perm.cuid или shm_perm.uid в структуре данных, ассоциированной с идентификатором shmid. [EPERM] Значение аргумента cmd равно SHM_LOCK или SHM_UNLOCK, а действующий идентификатор пользователя вызывающего процесса не равен идентификатору суперпользователя. [EFAULT] Аргумент buf указывает за пределы отведенного процессу адресного пространства. [ENOMEM] Значение аргумента cmd равно SHM_LOCK и нет достаточного об ема памяти в системе.

СМ. ТАКЖЕ

, .

ДИАГНОСТИКА

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

ПРИМЕЧАНИЯ

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









SHMGET(2)


НАЗВАНИЕ

shmget - получение идентификатора разделяемого сегмента памяти

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h>

int shmget (key, size, shmflg) key_t key; int size, shmflg;

ОПИСАНИЕ

Системный вызов shmget возвращает идентификатор разделяемого сегмента памяти, ассоциированный с ключом key.

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

Значение аргумента key равно IPC_PRIVATE. Ключ key пока еще не имеет ассоциированного с ним идентификатора и выражение (shmflg & IPC_CREAT) истинно.

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

Значения полей shm_perm.cuid, shm_perm.uid, shm_perm.cgid и shm_perm.gid устанавливаются равными действующему идентификатору пользователя и, соответственно, действующему идентификатору группы вызывающего процесса. Младшие 9 бит поля shm_perm.mode устанавливаются равными 9 младшим битам аргумента shmflg; значение поля shm_segsz устанавливается равным аргументу size; Значения полей shm_lpid, shm_nattch, shm_atime и shm_dtime устанавливаются равными 0. Значение поля shm_ctime устанавливается равным текущему времени.

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

[EINVAL] Значение аргумента size меньше минимального или больше максимального значения, принятых в системе. [EACCES] Для ключа key уже существует идентификатор разделяемого сегмента, но не могут быть предоставлены права доступа [см. ], определенные в 9 младших битах аргумента shmflg. [EINVAL] Для ключа key уже существует идентификатор разделяемого сегмента, но размер сегмента меньше значения аргумента size и значение size не равно нулю. [ENOENT] Для ключа key не существует идентификатор разделяемого сегмента и выражение (shmflg & IPC_CREAT) ложно. [ENOSPC] Идентификатор не создается из-за превышения максимального разрешаемого системой количества идентификаторов разделяемых сегментов. [ENOMEM] Идентификатор и ассоциированный с ним разделяемый сегмент памяти не создаются из-за отсутствия достаточного количества памяти. [EEXIST] Для ключа key уже существует идентификатор разделяемого сегмента и выражение ((shmflg & IPC_CREAT) & (shmflg & IPC_EXCL)) истинно.

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

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

ПРИМЕЧАНИЯ

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



SHMOP(2)


НАЗВАНИЕ

shmop - операции над разделяемыми сегментами памяти

СИНТАКСИС

#include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h>

char *shmat (shmid, shmaddr, shmflg) int shmid; char *shmaddr; int shmflg;

int shmdt (shmaddr) char *shmaddr;

ОПИСАНИЕ

Присоединение сегмента

Системный вызов shmat (см. СЮРПРИЗЫ) присоединяет разделяемый сегмент памяти, ассоциированный с идентификатором shmid, к сегменту данных вызывающего процесса. Сегмент присоединяется по адресу, заданному одним из следующих способов:

Если значение аргумента shmaddr равно нулю, то сегмент присоединяется по адресу, выбранному системой. Если значение аргумента shmaddr не равно нулю и выражение (shmflg & SHM_RND) истинно, то сегмент просоединяется по адресу, вычисляемому по формуле (shmaddr - (shmaddr mod SHMLBA)) [см. ]. Если значение аргумента shmaddr не равно нулю и выражение (shmflg & SHM_RND) ложно, то сегмент присоединяется по адресу, задаваемому аргументом shmaddr.

Отсоединение сегмента

Системный вызов shmdt отсоединяет разделяемый сегмент памяти, расположенный по адресу shmaddr, от сегмента данных вызывающего процесса.

Если выражение (shmflg & SHM_RDONLY) истинно, то сегмент присоединяется для чтения {требуется право на чтение}, в противном случае сегмент присоединяется для чтения и записи {требуется право на чтение и запись}.

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

[EINVAL] Значение аргумента shmid не является корректным идентификатором разделяемого сегмента. [EACCES] У вызывающего процесса нет прав на выполнение операции [см. ]. [ENOMEM] В сегменте данных нет места для присоединения разделяемого сегмента. [EINVAL] Значение аргумента shmaddr не равно нулю и значение выражения (shmaddr-(shmaddr mod SHMLBA)) не является корректным адресом. [EINVAL] Значение аргумента shmaddr не равно нулю, выражение (shmflg & SHM_RND) ложно и значение аргумента shmaddr не является корректным адресом. [EMFILE] Количество разделяемых сегментов, присоединенных к вызывающему процессу, превышает максимально допустимую величину.


Системный вызов shmdt завершается неудачей и разделяемый сегмент не отсоединяется, если:

[EINVAL] Значение аргумента shmaddr не является начальным адресом разделяемого сегмента.

СМ. ТАКЖЕ

, , , , , .

ДИАГНОСТИКА

При успешном завершении системного вызова shmat возвращается начальный адрес присоединенного сегмента.

При успешном завершении системного вызова shmdt результат равен 0.

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

ПРИМЕЧАНИЯ

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

СЮРПРИЗЫ

В данной реализации результат системного вызова shmat имеет тип int, а не char *.









Showmount


НАЗВАНИЕ

showmount - показ всех удаленных монтирований

СИНТАКСИС

/etc/showmount [-a] [-d] [-e] [host]

ОПИСАНИЕ

Команда showmount выводит список всех клиентов, которые выполняли удаленное монтирование файловой системы на host-машине. Эта информация поставляется сервером и сохраняется в файле /etc/rmtab. Если аргумент host не указан, используется имя, возвращаемое .

Опции:

-dВывести список каталогов, смонтированных клиентами на удалении. -aВывести список всех удаленных монтирований в формате:

hostname:directory

где hostname - имя клиента, а directory - корень монтированной файловой системы.

-eВывести список экспортированных файловых систем.

СМ. ТАКЖЕ

, ,

ЗАМЕЧАНИЯ

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



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


ИМЯ

shutdn - дoвывoдит инфopмaцию из диcкoвoгo кэшa и ocтaнaвливaeт пpoцeccop

СИНТАКСИС

#include <sys/filsys.h>

#include <sys/param.h>

#include <sys/types.h>

void shutdn(sblk,nsblk,arg) struct filsys *sblk, *nsblk; int arg;

ОПИСАНИЕ

Shutdn дoвывoдит вcю инфopмaцию из пaмяти нa диcки. Cюдa вxoдят мoдифициpoвaнныe cyпepблoки, индeкcныe дecкpиптopы и блoки дaнныx из oтлoжeннoгo ввoдa/вывoдa. Cyпepблoки вcex фaйлoвыx cиcтeм, дocтyпныx для зaпиcи, пoмeчaютcя кaк "чиcтыe", чтoбы пpи пoвтopнoм мoнтиpoвaнии нe пpoизвoдилacь oпepaция oчиcтки пpи зaгpyзкe XENIX. Зaтeм shutdn вывoдит нa кoнcoль cooбщeниe "Normal System Shutdown" и ocтaнaвливaeт пpoцeccop.

Пocлe этoгo пpoиcxoдит или пoлнaя ocтaнoвкa cиcтeмы, или пepeзaгpyзкa в зaвиcимocти oт знaчeния arg (0 или 1).

Ecли sblk бoльшe 1, oн paccмaтpивaeтcя кaк aдpec cyпepблoкa, кoтopый дoлжeн быть зaпиcaн нa cиcтeмный диcк, ecли nsblk являeтcя пoбитoвoй eгo инвepcиeй. Этa вoзмoжнocть пoзвoляeт coздaвaть coбcтвeнныe кoпии cyпepблoкa cиcтeмнoгo диcкa.

Ecли sblk paвeн 1, втopым apгyмeнтoм являeтcя кoмaндa, a тpeтий apгyмeнт являeтcя apгyмeнтoм этoй кoмaнды. Koмaндa CONFPANIC пpи apгyмeнтe 0 пoлнocтью ocтaнaвливaeт cиcтeмy, a пpи apгyмeнтe 1 пepeзaгpyжaeт ee. Дaннaя кoмaндa являeтcя cиcтeмнo зaвиcимым cиcтeмным вызoвoм. Этoт вapиaнт shutdn иcпoльзyeтcя для тoгo, чтoбы yкaзaть cиcтeмe кaк peaгиpoвaть нa cлeдyющee иcключитeльнoe coбытиe.

Shutdn вo вpeмя paбoты блoкиpyeт вce ocтaльныe пpoцeccы. Peкoмeндyeтcя дo зaпycкa shutdn зaвepшить вce пpoцeccы (cм. kill(3)), тaк кaк пpи aктивнocти ввoдa/вывoдa cyпepблoки мoгyт нe пoмeчaтьcя кaк "чиcтыe".

Bызывaющий пpoцecc дoлжeн быть пpивилeгиpoвaнным.

СМ. ТАКЖЕ

,haltsys(8),shutdown(1),mount(3),kill(3).

ЗAМEЧAНИЯ

Heoбxoдимo иcпoльзoвaть флaг пocтpoeния -lx.



SHUTDOWN(1M)


НАЗВАНИЕ

shutdown - остановка системы, изменение уровня выполнения

СИНТАКСИС

/etc/shutdown [-y] [-gзадержка] [-iуровень_выполнения]

ОПИСАНИЕ

Утилита shutdown служит для изменения уровня выполнения системы. По умолчанию система переводится в однопользовательский режим, в котором ОС UNIX доступна только с консоли.

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

Допустимы следующие опции:

-y Отменить запрос подтверждения. Команда будет работать без вмешательства пользователя. По умолчанию, между предупреждающим и финальным сообщениями предусмотрена задержка в 60 секунд; такая же задержка выполняется между финальным сообщением и запросом подтверждения.

-gзадержка

Изменить стандартную величину задержки.

-iуровень_выполнения

Уровень_выполнения передается утилите . Система перейдет на этот уровень после всех сообщений, задержек и подтверждений. Подразумеваемый уровень есть S (то же, что s, и почти то же, что 1).

Рекомендуемые уровни_выполнения и действия при переходе на них:

0 Остановить систему, подготовив ее к безопасному выключению питания. Выключить питание, если позволяет аппаратура. Для выполнения этих действий вызывается процедура /etc/rc0.

1, s, S

Перевести систему в однопользовательский режим, используя процедуру /etc/rc0. Разница между уровнями S и 1 состоит в том, что на уровне S все процессы, порожденные init, завершены, но файловые системы не размонтированы. На уровне 1 размонтированы все файловые системы, кроме корневой, и завершены все пользовательские процессы, кроме консольных.

6 Остановить систему и выполнить перезагрузку.

Утилита shutdown написана на языке shell; ее может выполнять только суперпользователь.

СМ. ТАКЖЕ

, , .

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



SHUTDOWN(8)


НАЗВАНИЕ

shutdown - прекращает работу всех процессов.

СИНТАКСИС

/etc/shutdown [time] [su]

ОПИСАНИЕ

shutdown является частью операционных процедур системы UNIX. Ее основная цель - завершить работу всех процессов упорядоченным и осторожным образом. Аргумент time - это количество минут, ожидаемое до разгрузки системы. Необязательный аргумент su позволяет пользователю перейти в однопользовательский режим, не сворачивая систему полностью. Однако, при этом система выходит из многопользовательского режима. shutdown проходит следующие этапы. Вначале все пользователи, подключенные к системе, уведомляются о необходимости выйти из системы посредством всеобщего оповещения. Суперблоки всех файловых систем записываются перед остановкой системы (см. ). Это должно быть сделано перед перезагрузкой системы для обеспечения целостности файловых систем.

Для выполнения команды shutdown вы должны быть привилегированным пользователем.

СМ. ТАКЖЕ

, unmount(8), , boot(HW)

ДИАГНОСТИКА

Самым распространенным сообщением об ошибке является сообщение о том, что "устройство занято" (device busy). Это сообщение появляется, когда некоторая файловая система не может быть демонтирована. Смотрите unmount(8).

ПРИМЕЧАНИЯ

Запустив команду shutdown, нужно дать ей завершить свою работу. Нельзя прерывать ее нажатием клавиш BREAK или DEL.

shutdown не будет функционировать при ее запуске из оболочки.

shutdown паркует головки жестких дисков.



SIGNAL(2)


НАЗВАНИЕ

signal - спецификация действий по обработке сигнала

СИНТАКСИС

#include <signal.h>

void (*signal (sig, func)) ( ) int sig; void (*func) ( );

ОПИСАНИЕ

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

Аргумент sig может иметь одно из следующих значений, за исключением SIGKILL:

SIGHUP01Освобождение линии (hangup). SIGINT02Прерывание (interrupt). SIGQUIT03[1]Выход (quit). SIGILL04[1]Некорректная команда (illegal instruction). Не переустанавливается при перехвате. SIGTRAP05[1]Трассировочное прерывание (trace trap). Не переустанавливается при перехвате. SIGIOT06[1]Машинная команда IOT. SIGABRT06[1]Рекомендуемый синоним предыдущего. SIGEMT07[1]Машинная команда EMT. SIGFPE08[1]Исключительная ситуация при выполнении операции с вещественными числами (floating-point exception). SIGKILL09Уничтожение процесса (kill). Не перехватывается и не игнорируется. SIGBUS10[1]Ошибка шины (bus error). SIGSEGV11[1]Некорректное обращение к сегменту памяти (segmentation violation). SIGSYS12[1]Некорректный параметр системного вызова (bad argument to system call). SIGPIPE13Запись в канал, из которого некому читать (write on a pipe with no one to read it). SIGALRM14Будильник (alarm clock). SIGTERM15Программный сигнал завершения (software termination signal). SIGUSR116Определяемый пользователем сигнал 1 (user-defined signal 1). SIGUSR217Определяемый пользователем сигнал 2 (user-defined signal 2). SIGCLD18[2]Завершение порожденного процесса (death of a child). SIGPWR19[2]Ошибка питания (power fail). SIGPOLL22[3]Регистрация выборочного события (selectable event pending).

Аргумент func может иметь одно из трех значений: SIG_DFL, SIG_IGN или адрес_функции. Макросы SIG_DFL и SIG_IGN определены во включаемом файле <signal.h>. Каждый из макросов порождает уникальную константу типа "указатель на функцию типа void", заведомо не соответствующую определяемой функции.


Действия, предписываемые аргументом func, состоят в следующем:

SIG_DFL - стандартная реакция на сигнал При получении сигнала sig терминировать процесс со всеми завершающими действиями, описанными в ; см. замечание [1] ниже. SIG_IGN - игнорирование сигнала Игнорировать сигнал sig. Сигнал SIGKILL не может игнорироваться. адрес_функции - перехват сигнала При получении сигнала sig выполнить функцию обработки сигнала func; в качестве единственного аргумента функции func передается номер сигнала sig; дополнительные аргументы передаются для сигналов, вырабатываемых аппаратурой. Перед выполнением функции func устанавливается стандартная реакция на полученный сигнал, если только этот сигнал не есть SIGILL или SIGTRAP. Таким образом, чтобы перехватить следующий сигнал sig, нужно вновь обратиться к signal, задав в качестве аргумента func адрес_функции.

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

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

Системный вызов signal не проверяет корректность аргумента func. Последствия выполнения функции обработки сигнала, заданной некорректным адресом, непредсказуемы.

Сигнал SIGKILL перехватить нельзя.

Выполнение системного вызова signal отменяет полученный, но еще не обработанный сигнал sig, если только этот сигнал не есть SIGKILL.

Системный вызов signal завершается неудачей, если:

[EINVAL] Значение аргумента sig является недопустимым номером сигнала, включая SIGKILL.

ПРИМЕЧАНИЯ

[1]

Если для сигналов, помеченных[1], назначается стандартная реакция (SIG_DFL), то в дополнение к тому, что процесс терминируется, в текущем рабочем каталоге создается файл с образом памяти, если выполняются следующие условия:



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

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

[2]

Для сигналов SIGCLD и SIGPWR, как и для других, в качестве func может использоваться одно из трех значений: SIG_DFL, SIG_IGN или адрес функции обработки сигнала. Однако действия, предписываемые этими значениями, отличаются от описанных выше:

SIG_DFL - игнорирование сигнала

SIG_IGN - игнорирование сигнала

Если значение sig равно SIGCLD, то процессы, порожденные вызывающим процессом, не перейдут в состояние зомби при своем завершении [см. ].

адрес_функции - перехват сигнала

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

Сигнал SIGCLD взаимодействует с системными вызовами wait и exit следующим образом:

wait Если значение func для сигнала SIGCLD установлено равным SIG_IGN и выполняется системный вызов wait, то после получения сигнала SIGCLD wait блокируется до завершения всех процессов, порожденных вызывающим процессом; затем wait возвращает -1, а переменной errno присваивается значение ECHILD. exit Если процесс, родительский по отношению к процессу, выполняющему exit, установил для сигнала SIGCLD действие SIG_IGN, то завершающийся процесс не переходит в состояние зомби.

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

[3]

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

СМ. ТАКЖЕ

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

ДИАГНОСТИКА

При успешном завершении системного вызова signal возвращается предыдущее значение func для указанного сигнала sig. В противном случае возвращается значение SIG_ERR, а переменной errno присваивается код ошибки. Значение SIG_ERR определено во включаемом файле <sys/signal.h>.

СЮРПРИЗЫ

При попытке изменить стандартную реакцию на сигнал SIGKILL возвращается значение SIG_DFL (а не SIG_ERR, как должно быть), а переменная errno получает значение EINVAL.









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


ИМЯ

sigsem - пocылaeт cигнaл пpoцeccy, кoтopый нaxoдитcя в oчepeди к ceмaфopy

СИНТАКСИС

int sigsem(sem_num) int sem_num;

ОПИСАНИЕ

Sigsem пocылaeт cигнaл пpoцeccy, кoтopый нaxoдитcя в oчepeди к ceмaфopy sem_num, чтoбы пocлeдний мoг иcпoльзoвaть pecypc, зaкpытый этим ceмaфopoм. Sigsem иcпoльзyeтcя вмecтe c для cинxpoнизaции дocтyпa пpoцeccoв к oднoмy pecypcy. Hecкoлькo пpoцeccoв мoгyт издaть cиcтeмный вызoв waitsem нa oдин ceмaфop. Пpи этoм oни пepeйдyт в cocтoяниe oжидaния, пoкa пpoцecc, имeющий дocтyп к pecypcy, нe издacт cиcтeмный вызoв sigsem. Ecли oжидaющиx пpoцeccoв нecкoлькo, yпpaвлeниe бyдeт пepeдaнo пepвoмy из oчepeди к ceмaфopy. Oчepeдь к ceмaфopy opгaнизyeтcя пo пpинципy "Пepвым пpишeл - пepвым oбcлyжeн" (FIFO).

СМ. ТАКЖЕ

, , .

Cиcтeмнaя coвмecтимocть

Sigsem мoжeт быть иcпoльзoвaн тoлькo c ceмaфopaми, coздaнными в oпepaциoннoй cиcтeмe XENIX вepcии 3.0, нo нe в cиcтeмe XENIX System V.

ДИАГНОСТИКА

B cлyчae oшибки sigsem вoзвpaщaeт -1. Ecли sem_num нe yкaзывaeт нa фaйл типa "ceмaфop", пepeмeннoй errno пpиcвaивaeтcя знaчeниe ENOTNAM. Ecли sem_num нe oткpыт cиcтeмным вызoвoм opensem, пepeмeннoй errno пpиcвaивaeтcя знaчeниe EBADF. Ecли вызывaющий пpoцecc нe являeтcя влaдeльцeм ceмaфopa (тo ecть этoт пpoцecc пpeдвapитeльнo нe издaл cиcтeмный вызoв waitsem), пepeмeннoй errno пpиcвaивaeтcя знaчeниe ENAVAIL.

ЗAМEЧAНИЯ

Дaннaя вoзмoжнocть являeтcя cильнo cиcтeмнo зaвиcимoй. Пpи кoмпoнoвкe нeoбxoдимo иcпoльзoвaть флaг -lx.



SIGSET(2)


НАЗВАНИЕ

sigset, sighold, sigignore, sigpause - процедуры управления сигналами.

СИНТАКСИС

#include <signal.h> void (*sigset(sig,func))() int sig; void (*func)(); int sighold(sig) int sig; int sigrelse(sig) int sig; int sigignore(sig) int sig; int sigpause(sig) int sig;

ОПИСАНИЕ

Эти функции обеспечивают управлением сигналами для процессов прикладных программ. Системный вызов sigset задает реакцию системы на сигнал sig. Эта реакция заключается либо в вызове обработчика сигнала процесса func, либо в выполнении определенного системой действия.

Параметру sig может быть присвоено любое из приведенных значений, за исключением значения SIGKILL. Сигналы, зависящие от аппаратной или программной реализации, не приведены (см. "Примечания" ниже). Каждое значение sig является макросом, определенным в файле <signal.h> и который может быть представлен в виде выражения-константы.

SIGHUPпрекращение сетевой связи SIGINTпрерывание SIGQUIT*выход SIGILL*неверная инструкция (не удерживается при получении) SIGTRAP*прерывание трассировки (не удерживается при получении) SIGABRT*аварийный выход SIGFPE*ошибка операции с плавающей точкой SIGKILLуничтожение (не может быть получен или опущен) SIGSYS*неверный аргумкент в системном вызове SIGPIPEзапись в канал конвейера без последующего чтения SIGALRMсигнал тревоги SIGTERMсигнал программного завершения SIGUSR1определенный пользователем сигнал 1 SIGUSR2определенный пользователем сигнал 2 SIGCLDсмерть дочернего процесса SIGPWRсбой питания SIGPOLLожидание выбираемого события (см. "Примечания" ниже)

В отношении звездочек (*) в вышеприведенном списке смотрите текст под SIG_DFL.

Следующие значения для определенных системой действий func также определяются в файле <signal.h>. Каждое из них является макросом, который может быть представлен в виде выражения-константы типа указателя на функцию, возвращающую void, и имеет уникальное значение, которое не соответствует ни одной определенной функции.


SIG_DFL - реакция системы по умолчанию. По получении сигнала sig получающий процесс подлежит завершению со всеми последствиями, описанными в . Кроме того в текущем рабочем каталоге этого процесса будет оставлен "статический образ", если значение sig в вышеприведенном списке помечено звездочкой и удовлетворяются следующие условия:

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

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

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

SIG_IGN - игнорирование сигнала Ожидание сигнала sig отменяется, и реакция системы на сигнал этого типа устанавливается на его игнорирование. SIG_HOLD - удержание сигнала Сигнал sig подлежит удержанию по его получении. Удерживается всякий ожидаемый сигнал этого типа. По каждому типу удерживается только один сигнал.

В любом другом случае func должен быть указателем на функцию-обработчик, которая вызывается при возникновении сигнала sig. В этом случае sigset определяет, что процесс должен вызвать эту функцию по получении сигнала sig. Любой ожидаемый сигнал этого типа сбрасывается. Адрес данного обработчика поддерживается длявсех вызовов прочих функций управления сигналами, перечисленными здесь.

При возникновении сигнала его значение sig передается обработчику в качестве единственного аргумента. Перед вызовом обработчика реакция системы на сигнал устанавливается на SIG_HOLD. При нормальном возврате из обработчика реакция системы на сигнал восстанавливается на func, и любой ожидаемый сигнал этого типа сбрасывается.Если выполняется нелокальный переход goto(longjmp - дальний прыжок), тодля восстановления реакции системы на сигнал и сброса любого удерживаемого сигнала данного типа должен быть вызван sigrelse.



В принципе после возврата из обработчика сигнала процесс, получивший этот сигнал, должен возобновить свое выполнение в точке, где он был прерван. Однако, если сигнал ловится во время системных вызовов , , или , когда работает системный вызов sigpause или , которые задерживают возврат из-за наличия предварительно приостановленного процесса (или зомби-процесса), то будет выполняться обработчик сигнала, после чего прерванный системный вызов может возвратить вызывавшему процессу -1 со значением errno, установленным в EINTR.

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

sigignore устанавливает реакцию на сигнал sig в SIG_IGN (см. выше).

sigpause приостанавливает вызывающий процесс, пока он не получит сигнал; аналогично работает .Однако, при получениии удержании сигнала sig, он сбрасывается, и активизируется системная реакция на этот сигнал. Этот системный вызов полезен для проверки переменных, которые меняют свое значение при возникновении сигнала. При этом правильные действия таковы: вначале sighold используется для блокировки сигнала, затем проверяются переменные. Если онине изменились, то вызывается sigpause для ожидания сигнала. Вызов sigset потерпит крах, если выполнится одно из следующих условий:

[EINVAL] Сигнал sig имеет неверное значение (включая SIGKILL), или обработка sig по умолчанию не может быть изменена. [EINTR] Сигнал был получен во время системного вызова sigpause.

СМ. ТАКЖЕ

, , , , setjmp(2)

ДИАГНОСТИКА

При успешном завершении sigset возвращает предыдущее значение реакции системы на заданный сигнал sig. В противном случае возвращается значение SIG_ERR, а errno указывает на ошибку.SIG_ERR определяется в файле <signal.h>

Что касается других функций,то при их успешном выполнении возвращается значение 0. В противном случае возвращается значение -1, а errno указывает на ошибку.

Примечания



Сигнал SIGPOLL возникает, когда файловый дескриптор, соответствующий файлу STREAMS [см. ], задает ожидание "выбираемого" события. Для того, чтобы этот сигнал был послан, процесс должен сделать специальный запрос с помощью вызова I_SETSIG . В противном случае этот процесс никогда не получит сигнал SIGPOLL.

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

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

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

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









SINH(3M)


НАЗВАНИЕ

sinh, cosh, tanh - гиперболические функции

СИНТАКСИС

#include <math.h>

double sinh (x) double x;

double cosh (x) double x;

double tanh (x) double x;

ОПИСАНИЕ

Функции sinh, cosh и tanh возвращают, соответственно, значения гиперболического синуса, косинуса и тангенса своего аргумента.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

Функции sinh и cosh возвращают значение HUGE (sinh может выдать -HUGE при отрицательных x), если представление результирующего значения приводит к переполнению. Переменной errno присваивается значение ERANGE.

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



SIO(7)


НАЗВАНИЕ

sio - последовательный драйвер

ОПИСАНИЕ

Драйвер sio предназначен для мультипротокольного коммуникационного контроллера, используемого в платах процессора. Драйвером поддерживаются асинхронные терминалы со следующими характеристиками: скорость передачи от 50 до 9600 бод, размер символа: 5 - 8 бит, контроль на четность/нечетность или без контроля четности, один или два стоп-бита.

ФАЙЛЫ

/dev/console /dev/tty1 /dev/tty2 /dev/tty3

СМ. ТАКЖЕ

.

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



SIZE(1)


НАЗВАНИЕ

size - печать размеров секций объектных файлов обычного формата

СИНТАКСИС

size [-o] [-x] [-V] файл ...

ОПИСАНИЕ

Команда size выдает информацию о размерах секций для объектных файлов обычного формата. Выводятся три числа: размеры в байтах секции команд, секции данных и секции неинициализированных данных, а затем их сумма.

По умолчанию выдаются десятичные числа. Можно воспользоваться опциями -o и -x для вывода в восьмеричном и шестнадцатеричном формате соответственно.

При указании опции -V выдается также номер версии команды size.

СМ. ТАКЖЕ

, , .

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

ДИАГНОСТИКА

size: имя: cannot open Файл с данным именем не открывается.

size: имя: bad magic Файл с данным именем не является объектным файлом обычного формата.

ОГРАНИЧЕНИЯ

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



SLEEP(1)


НАЗВАНИЕ

sleep - приостановка выполнения на заданное время

СИНТАКСИС

sleep время

ОПИСАНИЕ

Команда sleep приостанавливает выполнение на заданное время (в секундах). Используется для того, чтобы выполнить какую-либо команду через определенное время, например

(sleep 105; команда)&

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

while true do команда sleep 37 done

СМ. ТАКЖЕ

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

ОГРАНИЧЕНИЯ

Время не должно превышать 65536 секунд.



SLEEP(3C)


НАЗВАНИЕ

sleep - приостановка выполнения программы на указанный промежуток времени

СИНТАКСИС

unsigned sleep (seconds) unsigned seconds;

ОПИСАНИЕ

Выполнение процесса приостанавливается на заданное аргументом seconds число секунд. Время фактической приостановки может оказаться меньше заданного по двум причинам:

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

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

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

СМ. ТАКЖЕ

, , .



SNO(1)


НАЗВАНИЕ

sno - интерпретатор СНОБОЛа

СИНТАКСИС

sno [ файлы ]

ОПИСАНИЕ

Команда sno - это компилятор и интерпретатор СНОБОЛа (с незначительными отличиями). На вход команде sno подается конкатенация названных файлов и стандартного ввода. Весь входной текст вплоть до оператора, содержащего метку end, считается программой и компилируется. Доступ к остальной части текста можно получить через псевдопеременную syspit.

Sno имеет следующие отличия от СНОБОЛа:

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

a ** b незакрепленный поиск b. a *x* b = x c незакрепленное присваивание

Отсутствуют обратные ссылки.

x = "abc" a *x* x незакрепленный поиск abc.

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

define f( ) define f(a, b, c)

Все метки за исключением define (даже end) должны помечать непустой оператор.

Все метки, функции и переменные должны иметь различные имена. В частности, непустой оператор, помеченный end'ом, не может просто называть метку.

Если начало - это метка программы, то стартует выполнение этой программы. В противном случае, выполнение начинается с первого выполняемого оператора; define не является выполняемым оператором.

Встроенные функции отсутствуют.

Скобки в арифметических выражениях необязательны. Поддерживается обычное соглашение о приоритетах. По этой причине арифметические операции / и * должны окаймляться пробелами.

Правая часть присваиваний должна быть непустой.

Для выделения литералов можно использовать как ', так и ".

Псевдопеременная sysppt недоступна.

СМ. ТАКЖЕ

.

SNOBOL, A String Manipulation Language, by D. J. Farber, R. E. Griswold, and I. P. Polonsky, JACM 11 (1964), pp. 21-30.



SORT(1)


НАЗВАНИЕ

sort - сортировка и/или слияние файлов

СИНТАКСИС

sort [-c] [-m] [-u] [-o выходной_файл] [-yкилобайт] [-zдлина] [-d] [-f] [-i] [-M] [-n] [-r] [-b] [-tразделитель] [+позиция_1 [-позиция_2]] [файл ...]

ОПИСАНИЕ

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

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

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

-c Проверить, является ли (единственный) исходный файл уже отсортированным. На стандартный вывод ничего не выдается. В стандартный протокол выводится соответствующее сообщение только в случае нарушения упорядоченности строк.

-m Только слияние исходных файлов, которые предполагаются отсортированными.

-u Опция уникальности: из всех совпадающих строк выводить только одну.

-o выходной_файл

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

-yкилобайт

Количество дополнительной памяти, используемой командой sort, существенно влияет на скорость ее работы. Если опция -y отсутствует, sort начинает работу, используя область памяти некоторого стандартного размера, а в случае необходимости запрашивает дополнительную память. Если опция -y задана с аргументом, команда sort начинает работу, используя указанное число килобайт памяти, если только не нарушены ограничения сверху или снизу; в этом случае используется соответствующее крайнее значение. Таким образом, указание -y0 гарантирует использование минимального об ема памяти. Опция -y без аргумента задает область памяти максимального размера.

-zдлина

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


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

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

-f Преобразовывать малые буквы в большие.

-i При нечисловых сравнениях игнорировать символы с (восьмеричными) кодами, не лежащими в пределах 040-0176.

-M Сравнивать как месяца. Первые три символа, отличные от пробела, сравниваются таким образом, что "JAN" < "FEB" < ... < "DEC" (малые буквы преобразуются в большие). Остальные трехсимвольные сочетания считаются меньшими, чем "JAN". Эта опция включает опцию -b (см. ниже).

-n Числовое сравнение. Начальные пробелы отбрасываются, затем цифровые цепочки символов, содержащие быть может знак минус и десятичную точку, сравниваются как числа. Эта опция включает опцию -b (см. ниже). Отметим, что опция -b действует только на ключи сортировки с наложенными ограничениями.

-r Заменить результат сравнения на противоположный.

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

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

-b Игнорировать начальные пробелы при определении начала и конца ключей сортировки. Если опция -b указана перед первым аргументом +позиция_1, она действует на все ключи с наложенными ограничениями. Флаг b можно связать и с отдельными ключами сортировки (см. ниже).

-tразделитель

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



При наложении ограничения на ключ сортировки указывается позиция начала ключа (+позиция_1) и позиция сразу за концом ключа (-позиция_2). Если опция -позиция_2 отсутствует, ключ занимает весь остаток строки.

Позиция_1 и позиция_2 задаются как пара m.n, возможно, с последующими флагами bdfiMnr. Начальная позиция задается как +m.n, что означает (n+1)-ый символ в (m+1)-ом поле (поля и символы нумеруются с единицы). Отсутствие .n означает .0, то есть первый символ (m+1)-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле; +m.0b означает первый непробел в (m+1)-ом поле.

Позиция за концом ключа записывается как -m.n, что означает (n+1)-ый символ (включая разделители) после последнего символа m-го поля. Если .n опущено, то подразумевается .0, то есть разделитель после m-го поля. Если указан флаг b, то n отсчитывается от первого непробела в (m+1)-ом поле.

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

ПРИМЕРЫ



Отсортировать файл f1, используя в качестве ключа второе поле:

sort +1 -2 f1

Отсортировать по убыванию содержимое файлов f2 и f3, поместив результат в файл f4. Ключом сортировки служит первый символ второго поля:

sort -r -o f4 +1.0 -1.2 f2 f3

Отсортировать по убыванию содержимое файлов f5 и f6. Ключом сортировки служит первый непробел второго поля:

sort -r +1.0b -1.1b f5 f6

Распечатать файл паролей [см. ], отсортировав его по числовым значениям идентификаторов пользователей (третье поле, поля разделяются символом :):

sort -t: +2n -3 /etc/passwd

Распечатать строки уже отсортированного файла f7, выводя лишь первую из строк с одинаковыми третьими полями:

sort -um +2 -3 f7

ФАЙЛЫ

/usr/tmp/stm???

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

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

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

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



Не гарантируется сохранение порядка следования строк с равными ключами.

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

/spellhist "исторический" файл /usr/lib/spell/spellprog программа

СМ. ТАКЖЕ

deroff(1), , , . eqn (1), tbl (1), troff (1) в руководстве DOCUMENTER'S WORKBENCH Software 2.0 Technical Discussion and Reference Manual.

СЮРПРИЗЫ

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









SPLINE(1G)


НАЗВАНИЕ

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

СИНТАКСИС

spline [-a шаг] [-k число] [-n число_интервалов] [-p] [-x нижняя_граница [верхняя_граница]]

ОПИСАНИЕ

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

Распознаются следуюшие опции, каждая как отдельный аргумент:

-a шаг

Автоматическое назначение абсцисс (при вводе задаются только ординаты). Значение шага по умолчанию равно 1. См. также опцию -x.

-k число

Число используется при вычислении граничных значений. По умолчанию число равно 0.

-n число_интервалов

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

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

-x нижняя_граница [верхняя_граница]

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

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

Когда данные не строго монотонны по x, spline воспроизводит исходные данные без добавления новых точек.

ОГРАНИЧЕНИЯ

Имеется ограничение на число исходных точек - 1000.



SPLIT(1)


НАЗВАНИЕ

split - деление файла на части

СИНТАКСИС

split [-порция] [файл [основа]]

ОПИСАНИЕ

Команда split читает файл и записывает его заданными порциями (по умолчанию порция составляет 1000 строк) в набор выходных файлов. Имя первого выходного файла получается из основы добавлением aa, далее в лексикографическом порядке вплоть до zz (максимальное количество выходных файлов - 676). Длина основы не может превышать 12 символов. Если основа не указана, она принимается равной x.

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

СМ. ТАКЖЕ

, , .



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


ИМЯ

sputl, sgetl - opгaнизyeт дocтyп к пepeмeнным типa long мaшиннo нeзaвиcимым cпocoбoм

СИНТАКСИС

void sputl(value,buffer) long value; char *buffer;

long sgetl(buffer) char *buffer;

ОПИСАНИЕ

Sputl зaпиcывaeт пo aдpecy buffer пepeмeннyю value типa long. Пopядoк бaйтoв oдинaкoв для вcex мaшин.

Sgetl вoвpaщaeт пepeмeннyю типa long, выбpaннyю пo aдpecy buffer, пpичeм пopядoк бaйтoв в пepeмeннoй cooтвeтcтвyeт paбoчeй ЭBM.

Sputl и sgetl пoзвoляют xpaнить в фaйлe в двoичнoм видe пepeмeнныe типa long бeз пpeoбpaзoвaния в cимвoльный вид.



SSIGNAL(3C)


НАЗВАНИЕ

ssignal, gsignal - программный вариант механизма сигналов

СИНТАКСИС

#include <signal.h>

int (*ssignal (sig, action)) ( ) int sig, (*action) ( );

int gsignal (sig) int sig;

ОПИСАНИЕ

Функции ssignal и gsignal представляют собой программную реализацию механизма передачи сигналов, похожего на тот, что обеспечивается системным вызовом . Эти функции используются стандартной библиотекой языка C, чтобы предоставить пользователю возможность нестандартной обработки ошибочных ситуаций. Функции ssignal и gsignal можно использовать и в иных целях.

Программные сигналы, доступные пользователю, обозначаются целыми числами от 1 до 16 включительно. Выполнение функции ssignal ассоциирует действие, action, с программным сигналом sig; возбуждение сигнала sig осуществляется функцией gsignal. Возбуждение сигнала приводит к выполнению ассоциированного с ним действия.

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

Функция gsignal возбуждает сигнал, заданный аргументом sig, при этом:

Если для обработки сигнала sig была установлена пользовательская функция, то сначала восстанавливается стандартная реакция на возбужденный сигнал, а затем вызывается пользовательская функция с аргументом sig. Функция gsignal возвращает значение, переданное ей пользовательской функцией обработки сигнала. Если действием для сигнала sig является SIG_IGN, (сигнал игнорируется), то функция gsignal возвращает 1 и не предпринимает каких-либо других действий. Если действием для сигнала sig является SIG_DFL (стандартная реакция), то функция gsignal возвращает 0 и не предпринимает каких-либо других действий. Если номер сигнала sig не является корректным или для сигнала sig не специфицировано действие, то функция gsignal возвращает значение 0 и не предпринимает каких-либо других действий.

СМ. ТАКЖЕ

, .

ПРИМЕЧАНИЯ

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



STARTER(1)


НАЗВАНИЕ

starter - информация о системе UNIX для начинающих пользователей

СИНТАКСИС

[help] starter

ОПИСАНИЕ

Команда справочной службы starter предоставляет следующие пять видов информации о системе UNIX в помощь новым пользователям:

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

Пользователь может либо выбрать один из видов справочной информации, введя указанную в меню букву, либо вернуться в систему, введя q (quit - выйти). В первом случае пользователь получит одну или более страниц информации на указанную тему.

В любой момент диалога со справочной службой пользователь может выполнить команду shell'а [см. ], введя ! и собственно команду. После ее выполнения экран перерисовывается, если команда была введена в ответ на приглашение первого уровня; в противном случае перерисовывается только приглашение.

По умолчанию справочная служба роллирует изображение. Если Вы предпочитаете, чтобы экран очищался перед выводом данных (без роллинга), переменной shell'а SCROLL нужно присвоить значение no и экспортировать ее, чтобы сделать частью окружения. Для этого в пользовательский профайл .profile [см. ] достаточно вставить строку

SCROLL=no; export SCROLL

Чтобы вернуть роллинг, переменной SCROLL нужно присвоить значение yes.

Каждой из команд справочной службы (starter, locate, usage, glossary и help) посвящена отдельная статья настоящего Справочника.

СМ. ТАКЖЕ

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

СЮРПРИЗЫ

Если переменная окружения TERM не установлена, то по умолчанию считается, что работа идет с терминалом типа 450. Список допустимых типов терминалов содержится в файле .



STAT(1G)


НАЗВАНИЕ

stat - статистическая обработка информации, полезная для графических команд

СИНТАКСИС

имя_узла [опция ...] [файл ...]

ОПИСАНИЕ

Stat - набор команд (узлов), которые могут быть связаны в так называемую статистическую сеть при помощи . Все эти функции располагаются в каталоге /usr/bin/graf [см. ]. Единицей обмена данными между узлами сети служат вектора, то есть последовательности чисел. Ниже, в зависимости от контекста, они иногда называются также выборками, а составляющие их числа - наблюдениями. Числа представляются в форме:

[знак](цифры)(.цифры)[e[знак]цифры]

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

Узлы сети stat разбиваются на четыре класса:

Преобразователи

Осуществляют покомпонентную обработку векторов, переводя элементы входного вектора в элементы вы ходного вектора.

Операторы

Вычисляют различные статистики вектора (то есть скалярные или векторные функции векторного аргу мента).

Форматизаторы

Осуществляют преобразования форматов.

Генераторы

Порождают вектора по заданным правилам.

Ниже описывается синтаксис каждого из узлов stat. Опциям должен предшествовать символ -. Вообще говоря, опция задается в виде символа, за которым следует значение, например c5. Это интерпретируется как c := 5 (c присваивается значение 5). Для указания ожидаемых типов значений использованы следующие обозначения:

c Символ. i Целое число. f Число с плавающей точкой или целое число. файл Имя файла.

цепочка

Цепочка символов (символы, интерпретируемые shell'ом, должны быть экранированы).

Опции без значений называются флагами.

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

Опция -c задает количество колонок при выводе. По умолчанию ее значение равно 5.

Преобразователи


abs [-ci] - абсолютная величина

af [-ci t v выражение] - арифметические действия t - поместить в результирующий файл заголовок, считанный со стандартного ввода, v - подробные пояснения, выражение - арифметическое выражение, в котором участвуют имена файлов, константы, знаки операций и круглые скобки (имена файлов не должны содержать символов /).

ceil [-ci] - округление до ближайшего целого с избытком

cusum [-ci] - нарастающий итог Сумма текущей и всех предшествующих компонент.

exp [-ci] - экспонента

floor [-ci] - округление до ближайшего целого с недостатком

gamma [-ci] - гамма-функция

list [-ci dцепочка] - перечисление элементов вектора
d - допустимые наряду с пробелом разделители числовых полей. Поле, в котором присутствуют не входящие в состав числа символы, игнорируется.

log [-ci bf] - логарифм
b - основание.

mod [-ci mf] - остаток от деления нацело
m - делитель.

pair [-ci Fфайл xi] - попарное (или более) об единение элементов
F - файл, содержащий основной вектор, x - размер группы: вывод группы из i последовательных элементов основного вектора чередуется с выводом одного элемента входного вектора.

power [-ci pf] - возведение в степень
p - показатель степени.

root [-ci rf] - извлечение корня
r - показатель радикала.

round [-ci pi si] - округление до указанного разряда
p - количество оставляемых позиций после десятичной точки, s - количество оставляемых значащих цифр.

sin [-ci] - синус

subset [-af bf ci Fфайл ii lf nl np pf si ti] - формирование подмножества
a - по превышению указываемого уровня, b - по (строгому) непревышению уровня, F - файл, содержащий номера элементов, i - шаг по номерам (используется совместно с s и t), l - по несовпадению с указываемым значением, nl - элементы с номерами, содержащимися в файле, не включаются в подмножество, np - в подмножество включаются только элементы с номерами, содержащимися в файле, p по совпадению с указываемым значением, s - начальный номер, t - конечный номер.

Операторы

bucket [-ai ci Fфайл hf if lf ni] - группировка предварительно отсортирова ных наблюдений по частичным интервалам a среднее количество наблюдений, приходящееся на частичный интервал, F файл, содержащий границы частичных интервалов, h верхняя граница полного интервала, i длина частичного интервала, l нижняя граница полного интервала, n количество частичных интервалов.

cor [-Fфайл] - коэффициент корреляции
F - файл, содержащий основной вектор (вычисляются коэффициенты корреляции основного вектора с каждым из входных). Все вектора должны иметь одинаковое количество элементов.

hilo [- h l o ox oy]- нахождение максимума и минимума
h - только максимум, l - только минимум, o - выдача результата в формате опций (например, "l-2.3,h5.1,"), ox - выдача результата в формате опций с подцепленным символом x (например, "xl-2.3,"), oy - то же с символом y (например, "yl-2.3,yh5.1,").

lreg [-Fфайл i o s] - линейная регрессия
F - файл, содержащий вектор значений "независимой" переменной (входной вектор должен содержать значения "зависимой" переменной; оба вектора должны иметь одинаковое количество элементов), i - вычисление только отрезка, отсекаемого на оси ординат, o - выдача результата в формате опций для узла siline (например, "i3,s1.2,"), s - вычисление только наклона линии регрессии.

point [-ff ni pf s] - квантиль эмпирической функции распределения
f - вероятность, определяющая квантиль, n - порядковый номер вариационного ряда выборки, p - вероятность в процентах, определяющая квантиль, s - выборка предварительно отсортирована (то есть совпадает со своим вариационным рядом).

mean [-ff ni pf] - среднее арифметическое, взятое с весом
f - вес в долях, n - вес в целых числах, p - вес в процентах.

prod - внутреннее произведение

qsort [-ci] - быстрая сортировка

rank - размерность вектора

total - общая сумма

var - несмещенная оценка дисперсии [с делителем (n-1)]

Форматизаторы



bar [-a b f g ri wi xf xa yf ya ylf yhf ] - построение столбцовой диаграмм
a - подавить вывод осей, b - утолщенные линии, f - подавить вывод рамки, g - подавить вывод масштабной сетки, r - размер области определения (то есть количество столбцов), w - ширина столбца в процентах, x - начало по оси x, xa - подавить вывод метки оси x, y - начало по оси y, ya - подавить вывод метки оси y, yl - нижняя граница по оси y, yh - верхняя граница по оси y. Данные округляются до целых.

hist [-a b f g ri xf xa yf ya ylf yhf ] - построение гистограммы
a - подавить вывод осей, b - утолщенные линии, f - подавить вывод рамки, g - подавить вывод масштабной сетки, r - размер области определения (то есть количество столбцов), x - начало по оси x, xa - подавить вывод метки оси x, y - начало по оси y, ya - подавить вывод метки оси y, yl - нижняя граница по оси y, yh - верхняя граница по оси y.

label [-b c Fфайл h p ri x xu y yr] - маркировка осей в файле GPS-формата
b ввод данных столбцовой диаграммы, c сохранить большие/малые буквы в названиях (по умолчанию осуществляется переход к большим), F маркируемый файл, h ввод данных гистограммы, p ввод данных графика, r поворот осей, x ось x, xu ось x вверху, y ось y, yr ось y справа.

pie [-b o p pni ppi ri v xi yi] - построение круговой диаграммы
b - утолщенные линии, o - значения отображаются вне круга, p - значения заданы в процентах, pn - значения вычисляются как процент от заданной величины, pp - в качестве значения отображать процент, r - количество секторов, v - значения не отображать, x - x-координата центра, y - y-координата центра.

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

[< i e f cc >] значение [метка]

i - игнорировать (не изображать) сектор, e - выдвинуть сектор, f - сплошная закраска сектора, c - цвет сектора c=(b - черный, r - красный, g - зеленый, u - синий).

plot [-a b cцепочка d f Fфайл g m ri xf xa xif xhf xlf xni xt yf ya yif yh

- построение графика
a подавить вывод осей, b утолщенные линии, c символы, используемые при построении графика, d разрывный график, f подавить вывод рамки, F файл, содержащий x-вектор, g подавить вывод масштабной сетки, m маркировать точки, r количество точек, x начало по оси x, xa подавить вывод метки оси x, xi длина интервала по оси x, xh верхняя граница по оси x, xl нижняя граница по оси x, xn число отсчетов по оси x, xt подавить вывод названия оси x, y начало по оси y, ya подавить вывод метки оси y, yi длина интервала по оси y, yh верхняя граница по оси y, yl нижняя граница по оси y, yn число отсчетов по оси y, yt подавить вывод названия оси y.

title [-b c lцепочка vцепочка uцепочка] - внесение заголовка в файл, содержащий вектор, или в файл GPS-формата
b - жирный шрифт заголовка, c - сохранить большие/малые буквы в заголовке (по умолчанию осуществляется переход к большим), l - заголовок внизу, u - заголовок вверху, v - заголовок вектора.

Генераторы



gas [- ci if ni sf tf] - генерация арифметической прогрессии
i - разность, n - количество элементов, s - начальное значение, t - верхняя граница.

prime [-ci hi li ni] - генерация простых чисел
h - верхняя граница, l - нижняя граница, n - количество элементов.

rand [-ci hf lf mf ni si] - генерация случайной последовательности
h - верхняя граница, l - нижняя граница, m - множитель, n - количество элементов, s - инициализирующее значение.

siline [-ci if ni sf ] - генерация ординат прямой по заданному наклону и отрезку, отсекаемому на оси ординат
i - отрезок, отсекаемый на оси ординат, n - количество целых неотрицательных значений абсциссы, для которых вычисляются ординаты, s - наклон прямой.

СМ. ТАКЖЕ

.

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

ОГРАНИЧЕНИЯ

Некоторые узлы имеют ограничение на размер входного вектора.

СЮРПРИЗЫ

Узлы abs, exp, gamma, log, power, root, sin работают неправильно.

Узел af с опцией -t работает в соответствии с описанием только в том случае, когда стандартный ввод осуществляется из файла (вектора), куда заголовок был помещен командой title -v'...'. Опция -v никакого влияния на работу узла af не оказывает.

Узлы ceil, floor фактически осуществляют вычисление дробной части.

Узел mod фактически осуществляет вычисление функции

f(x) = (x mod m) / m.

Узел cor фактически осуществляет вычисление суммы

(x[i]-x) * (y[i]-y)

по i, то есть полуфабрикат коэффициента ковариации.

Узел mean работает нормально только в отсутствие опций.

Узел point работает нормально только с опцией -n.

Узел prod фактически осуществляет вычисление произведения всех компонент вектора.

Узел prime фактически генерирует последовательные нечетные числа.









STAT(2)


НАЗВАНИЕ

stat, fstat - получение статуса файла

СИНТАКСИС

#include <sys/types.h> #include <sys/stat.h>

int stat (path, buf) char *path; struct stat *buf;

int fstat (fildes, buf) int fildes; struct stat *buf;

ОПИСАНИЕ

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

Системный вызов fstat предоставляет информацию об открытом файле, задаваемом с помощью дескриптора файла fildes, который возвращается успешно завершенными системными вызовами open, creat, dup, fcntl или pipe.

Аргумент buf является указателем на стуктуру типа stat, в которую помещается информация о файле.

Структура, на которую указывает buf, содержит следующие поля:

ushort st_mode; /* Режим файла [см. ] */ ino_t st_ino; /* Номер описателя файла */ dev_t st_dev; /* Идент. устройства, содержащего каталог с входом в этот файл */ dev_t st_rdev; /* Идент. устройства. Поле определено только для специальных символьных и блочных файлов */ short st_nlink; /* Количество ссылок */ ushort st_uid; /* Идент. владельца файла */ ushort st_gid; /* Идент. группы владельца файла */ off_t st_size; /* Размер файла в байтах */ time_t st_atime; /* Время последнего доступа к файлу */ time_t st_mtime; /* Время последней записи в файл */ time_t st_ctime; /* Время последнего изменения статуса файла */ /* Время измеряется в секундах от 00:00:00 1 января 1970г. по Гринвичу */

st_mode Режим файла согласно определению, данному при описании системного вызова . st_ino Это поле однозначно определяет файл в данной файловой системе. Пара (st_ino, st_dev) однозначно определяет обычные файлы. st_dev Это поле однозначно определяет файловую систему, содержащую файл. Значение поля может использоваться в качестве входного аргумента системного вызова при получении дополнительной информации об этой файловой системе. Никакого другого смысла это поле не имеет. st_rdev Это поле следует использовать только для команд администратора. Оно имеет смысл лишь для специальных блочных и символьных файлов и только в той системе, где файл был сконфигурирован. st_nlink Это поле следует использовать только для команд администратора. st_uid Идентификатор владельца файла. st_gid Идентификатор группы владельца файла. st_size Для обычных файлов это адрес конца файла. Для каналов это текущее количество данных в файле. Для специальных блочных и символьных файлов значение поля не определено. st_atime Время последнего доступа к данным. Это поле изменяется следующими системными вызовами: , , , и . st_mtime Время последней модификации данных. Это поле изменяется следующими системными вызовами: , , , и . st_ctime Время последнего изменения статуса файла. Это поле изменяется следующими системными вызовами: , , , , , , , и .


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

[ENOTDIR] Компонент маршрута не является каталогом. [ENOENT] Заданный файл не существует. [EACCES] Нет права на поиск для компонента маршрута. [EFAULT] Аргументы buf или path указывают за пределы отведенного процессу адресного пространства. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [ENOLINK] Маршрутное имя path указывает на удаленный компьютер, связи с которым в данный момент нет. [EMULTIHOP] Компоненты path требуют многократного обращения к удаленным компьютерам.

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

[EBADF] Аргумент fildes не является корректным дескриптором открытого файла. [EFAULT] Аргументы buf или path указывают за пределы отведенного процессу адресного пространства. [ENOLINK] Дескриптор файла fildes указывает на удаленный компьютер, связи с которым в данный момент нет.

СМ. ТАКЖЕ

, , , , , , , , , , .

ДИАГНОСТИКА

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









STAT(5)


НАЗВАНИЕ

stat - данные, возвращаемые системным вызовом stat

СИНТАКСИС

#include <sys/types.h> #include <sys/stat.h>

ОПИСАНИЕ

Системные вызовы и fstat(2) возвращают данные, структура которых описана во включаемом файле <sys/ stat.h>. Назначение бит, входящих в поле st_mode, также определяется в этом файле.

Структура, возвращаемая системным вызовом stat:

struct stat { dev_t st_dev; ushort st_ino; ushort st_mode; short st_nlink; ushort st_uid; ushort st_gid; dev_t st_rdev; off_t st_size; time_t st_atime; time_t st_mtime; time_t st_ctime; };

#define S_IFMT 0170000 /* Маска для выделения типа файла */ #define S_IFDIR 0040000 /* Каталог */ #define S_IFCHR 0020000 /* Специальный символьный */ #define S_IFBLK 0060000 /* Специальный блочный */ #define S_IFREG 0100000 /* Обычный файл */ #define S_IFIFO 0010000 /* Именованный канал */ #define S_ISUID 04000 /* Установить идентификатор пользователя при выполнении*/ #define S_ISGID 02000 /* Установить идентификатор группы при выполнении */ #define S_ISVTX 01000 /* Сохранить сегмент команд после завершения выполнения */ #define S_IREAD 00400 /* Право на чтение для вла- дельца */ #define S_IWRITE 00200 /* Право на запись для вла- дельца */ #define S_IEXEC 00100 /* Право на выполнение/поиск для владельца */ #define S_ENFMT S_ISGID /* Флаг разрешения блокировки доступа */ #define S_IRWXU 00700 /* Чтение, запись, выполнение: владелец */ #define S_IRUSR 00400 /* Право на чтение: владелец*/ #define S_IWUSR 00200 /* Право на запись: владелец*/ #define S_IXUSR 00100 /* Право на выполнение: владе- лец */ #define S_IRWXG 00070 /* Чтение, запись, выполнение: группа */ #define S_IRGRP 00040 /* Право на чтение: группа */ #define S_IWGRP 00020 /* Право на запись: группа */ #define S_IXGRP 00010 /* Право на выполнение: группа */ #define S_IRWXO 00007 /* Чтение, запись, выполнение: прочие */ #define S_IROTH 00004 /* Право на чтение: прочие */ #define S_IWOTH 00002 /* Право на запись: прочие */ #define S_IXOTH 00001 /* Право на выполнение: прочие */

СМ. ТАКЖЕ

, .



Statd


НАЗВАНИЕ

statd - монитор состояния сети

СИНТАКСИС

/etc/statd [-d debuglevel]

ОПИСАНИЕ

Statd - промежуточная версия монитора состояния сети. Для выполнения функций блокировки и восстановления компонентов NFS statd взаимодействует с .

Информация о состоянии сбоя/восстановления сохраняется в каталоге /etc/sm. Файл record содержит имена машин (клиентов) для всех отслеживаемых систем. Файл recover содержит аналогичные имена для тех систем, которые еще не уведомлены об отказе statd, а файл state - номер текущей версии statd.

Опции:

-d debuglevel Команда statd имеет расширенные внутренние возможности в области формирования отчетов. Уровень 2 соответствует сигнализированию о существенных событиях. Уровень 4 сообщает о внутреннем состоянии и совокупном трафике.

ФАЙЛЫ

/etc/sm/record /etc/sm/recover /etc/sm/state

СМ. ТАКЖЕ

, statmon(3)



STATFS(2)


НАЗВАНИЕ

statfs, fstatfs - получение информации о файловой системе

СИНТАКСИС

#include <sys/types.h> #include <sys/statfs.h>

int statfs (path, buf, len, fstyp) char *path; struct statfs *buf; int len, fstyp;

int fstatfs (fildes, buf, len, fstyp) int fildes; struct statfs *buf; int len, fstyp;

ОПИСАНИЕ

Системный вызов statfs возвращает "родовой суперблок", описывающий файловую систему. Вызов может использоваться для запроса информации как о смонтированной, так и о несмонтированной файловой системе; использование вызова несколько различается в этих двух случаях. В обоих случаях аргумент buf является указателем на структуру (описываемую ниже), поля которой заполняются в результате выполнения системного вызова, а аргумент len задает количество байт информации, которые система должна поместить в структуру. Значение len не должно превышать размер структуры: sizeof (struct statfs) и обычно len содержит именно этот размер; если аргумент len содержит меньшее значение, то система поместит в структуру ровно заданное количество байт, что дает возможность в более поздних версиях добавлять к структуре statfs новые поля без перетрансляции старых программ.

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

Структура statfs, на которую указывает аргумент buf, состоит из следующих полей:

short f_fstyp; /* Тип файловой системы */ short f_bsize; /* Размер блока */ short f_frsize; /* Размер сегмента */ long f_blocks; /* Общее количество блоков */ long f_bfree; /* Счетчик свободных блоков */ long f_files; /* Общее кол-во описателей файлов */ long f_ffree; /* Счетчик свобод. описат. файлов */ char f_fname [6]; /* Имя тома */ char f_fpack [6]; /* Имя пакета */


Системный вызов fstatfs отличается от statfs только тем, что файл идентифицируется не маршрутным именем, а дескриптором открытого файла fildes, сформированным в результате успешного завершения следующих системных вызовов: , , , или .

Системный вызов statfs является более поздним вариантом системного вызова и в новых программах предпочтение следует отдавать statfs.

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

[ENOTDIR] Компонент маршрута не является каталогом. [ENOENT] Заданный файл не существует. [EACCES] Нет права на поиск для компонента маршрута. [EFAULT] Аргументы buf или path указывают за пределы отведенного процессу адресного пространства. [EBADF] Аргумент fildes не является корректным дескриптором открытого файла. [EINVAL] Аргумент fstyp содержит некорректный тип файловой системы; path задает не специальный блочный файл и аргумент fstyp не равен 0; аргумент len отрицателен или превышает sizeof (struct statfs). [ENOLINK] Маршрутное имя path указывает на удаленный компьютер, связи с которым в данный момент нет. [EMULTIHOP] Компоненты path требуют многократного обращения к удаленным компьютерам.

СМ. ТАКЖЕ

, , , , , , , , , , , , .

ДИАГНОСТИКА

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









Statmon, current, backup, state


НАЗВАНИЕ

Структуры файлов и каталогов statd

СИНТАКСИС

/etc/sm/record, /etc/sm/recover, /etc/sm/state

ОПИСАНИЕ

Файлы /etc/sm/record и /etc/sm/recover генерируются процессом statd. Каждое host-имя в /etc/sm/record представляет собой имя машины, управляемой процессом statd. Каждое host-имя в /etc/sm/recover представляет собой имя машины, на которую ссылается процесс statd при восстановлении.

Файл /etc/sm/state генерируется процессом statd для записи номера его версии. Этот номер увеличивается на единицу при каждом сбое или восстановлении.

СМ. ТАКЖЕ

,



STDIO(3S)


НАЗВАНИЕ

stdio - стандартный пакет буферизованного ввода/вывода

СИНТАКСИС

#include <stdio.h>

FILE *stdin, *stdout, *stderr;

ОПИСАНИЕ

Макросы и функции, относящиеся к разделу 3S этого Справочника, предоставляют пользователю эффективные средства буферизованного ввода/вывода. Макросы и служат для быстрого ввода/вывода символов. Макросы getchar и putchar и функции более высокого уровня fgetc, fgets, fprintf, fputc, fputs, fread, fscanf, fwrite, gets, getw, printf, puts, putw и scanf ведут себя так, как если бы они использовали getc и putc. Обращения к макросам и функциям из данного пакета можно чередовать произвольным образом.

Файл и ассоциированный с ним механизм буферизации называются потоком. Поток описывается как указатель на переменную типа FILE. Функция создает описатель потока и возвращает указатель на него. Этот указатель идентифицирует поток во всех последующих операциях. Обычно имеются три открытых потока с постоянными указателями, они описаны во включаемом файле <stdio.h> и связаны со стандартными открытыми файлами:

stdin стандартный ввод stdout стандартный вывод stderr стандартный протокол

Константа NULL (0) обозначает пустой указатель.

Целая константа EOF (-1) возвращается по достижении конца файла или в случае ошибки большинством из целочисленных функций, работающих с потоками (для получения детальной информации см. описания отдельных функций).

Целая константа BUFSIZ специфицирует размер буферов, используемых в конкретной реализации.

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

#include <stdio.h>

Функции и константы, упоминаемые в разделе 3S этого руководства, описаны в файле <stdio.h> и не требуют дальнейшего описания. Константы и следующие "функции" реализованы как макросы (переопределение этих имен опасно): getc, getchar, putc, putchar, ferror, feof, clearerr и fileno.

Потоки вывода, за исключением стандартного протокола stderr, по умолчанию буферизуются, если вывод производится в файл, и буферизуется построчно, если вывод производится на терминал. Стандартный протокол stderr по умолчанию не буферизуется, но использование функции freopen [см. ] приводит к тому, что стандартный протокол становится буферизованным или буферизованным построчно. Когда поток вывода не буферизован, данные выводятся в нужный файл или на терминал по мере поступления запросов на запись; когда поток вывода буферизован, байты накапливаются и записываются блоком. Когда поток вывода буферизован построчно, каждая выводимая строка выводится на терминал после заполнения строки (то есть как только выводится символ перевода строки или поступает запрос на ввод с терминала). Функции setbuf или setvbuf [см. ] могут использоваться для изменения стратегии буферизации потоков.

СМ. ТАКЖЕ

, , , , , , , , , , , , , , , , , , , , , , , , .

ДИАГНОСТИКА

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



STIME(2)


НАЗВАНИЕ

stime - установка системных часов

СИНТАКСИС

int stime (tp) long *tp;

ОПИСАНИЕ

Системный вызов stime устанавливает системное время и дату. Параметр tp является указателем на величину, заданную в секундах от 00:00:00 1 января 1970 года (по Гринвичу).

[EPERM] Данный вызов разрешен только суперпользователю.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

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



STRACE(1M)


НАЗВАНИЕ

strace - трассировка сообщений псевдоустройств

СИНТАКСИС

strace [ид_модуля ид_устройства уровень] ...

ОПИСАНИЕ

Утилита strace, будучи вызванной без аргументов, записывает на стандартный вывод все трассировочные сообщения псевдоустройств от всех драйверов и модулей. Эти сообщения поставляются драйвером регистрации ошибок и трассировки событий псевдоустройств [см. ]. Если указаны аргументы, то они должны составлять тройки (ид_модуля ид_устройства уровень), где ид_модуля идентификатор модуля псевдоустройства, ид_устройства идентификатор устройства, уровень - уровень приоритета трассировки. Каждая тройка указывает, что трассировочные сообщения поступают от указанного модуля/драйвера, устройства (обычно в качестве идентификатора устройства задается его младший номер) и с уровнем приоритета, меньшим или равным указанному. Задание слова all на любом из трех мест означает отсутствие соответствующего ограничения.

Трассировочные сообщения имеют следующий формат:

номер время время_от_загрузки уровень флаги ид_модуля ид_устр-ва текст

где

номер порядковый номер время время выдачи сообщения в формате чч:мм:сс время_от_загрузки время выдачи сообщения в тактах часов от последней загрузки системы уровень уровень приоритета флаги E: сообщение зарегистрировано, как ошибка
F: фатальная ошибка
N: послано письмо системному администратору ид_модуля идентификатор модуля источника ид_устр-ва идентификатор устройства источника текст текст сообщения

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

ПРИМЕРЫ

Выводить все трассировочные сообщения от драйвера с идентификатором 41:

strace 41 all all

Выводить трассировочные сообщения от драйвера с идентификатором 41, устройств 0, 1 и 2:

strace 41 0 1 41 1 1 41 2 0

Сообщения от устройств 0 и 1 должны иметь уровень трассировки, меньший или равный 1. Сообщения от устройства 0 и 1 должны иметь уровень трассировки, равный 0.

ОГРАНИЧЕНИЯ

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

СМ. ТАКЖЕ

.



STRCLEAN(1M)


НАЗВАНИЕ

strclean - очистка протоколов об ошибках псевдоустройств

СИНТАКСИС

strclean [-d каталог] [-a возраст]

ОПИСАНИЕ

Утилита strclean используется для регулярной чистки каталога регистрации ошибок и трассировки событий псевдоустройств [например, через ]. По умолчанию, удаляются все файлы, имена которых удовлетворяют шаблону error.* в каталоге /usr/adm/streams, не модифицировавшиеся за последние 3 дня. Каталог, в котором производится удаление, может быть изменен опцией -d. Возраст удаляемых файлов в днях может быть изменен опцией -a.

ПРИМЕР

Командная строка

strclean -d /usr/adm/streams -a 3

дает тот же эффект, что и вызов утилиты strclean без аргументов.

ЗАМЕЧАНИЯ

Обычно strclean запускается через ежедневно или еженедельно.

ФАЙЛЫ

/usr/adm/streams/error.*

СМ. ТАКЖЕ

, .



STREAMIO(7)


НАЗВАНИЕ

streamio - управление псевдоустройствами

СИНТАКСИС

#include <stropts.h>

int ioctl (fildes, command, arg) int fildes, command;

ОПИСАНИЕ

Управление псевдоустройствами [см. ] выполняется с помощью системного вызова , осуществляющего операции над потоками. Аргументы command и arg передаются в поток, определяемый дескриптором файла fildes и интерпретируются его истоком. Некоторые комбинации аргументов передаются далее модулям или драйверам потока.

Аргумент fildes - это дескриптор открытого файла, определяющий поток. Аргумент command задает выполняемую команду, как описано ниже. Аргумент arg задает дополнительные аргументы для этой команды. Тип аргумента arg зависит от команды. Обычно это int или указатель на какую-либо структуру.

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

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

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

I_PUSH Помещает модуль, на имя которого указывает аргумент arg, на вершину потока, определяемого аргументом fildes, сразу под истоком. Затем вызывается процедура открытия помещенного модуля. При неудаче переменная errno принимает одно из следующих значений:

[EINVAL] Некорректное имя модуля. [EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства. [ENXIO] Ошибка в процедуре открытия помещенного модуля. [ENXIO] В потоке произошло освобождение линии.


I_POP Удаляет модуль, расположенный сразу под истоком потока, определяемого аргументом fildes. Аргумент arg должен равняться 0. При неудаче переменная errno принимает одно из следующих значений:

[EINVAL] В потоке нет ни одного модуля. [ENXIO] В потоке произошло освобождение линии.

I_LOOK Извлекает имя модуля, расположенного сразу под истоком потока, определяемого аргументом fildes, и помещает его (как цепочку символов, завершающуюся нулевым байтом) в буфер, на который указывает аргумент arg. Этот буфер должен иметь длину не менее FMNAMESZ + 1 байт. Требуется включаемый файл <sys/ conf.h>. При неудаче переменная errno принимает одно из следующих значений:

[EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства. [EINVAL] В потоке нет ни одного модуля.

I_FLUSH Очищает входные или выходные очереди, в зависимости от значения аргумента arg. Допустимыми являются следующие значения:

FLUSHR Очистить входные очереди. FLUSHW Очистить выходные очереди. FLUSHRW Очистить входные и выходные очереди.

При неудаче переменная errno принимает одно из следующих значений:

[EINVAL] Аргумент arg некорректен. [EAGAIN] Не удалось захватить буфера для очистки очередей. [ENXIO] В потоке произошло освобождение линии.

I_SETSIG Информирует исток потока о том, что пользователь хочет, чтобы ядро послало ему сигнал SIGPOLL [см. и ] , когда в потоке, определяемом аргументом fildes, произойдет определенное событие. Таким образом обеспечивается возможность асинхронной работы с псевдоустройствами. Значение аргумента arg является битной маской, задающей события, при наступлении которых пользователю должен быть послан сигнал. Маска представляет собой логическое ИЛИ следующих констант:

S_INPUT В очереди на чтение истока, которая была до этого пустой, появилось неприоритетное сообщение. Сообщения нулевой длины при этом тоже обрабатываются. S_HIPRI В очереди на чтение истока появилось приоритетное сообщение. Сообщения нулевой длины при этом тоже обрабатываются. S_OUTPUT В очереди на запись истока, которая была до этого заполненной, появилось свободное место. Пользователь уведомляется о возможность посылать данные в поток. S_MSG Следующим в очереди на чтение истока стало сообщение, содержащее сигнал SIGPOLL.



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

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

Если значение arg равно 0, процесс удаляется из списка процессов, которым нужно посылать сигнал SIGPOLL.

При неудаче переменная errno принимает одно из следующих значений:

[EINVAL] Аргумент arg некорректен или аргумент arg равен 0, но процесс до этого не просил посылать ему сигнал SIGPOLL. [EAGAIN] Не удалось захватить буфера для обработки запроса.

I_GETSIG Возвращает событие, которое произошло в потоке и по поводу которого процессу был послан сигнал SIGPOLL. События записываются в виде битной маски по адресу, на который указывает аргумент arg. Значения бит те же, что и в команде I_SETSIG [см. выше].

При неудаче переменная errno принимает одно из следующих значений:

[EINVAL] Процесс не просил посылать ему сигнал SIGPOLL. [EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства.

I_FIND Сравнивает имена модулей, находящихся в потоке, с именем, на которое указывает аргумент arg. Если модуль с таким именем присутствует в потоке, то возвращается 1, если отсутствует - возвращается 0.

При неудаче переменная errno принимает одно из следующих значений:

[EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства. [EINVAL] Имя модуля, на которое указывает arg, некорректно.

I_PEEK Дает возможность пользователю получить информацию о первом сообщении в очереди на чтение истока потока без удаления самого сообщения из очереди. Аргумент arg указывает на структуру типа struct strpeek:

struct strpeek { struct strbuf ctlbuf; struct strbuf databuf; long flags; };

Поля ctlbuf.maxlen и databuf.maxlen [см. ] должны быть установлены равными количеству извлекаемых байт из управляющей области и области данных соответственно. Если поле flags имеет значение RS_HIPRI, из очереди на чтение истока будут извлекаться только приоритетные сообщения.



Команда I_PEEK возвращает значение 1, если сообщение было извлечено. Результат равен 0, если в очереди не чтение истока нет сообщений или если установлен флаг RS_HIPRI, а в очереди на чтение истока нет приоритетных сообщений. Ожидание сообщений не производится. При возврате поле ctlbuf задает информацию из управляющей области, databuf - из области данных, flags содержит значение 0 или RS_HIPRI.

При неудаче переменная errno принимает следующее значение:

[EFAULT] Аргумент arg или компоненты структур ctlbuf или databuf указывают за пределы отведенного процессу адресного пространства.

I_SRDOPT Устанавливает режим чтения в соответствии со значением аргумента arg. Допустимыми являются следующие значения:

RNORM Байтный режим, по умолчанию. RMSGD Режим сообщений со сбросом. RMSGN Режим сообщений без сброса.

Режимы чтения описаны в .

При неудаче переменная errno принимает следующее значение:

[EINVAL] Аргумент arg некорректен.

I_GRDOPT Возвращает текущее значение режима чтения, записывая его в целую переменную, на которую указывает аргумент arg. Режимы чтения описаны в .

При неудаче переменная errno принимает следующее значение:

[EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства.

I_NREAD Вычисляет количество байт данных в первом сообщении из очереди на чтение истока и присваивает вычисленное значение переменной, на которую указывает аргумент arg. Сам системный вызов возвращает значение, равное количеству сообщений в очереди на чтение истока. Например, если переменной *arg присвоено значение 0, а ioctl возвратил значение, большее 0, значит, следующее сообщение в очереди имеет нулевую длину.

При неудаче переменная errno принимает следующее значение:

[EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства.

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



Аргумент arg указывает на структуру типа struct strfdinsert:

struct strfdinsert { struct strbuf ctlbuf; struct strbuf databuf; long flags; int fildes; int offset; };

Поле ctlbuf.len [см. ] должно иметь значение, равное размеру указателя плюс количество байт в управляющей области сообщения. Поле fildes задает дескриптор файла другого потока. Поле offset, которое должно быть выравнено по границе слова, задает смещение от начала управляющей области ячейки памяти, куда команда I_FDINSERT занесет указатель на структуру очереди чтения драйвера потока, определяемого fildes. Поле databuf.len должно иметь значение, равное количеству байт в области данных сообщения, или значение 0, если область данных отсутствует.

Поле flags задает тип посылаемого сообщения. Если поле flags имеет значение 0, посылается неприоритетное сообщение, а если поле flags имеет значение RS_HIPRI, посылается приоритетное сообщение. Для неприоритетных сообщений, в случае если очередь на запись потока заполнена, команда I_FDINSERT заблокируется в ожидании свободного места. Для приоритетных сообщений блокировки в этом случае не происходит. Если для потока установлен флаг O_NDELAY, то для неприоритетных сообщений, в случае если очередь на запись потока заполнена, команда I_FDINSERT не блокируется, а завершается неудачей с присваиванием переменной errno значения EAGAIN.

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

При неудаче переменная errno принимает одно из следующих значений:

[EAGAIN] Указано неприоритетное сообщение, в потоке установлен флаг O_NDELAY и очередь потока на запись заполнена. [EAGAIN] Не удалось захватить буфера для посылки сообщения. [EFAULT] Аргумент arg или компоненты структур ctlbuf или databuf указывают за пределы отведенного процессу адресного пространства. [EINVAL] Или поле fildes не является корректным дескриптором открытого файла, или значение поля offset превосходит значение ctlptr.len, или поле offset не выравнено по границе слова, или значение поля flags некорректно. [ENXIO] В потоке произошло освобождение линии. [ERANGE] Значение поля databuf.len выходит за пределы минимального или максимального размера сообщения, которые определяются самым верхним модулем потока, или превосходит максимум, заданный при генерации системы, или значение в поле ctlbuf.len превосходит максимум, заданный при генерации системы.



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

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

Только одна команда I_STR может быть активной в потоке, все последующие команды I_STR блокируются до тех пор, пока ответ от активной команды I_STR не дойдет до истока. Время ожидания по умолчанию равен 15 секундам. Наличие флага O_NDELAY [см. ] в этой команде игнорируется.

Аргумент arg должен указывать на структуру типа struct strioctl:

struct strioctl { int ic_cmd; /* Команда */ int ic_timout; /* Время ожидания */ int ic_len; /* Длина данных */ char *ic_dp; /* Указатель на данные */ };

В поле ic_cmd задается внутренняя команда, предназначенная модулю или драйверу потока. В поле ic_timeout задается время ожидания: -1 - бесконечное, 0 - по умолчанию, > 0 - указанное количество секунд. В поле ic_len задается длина передаваемых данных, а в поле ic_dp - указатель на данные. Поле ic_len используется для двух целей: на входе в нем задается длина передаваемых данных, а на выходе в него записывается длина ответа. Буфер, на который указывает поле ic_dp, должен иметь достаточный размер для приема любого ответа от любого модуля или драйвера потока.

Исток преобразует информацию из структуры strioctl в формат внутреннего управляющего сообщения и посылает это сообщение вниз.

При неудаче переменная errno принимает одно из следующих значений:

[EAGAIN] Не удалось захватить буфера для посылки сообщения. [EFAULT] Аргумент arg или поля ic_dp или ic_len указывают за пределы отведенного процессу адресного пространства. [EINVAL] Значение ic_len меньше 0 или больше максимума, заданного при генерации системы, или значение ic_timeout меньше -1. [ENXIO] В потоке произошло освобождение линии. [ETIME] Период ожидания истек до получения ответа.



Команда I_STR завершается неудачей без ожидания ответа, если истоком получено сообщение об ошибке или освобождении линии. Кроме того, в положительном или отрицательном ответе на сообщение может также содержаться код ошибки. В этом случае I_STR завершается неудачей, а значение переменной errno устанавливается равным полученному коду ошибки. I_SENDFD Запрашивает посылку сообщения, содержащего описатель некоторого файла, в исток потока, находящегося на другом конце конвейера, в который входит поток, определяемый аргументом fildes. Файл, об описателе которого идет речь, задается аргументом arg, который должен быть целым числом - дескриптором открытого файла.

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

При неудаче переменная errno принимает одно из следующих значений:

[EAGAIN] Не удалось захватить буфера для посылки сообщения. [EAGAIN] Очередь на чтение истока заполнена и не может принять сообщение, сгенерированное по команде I_SENDFD. [EBADF] Аргумент arg не является корректным дескриптором открытого файла. [EINVAL] Поток, определяемый аргументом fildes, не входит в конвейер. [ENXIO] В потоке произошло освобождение линии.

I_RECVFD Получает дескриптор файла по сообщению, посланному командой I_SENDFD с другого конца конвейера. Аргумент arg указывает на структуру типа struct strrecvfd:

struct strrecvfd { int fd; unsigned short uid; unsigned short gid; char fill [8]; };

В поле fd возвращается дескриптор файла. В поля uid и gid - идентификатор пользователя и идентификатор группы процесса, выполнявшего команду I_SENDFD.

Если отсутствует флаг O_NDELAY [см. ], команда I_RECVFD блокируется до тех пор, пока не придет какое-нибудь сообщение. Если флаг O_NDELAY присутствует, а в истоке нет никаких сообщений, команда I_RECVFD завершается неудачей с присваиванием переменной errno значения EAGAIN.



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

При неудаче переменная errno принимает одно из следующих значений:

[EAGAIN] В потоке установлен флаг O_NDELAY и очередь потока на чтение пуста. [EBADMSG] Полученное сообщение послано не командой I_SENDFD. [EFAULT] Аргумент arg указывает за пределы отведенного процессу адресного пространства. [EMFILE] Уже имеется NOFILES дескрипторов открытых файлов. [ENXIO] В потоке произошло освобождение линии.

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

I_LINK Соединить два потока, где fildes - это дескриптор файла для потока с мультиплексирующим драйвером, а arg - дескриптор файла для потока с другим драйвером. Поток, заданный аргументом arg, присоединяется к мультиплексирующему драйверу. Команда I_LINK приводит к посылке мультиплексирующим драйвером в исток сообщения, говорящего о завершении операции присоединения. Системный вызов при успехе возвращает идентификатор мультиплексора (который впоследствии используется для отсоединения, см. I_UNLINK). При неудаче возвращается -1.

При неудаче переменная errno принимает одно из следующих значений:

[ENXIO] В потоке произошло освобождение линии. [ETIME] Период ожидания истек до получения ответа. [EAGAIN] Не удалось захватить буфера для выполнения запроса. [EBADF] Аргумент arg не является корректным дескриптором открытого файла. [EINVAL] Поток fildes не поддерживает мультиплексирования. [EINVAL] Аргумент arg некорректен или поток arg уже мультиплексируется. [EINVAL] Обнаружен "цикл" в мультиплексируемой конфигурации, например, данный исток задан в нескольких местах конфигурации.

Команда I_LINK завершается неудачей без ожидания ответа, если истоком потока fildes получено сообщение об ошибке или освобождении линии. Кроме того, в положительном или отрицательном ответе на сообщение может также содержаться код ошибки. В этом случае команда I_LINK завершается неудачей, а значение переменной errno устанавливается равным полученному коду ошибки. I_UNLINK Раз единить два потока, заданные аргументами fildes и arg. Аргумент fildes - это дескриптор файла для потока с мультиплексирующим драйвером, а arg - идентификатор мультиплексора, который был возвращен командой I_LINK при соединении потоков. Если arg равен -1, от потока fildes отсоединяются все присоединенные потоки. Так же как и команда I_LINK, команда I_UNLINK приводит к посылке мультиплексирующим драйвером в исток сообщения, говорящего о завершении операции отсоединения.



При неудаче переменная errno принимает одно из следующих значений:

[ENXIO] В потоке произошло освобождение линии. [ETIME] Период ожидания истек до получения ответа. [EAGAIN] Не удалось захватить буфера для посылки ответа. [EINVAL] Аргумент arg некорректен.

Команда I_UNLINK завершается неудачей без ожидания ответа, если истоком потока fildes получено сообщение об ошибке или освобождении линии. Кроме того, в положительном или отрицательном ответе на сообщение может также содержаться код ошибки. В этом случае команда I_UNLINK завершается неудачей, а значение переменной errno устанавливается равным полученному коду ошибки.

СМ. ТАКЖЕ

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

ДИАГНОСТИКА

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









STRERR(1M)


НАЗВАНИЕ

strerr - демон регистрации ошибок псевдоустройств

СИНТАКСИС

strerr

ОПИСАНИЕ

Утилита strerr получает сообщения от драйвера регистрации ошибок и трассировки событий псевдоустройств [см. ] и записывает их в файл протокола. Файлы протокола создаются в каталоге /usr/adm/streams и имеют имена error.мм-дд, где мм - месяц, а дд - день посылки сообщения, запись о котором содержится в этом файле.

Сообщения в протоколе имеют следующий формат:

номер время время_от_загрузки уровень флаги ид_модуля ид_устр-ва текст

где

номер порядковый номер время время выдачи сообщения в формате чч:мм:сс время_от_загрузки время выдачи сообщения в тактах часов от последней загрузки системы уровень уровень приоритета флаги T: сообщение послано процессу трассировки
F: фатальная ошибка
N: послано письмо системному администратору ид_модуля идентификатор модуля источника ид_устр-ва идентификатор устройства источника текст текст сообщения

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

Будучи запущенной, утилита strerr выполняется до тех пор, пока ее не терминирует пользователь. Обычно strerr выполняется асинхронно.

ОГРАНИЧЕНИЯ

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

ФАЙЛЫ

/usr/adm/streams/error.мм-дд

СМ. ТАКЖЕ

.



STRING(3C)


НАЗВАНИЕ

string: strcat, strncat, strdup, strcmp, strncmp, strcpy, strncpy, strlen, strchr, strrchr, strpbrk, strspn, strcspn, strtok - операции с цепочками символов

СИНТАКСИС

#include <string.h>

#include <sys/types.h>

char *strcat (s1, s2) char *s1, *s2;

char *strncat (s1, s2, n) char *s1, *s2; size_t n;

char *strdup (s1) char *s1;

int strcmp (s1, s2) char *s1, *s2;

int strncmp (s1, s2, n) char *s1, *s2; size_t n;

char *strcpy (s1, s2) char *s1, *s2;

char *strncpy (s1, s2, n) char *s1, *s2; size_t n;

int strlen (s) char *s;

char *strchr (s, c) char *s; int c;

char *strrchr (s, c) char *s; int c;

char *strpbrk (s1, s2) char *s1, *s2;

int strspn (s1, s2) char *s1, *s2;

int strcspn (s1, s2) char *s1, *s2;

char *strtok (s1, s2) char *s1, *s2;

ОПИСАНИЕ

Аргументы s1, s2 и s представляют собой указатели на цепочки символов, завершающиеся нулевым байтом. Ниже для краткости вместо выражения "цепочка, указателем на которую служит s1" употребляется выражение "цепочка s1" или просто "s1".

Каждая из функций strcat, strncat, strcpy и strncpy изменяет цепочку s1. Эти функции не осуществляют проверку переполнения массива, на который указывает s1.

Функция strcat подцепляет копию цепочки s2 к концу цепочки s1. Функция strncat подцепляет не более n символов. Каждая из них возвращает указатель на результат, завершающийся нулевым байтом.

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

Функция strcmp сравнивает свои аргументы и возвращает целое число, меньшее нуля, равное ему или большее него в соответствии с тем, предшествует ли цепочка s1 лексикографически цепочке s2, совпадает с ней, или следует за ней. Функция strncmp осуществляет такое же сравнение, но принимает во внимание не более n первых символов.

Функция strcpy осуществляет копирование цепочки s2 в s1, прекращая его сразу после того, как скопирован нулевой байт. Функция strncpy осуществляет копирование в точности n символов, при необходимости усекая s2 или добавляя нулевые байты в s1. Результат не будет завершаться нулевым байтом, если s2 имеет длину n или более. Обе функции возвращают указатель s1.

Функция strlen возвращает число символов, содержащихся в цепочке s, не считая завершающего нулевого байта.

Функция strchr (strrchr) возвращает значение указателя на первое (последнее) вхождение символа c в цепочку s, либо значение NULL, если цепочка этого символа не содержит. Завершающий нулевой байт цепочки рассматривается при этом как ее составная часть.

Функция strpbrk возвращает значение указателя на первое вхождение в цепочку s1 какого-либо символа из цепочки s2, либо значение NULL, если цепочка s1 не содержит символов из цепочки s2.

Функция strspn (strcspn) возвращает длину начального фрагмента цепочки s1, состоящего из символов, которые содержатся (не содержатся) в цепочке s2.

Функция strtok рассматривает цепочку s1, как состоящую из некоторого (быть может, нулевого) числа лексем, отделенных друг от друга одним или несколькими символами из набора разделителей s2. При первом вызове (с заданным s1) возвращается указатель на первый символ первой лексемы, а в цепочку s1 сразу, вслед за найденной лексемой, записывается нулевой байт. Функция отслеживает его положение в цепочке от вызова к вызову, так что последующие вызовы (при которых значение первого аргумента должно задаваться как NULL) будут работать с фрагментом цепочки s1, непосредственно следующим за этой лексемой. Таким образом, за несколько вызовов цепочка s1 будет просмотрена и все лексемы исчерпаны. Цепочка разделителей s2 может меняться от вызова к вызову. По исчерпании лексем функцией strtok будет возвращено значение NULL.

Для удобства пользователя все эти функции описаны во включаемом файле <string.h>.

СМ. ТАКЖЕ

, .

ОГРАНИЧЕНИЯ

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

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



STRIP(1)


НАЗВАНИЕ

strip - удаление из объектного файла таблицы имен и информации о номерах строк

СИНТАКСИС

strip [-l] [-x] [-b] [-r] [-V] файл ...

ОПИСАНИЕ

Команда strip удаляет из объектных файлов (в том числе и архивов) таблицу имен и информацию о номерах строк. После выполнения команды strip указанный файл не допускает символьной отладки; данная команда предназначается в первую очередь для отлаженных модулей.

Количеством информации, удаляемой из файла, можно управлять с помощью следующих опций:

-l Удалить только информацию о номерах строк; не удалять никакой информации из таблицы имен. -x Не удалять информацию о статических и внешних объектах. -b То же, что и -x, но также не удаляется информация об областях видимости (например, начало и конец блоков). -r Не удалять информацию о статических и внешних объектах, а также информацию о настройке ссылок. -V Вывести в стандартный протокол версию команды strip.

Если опция -r не указана, а в объектном файле есть настраиваемые ссылки и надо удалить какую-либо информацию из таблицы имен, strip сообщит о невозможности выполнения задания и завершит работу.

При выполнении команды strip над архивом [см. ], таблица имен архива удаляется. Эта таблица должна быть восстановлена с помощью команды ar -s, прежде чем архив можно будет использовать для редактирования связей командой . При возникновении данной ситуации команда выдает предупреждение.

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

ФАЙЛЫ

TMPDIR/strp* Временные файлы.

Обычно каталог TMPDIR - это /usr/tmp, однако данное соглашение можно изменить, присвоив переменной окружения TMPDIR другое значение [см. tempnam( ) в ].

СМ. ТАКЖЕ

, , , .

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

ДИАГНОСТИКА

strip: файл: cannot open

Файл не удается открыть.

strip: файл: bad magic

Файл не является объектным файлом обычного формата.

strip: файл: relocation entries present; cannot strip

Файл содержит настраиваемые ссылки и делается попытка удалить информацию из таблицы имен, не указав опцию -r.



STRTOD(3C)


НАЗВАНИЕ

strtod, atof - преобразование цепочки символов в вещественное число двойной точности

СИНТАКСИС

double strtod (str, ptr) char *str, **ptr;

double atof (str) char *str;

ОПИСАНИЕ

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

Функция strtod распознает: последовательность пробельных символов [см. макрос isspace в ], знак числа, цепочку цифр, содержащую необязательную точку, и порядок, состоящий из символа e или E, необязательного знака порядка или пробела, и целого числа. Часть перечисленных компонентов может отсутствовать.

Если аргумент ptr не равен (char **) NULL, то в слове, на которое он ссылается, возвращается указатель на символ, вызвавший завершение просмотра. Если число сформировать не удается, то *ptr устанавливается равным str, и в качестве результата возвращается ноль.

Atof (str) эквивалентно strtod (str, (char **) NULL).

СМ. ТАКЖЕ

, , .

ДИАГНОСТИКА

Если преобразованное число переполняет разрядную сетку, то возвращается, в зависимости от знака числа, значение +HUGE или -HUGE [см. ], а переменной errno присваивается значение ERANGE. В случае исчезновения порядка возвращается ноль и errno присваивается значение ERANGE.



STRTOL(3C)


НАЗВАНИЕ

strtol, atol, atoi - преобразование цепочки символов в целое число

СИНТАКСИС

long strtol (str, ptr, base) char *str, **ptr; int base;

long atol (str) char *str;

int atoi (str) char *str;

ОПИСАНИЕ

Результатом функции strtol является целое число типа long, заданное цепочкой символов, на которую указывает аргумент str. Цепочка просматривается до первого символа, несовместимого с выбранной системой счисления. Начальные пробельные символы [см. макрос isspace в ] игнорируются.

Если аргумент ptr не равен (char **) NULL, то в слове, на которое он ссылается, возвращается указатель на символ, вызвавший завершение просмотра. Если число сформировать не удается, то *ptr устанавливается равным str и в качестве результата возвращается ноль.

Если аргумент base положителен (и не превосходит 36), то он рассматривается как основание системы счисления. После необязательного знака могут следовать незначащие нули, которые игнорируются, а если основание равно 16, то игнорируются комбинации символов 0x и 0X.

Если аргумент base равен нулю, то основание определяется по составу символов цепочки: если после необязательного знака находится символ 0, то число считается восьмеричным, если 0x или 0X - то шестнадцатеричным, если любая другая цифра - десятичным.

Atol (str) эквивалентно strtol (str, (char **) NULL, 10).

Atoi (str) эквивалентно (int) strtol (str, (char **) NULL, 10).

СМ. ТАКЖЕ

, , .

СЮРПРИЗЫ

Переполнение игнорируется.



STTY(1)


НАЗВАНИЕ

stty - установка характеристик терминала

СИНТАКСИС

stty [-a] [-g] [характеристика ...]

ОПИСАНИЕ

Команда stty устанавливает определенные характеристики терминального ввода/вывода для устройства, являющегося стандартным вводом; команда без аргументов выдает некоторые из установленных характеристик. При этом знак ^ обозначает управляющий символ (^c - это то же самое, что CTRL+C), а сочетание ^` соответствует пустому значению. Например, обычно команда stty сообщает, что значение swtch равно ^`, однако если вызвать , то stty выдаст значение ^z.

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

-a Выдать значение всех установленных характеристик. -g Выдать текущие установки в формате, который может быть использован в качестве аргумента другой команды stty.

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

Управляющие характеристики

parenb (-parenb) Разрешить (запретить) контроль по четности.

parodd (-parodd) Установить режим проверки на нечетность (четность).

cs5 cs6 cs7 cs8 Установить размер символа [см. ].

0 Немедленное освобождение телефонной линии.

110 300 600 1200 1800 2400 4800 9600 19200 38400

Установить указанную скорость передачи, если это возможно. (Не все аппаратные интерфейсы поддерживают все скорости передачи.)

hupcl (-hupcl) Освобождать (не освобождать) линию Dataphone при закрытии линии последним процессом, открывавшим ее.

hup (-hup) То же самое, что и hupcl (-hupcl).

cstopb (-cstopb) Использовать два (один) стоп-бита на символ.

cread (-cread) Разрешить (запретить) прием символов.

clocal (-clocal) Предполагать, что линия без (с) модемного управления.

loblk (-loblk) Блокировать (не блокировать) вывод экземпляра shell'а, не являющегося текущим.

Характеристики ввода

ignbrk (-ignbrk) Игнорировать (не игнорировать) прерывание при вводе.

brkint (-brkint) При прерывании выдавать (не выдавать) сигнал SIGINT (2).

ignpar (-ignpar) Игнорировать (не игнорировать) ошибки четности.

parmrk (-parmrk) Отмечать (не отмечать) ошибки четности [см. ].

inpck (-inpck) Разрешить (запретить) контроль четности ввода.

istrip (-istrip) Обрезать (не обрезать) вводимые символы до семи бит.

inlcr (-inlcr) Преобразовывать (не преобразовывать) при вводе перевод_строки в возврат_каретки.

igncr (-igncr) Игнорировать (не игнорировать) при вводе символ возврат_каретки.

icrnl (-icrnl) Преобразовывать (не преобразовывать) при вводе возврат_каретки в перевод_строки.

iuclc (-iuclc) Преобразовывать (не преобразовывать) при вводе большие буквы в малые.

ixon (-ixon) Разрешить (запретить) управление выводом в режиме СТАРТ/СТОП. Вывод приостанавливается с помощью посылки символа ASCII DC3 (^S) и продолжается после посылки символа ASCII DC1 (^Q).

ixany (-ixany) Разрешить любому символу (только DC1) вызывать продолжение вывода.

ixoff (-ixoff) Требование, чтобы система посылала (не посылала) символы СТАРТ/СТОП в ситуации, когда очередь вводимых символов почти пуста/заполнена.


Характеристики вывода

opost (-opost) Постпроцессировать вывод ( не постпроцессировать вывод; игнорировать все остальные характеристики вывода).

olcuc (-olcuc) Преобразовывать (не преобразовывать) при выводе малые буквы в большие.

onlcr (-onlcr) Преобразовывать (не преобразовывать) при выводе перевод_строки в возврат_каретки.

ocrnl (-ocrnl) Преобразовывать (не преобразовывать) при выводе возврат_каретки в перевод_строки.

onocr (-onocr) Не выводить (выводить) символы возврат_каретки, если текущая колонка 0.

onlret (-onlret) На терминале символ перевод_строки выполняет (не выполняет) функции возврата_каретки.

ofill (-ofill) Использовать для задержки заполняющие символы - задержка осуществляется с помощью посылки таких символов (использовать временную задержку).

ofdel (-ofdel) Заполняющими символами являются символы DEL (NUL).

cr0 cr1 cr2 cr3 Выбрать тип задержки для возвратов каретки [см. ].

nl0 nl1 Выбрать тип задержки для переходов к новой строке [см. ].

tab0 tab1 tab2 tab3

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

bs0 bs1 Выбрать тип задержки для символов возврата на шаг [см. ].

ff0 ff1 Выбрать тип задержки для символов перехода к новой странице [см. ].

vt0 vt1 Выбрать тип задержки для вертикальной табуляции [см. ].

Локальные характеристики

isig (-isig) Разрешить (запретить) проверку символов на соответствие специальным управляющим символам intr, quit, swtch.

icanon (-icanon) Разрешить (запретить) канонический ввод (обработку символов erase и kill).

xcase (-xcase) Каноническое (необрабатываемое) представление верхних/нижних символов.

echo (-echo) Отображать (не отображать) каждый вводимый символ.

echoe (-echoe) Отображать (не отображать) символ erase как последовательность возврат_на_шаг-пробел-возврат_на_шаг. Заметим, что в данном режиме на многих типах терминалов с ЭЛТ забой символа выполнится правильно; однако, так как номер колонки не отслеживается, то для управляющих последовательностей, табуляций и возвратов на шаг обработка символа erase может быть выполнена неправильно.

echok (-echok) Выводить (не выводить) перевод_строки после символа kill.

lfkc (-lfkc) То же самое, что и echok (-echok); данная опция вышла из употребления.

echonl (-echonl) Отображать (не отображать) перевод_строки.

noflsh (-noflsh) Запретить (разрешить) сброс после символов intr, quit или swtch.

stwrap (-stwrap) Запретить (разрешить) в синхронной линии обрезание строк с длиной, большей 79 символов.

stflush (-stflush) Разрешить (запретить) сброс в синх ронной линии после каждого вызова .

stappl (-stappl) Использовать в синхронной линии прикладной режим (использовать линейный режим).



Назначение управляющих символов

управляющий_символ c

В качестве управляющего_символа (erase, kill, intr, quit, swtch, eof, ctab, min, time) использовать c. Символ ctab используется с -stappl; min и time используются вместе с -icanon [см. ]. Если перед c стоит знак ^ (экранированный от интерпретации shell'ом), то используется соответствующий CTRL-символ. Сочетание ^? интерпретируется как символ DEL, а ^- - как неопределенный символ.

line число Установить порядок передачи информации по линии связи равным числу (0 < число < 127).

Комбинации характеристик

evenp или parity Разрешить parenb и cs7.

oddp Разрешить parenb, cs7 и parodd.

-parity, -evenp или -oddp Запретить parenb и установить cs8.

raw (-raw или cooked)

Разрешить (запретить) необрабатываемый ввод и вывод (без erase, kill, intr, quit, swtch, eot и постпроцессирования вывода).

nl (-nl) Сбросить (установить) icrnl, onlcr. Кроме того, -nl сбрасывает inlcr, igncr, ocrnl и onlret.

lcase (-lcase) Установить (сбросить) xcase, iuclc и olcuc.

LCASE (-LCASE) То же самое, что и lcase (-lcase).

tabs (-tabs или tab3) Сохранить при выдаче (представить пробелами) символы табуляций.

ek Вернуть символам erase и kill подразумеваемые значения # и @.

sane Присвоить всем характеристикам некоторые разумные значения.

тип_терминала Установить все режимы соответственно типу_терминала, который может принимать одно из следующих значений: tty33, tty37, vt05, tn300, ti700 или tek.

СМ. ТАКЖЕ

.

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

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









SU(1)


ИМЯ

su - присваивает пользователю статус привилегированного пользователя или имя другого пользователя.

СИНТАКСИС

su [-] [name [arg...]]

ОПИСАНИЕ

Команда su позволяет вам становиться другим пользователем без логического отключения. По умолчанию имя пользователя name root (т.е. привилегированный пользователь).

Для того, чтобы использовать su, необходимо ввести соответствующий пароль (до этого пароль - root). Если пароль правильный, su выполнит новый shell с истинным и действительным идентификатором пользователя, с истинным и действительным идентификатором группы пользователей. Новый shell будет необязательной программой с именем, указанным в поле shell (поле shell является частью компонента специфицированного файла пользовательских паролей), или с именем /bin/sh, если имя не задано. Для возврата к обычным привилегиям идентификатора пользователя наберите EOF (Ctrl-D) в новом shell.

Любые дополнительные аргументы, задаваемые в командной строке, поступают в программу, вызванную как shell. Когда используются программы подобно , аргумент arg вида -c string обрабатывает значение string через shell, а аргумент вида -r предоставляет пользователю ограниченный shell.

Текущие предложения справедливы только тогда, когда необязательная программа с именем, указанным в поле shell компонента файла пользовательских паролей, идеинтична команде . Если первый аргумент команды su '-', то конфигурация системы будет изменена и приведена в ожидаемое состояние, если пользователь действительно зарегистрирован как определенный пользователь. Это сделано путем вызова программы, используемой как shell, со значением arg0, у которого первый знак '-', вызывая, тем самым, выполнение сначала системных параметров (/etc/profile), а затем указанных пользовательских параметров (.profile в новой директории HOME). В противном случае, конфигурация остается неизменной, кроме значения $PATH, которое безусловно устанавливается как /bin:/etc:/usr/bin для имени пользователя root. Необходимо заметить, что если необязательная программа, используемая как shell, имеет имя /bin/sh, то пользовательский .profile может проверить аргумент arg0 на наличие -sh или -su, чтобы обнаружить, вызывалась ли данная программа командами login(5) или , соответственно. Если пользовательская программа отлична от /bin/sh, то пользовательский .profile вызывается с аргументом arg0, равным -program, и командой login(5), и командой .

Файл /etc/default/su может быть использован для управления ходом выполнения команды su. В этом файле может быть размещено несколько флагов:


SULOG Имя файла журнала регистрации для учета всех попыток использования команды su. Обычно это файл /usr/adm/sulog. Если флаг не установлен, то файл журнала не заводится (смотрите пример ниже).

PATH Переменная среды PATH для установки пользователей, находящихся в не-корневом каталоге. Если данный флаг не установлен, то по умолчанию принимается значение ":/bin:/usr/bin". Текущая переменная среды PATH игнорируется.

SUPATH При активизации из корневого каталога путь по умолчанию принимает значение "/bin:/usr/bin:/etc" до тех пор, пока переменная не определена.Текущее значение PATH игнорируется.

CONSOLE Попытки использовать команду su регистрируются на устройстве device независимо от SULOG.

Например, если вы хотите отслеживать все попытки полььзователей разместиться в корневом каталоге, создайте файл /etc/default/su. В этом файле разместите строку следующего вида: SULOG = /usr/adm/sulog. Это позволит записывать в файл /usr/adm/sulog все попытки пользователей изменять свои пользовательские идентификаторы. Имя файла может быть произвольным. журнал su записывает начальное имя пользователя, универсальный идентификатор попытки выполнить команду su и время попытки. Если попытка закончилась успешно, в соответствующей ей строке ставится знак (+), иначе - знак (-).

ПРИМЕРЫ

Чтобы стать пользователем bin, сохранив при этом вашу, предварительно установленную, конфигурацию, наберите:

su bin

Чтобы стать пользователем bin и изменить при этом конфигурацию на ту, которая была бы установлена, если бы bin был до этого подключен,наберите:

su -bin

Для выполнения команды command с временной конфигурацией и правами пользователя bin наберите:

su -bin -c "command args"

ФАЙЛЫ

$HOME/.profile пользовательские параметры /etc/logingroup системный файл порядка группового доступа по умолчанию. /etc/passswd системный файл паролей. /etc/profile системные параметры /usr/adm/sulog журнал всех попыток.

СМ. ТАКЖЕ

, login(5), , passwd(3), profile(5), .









SUM(1)


НАЗВАНИЕ

sum - подсчет контрольной суммы и количества блоков в файле

СИНТАКСИС

sum [-r] файл

ОПИСАНИЕ

Команда sum вычисляет и выводит 16-битную контрольную сумму для указанного файла; кроме того, выдается количество блоков в файле. Команда, как правило, используется для обнаружения повреждений или для проверки правильности передачи файла по линии связи. Если указана опция -r, то для вычисления контрольной суммы используется альтернативный алгоритм.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

На большинстве устройств ошибка чтения воспринимается как конец файла; проверьте количество блоков.



SVS(1)


НАЗВАНИЕ

svs - запуск системы SVS FORTRAN

СИНТАКСИС

/util/svs [+a] [-a] [+b] [-b] [+c72] [+charequ] [+d] [-d] [+dc] [-dc] [ [+eфайл] [+f] [-f] [+int2] [+iфайл] [+log2] [+lфайл] [+p] [-p] [+q] [+x] файл ...

ОПИСАНИЕ

/util/svs является shell-процедурой для запуска системы SVS FORTRAN.

Входной язык системы SVS FORTRAN является стандартным Фортраном-77. Компиляция SVS-программ обычно проходит в четыре фазы: получение промежуточного кода, получение объектного кода SVS, получение объектного файла обычного формата, получение выполняемой программы. Для получения выполняемой программы необходимо, чтобы были доступны библиотеки libSVSf.a и libSVSp.a.

Файлы с исходными текстами должны иметь расширение .for. Файл с промежуточным кодом имеет расширение .i (см. ниже опцию -i).

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

$argcheck, $noargcheck

Трактовать несоответствие формальных и фактических параметров как фатальную ошибку или как предупреждение. Если задана опция +a (только ANSI), то независимо от указаний компилятору несоответствие параметров рассматривается как ошибка.

$binary, $notbinary

Директива позволяет программам, использующим ныне устаревшие "чистые" бесформатные файлы, работать под более новыми версиями системы. Если перед оператором OPEN указана директива $binary, то файл типа UNFORMATTED трактуется как файл типа BINARY. При указании $notbinary UNFORMATTED трактуется как тип файла в соответствии со стандартом ANSI, но файл будет содержать управляющие последовательности и символы конца записи.

$charequ

Разрешить связывать отношением EQUIVALENCE переменные числовых и символьных типов.

$col72

Обрезать входные строки до 72 символов. По умолчанию строки обрезаются до 120 символов. Кроме того, действует ограничение на суммарное количество символов в операторе - 1360, что соответствует 20 строкам по 66 символов.

$debug

Включить/выключить генерацию таблицы для отладчика SVS.

$f66do


При указании этой опции DO- циклы всегда выполняются по крайней мере один раз.

$float, $nofloat

Генерировать код для сопроцессора арифметики вещественных чисел или для эмулятора. См. также опции командной строки +f и -f.

$include файл

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

$int2 По умолчанию считать тип INTEGER совпадающим с INTEGER*2, тип LOGICAL - с LOGICAL*1.

$log2 По умолчанию считать тип LOGICAL совпадающим с LOGICAL*2.

$system

В идентификаторах разрешается использовать символы _ и %.

$xref Генерировать таблицу перекрестных ссылок.

В командной строке допускаются следующие опции:

+a -a Рассматривать использование несоответствующих стандарту ANSI возможностей как ошибку (+a) или нет (-a). По умолчанию используется -a. Установка +a вызывает автоматическую установку флага -c72, ограничивающего длину строки до 72 символов. При указании флага +a компилятор позволяет все же указывать директивы $include, $xref, $col72, $float, $nofloat, $debug, $nodebug и $notbinary. При этом недопустимы директивы $system, $f66do, $int2, $charequ и $binary.

+b -b Управление интерпретацией типа файла UNFORMATTED в операторе OPEN. По умолчанию полагается опция -b, соответствующая директиве $notbinary, при указании которой тип файла не является "чистым" бесформатным, а соответствует стандарту ANSI.

+c72 Обрезать входные строки до 72 символов.

+charequ

Разрешить связывать отношением EQUIVALENCE переменные числовых и символьных типов.

+d -d Генерировать (+d) или нет (-d) таблицу для SVS отладчика.

+dc -dc

Условная компиляция строк, содержащих в первой позиции символ D или d.

+e -e Стандартные соглашения системы SVS FORTRAN таковы, что параметры подпрограмм и функций забираются со стека вызванной подпрограммой (функцией), перед возвратом. В то же время соглашения C-компилятора иные: параметры забирает со стека вызывающая функция. Опция -e заставляет SVS-компилятор придерживаться соглашений, принятых в реализации языка C. Если нужно вызывать из Фортран-программы C-функции, следует употребить опцию -e, что и делается при компиляции средствами редактора РК. Отметим, что если имя подпрограммы или функции начинается с символа %, она будет скомпилирована по стандартным соглашениям SVS FORTRAN.

+eфайл



Вывести все сообщения об ошибках компиляции в файл.

+f -fГенерировать код для сопроцессора арифметики вещественных чисел (+f) или для эмулятора (-f).

+int2 По умолчанию считать описание INTEGER эквивалентным INTEGER*2, а LOGICAL - LOGICAL*1.

+iфайл

Назвать .i-файл именем файл.

+log2 По умолчанию считать описание LOGICAL эквивалентным LOGICAL*2.

+lфайл

Сгенерировать листинг и поместить его в файл.

+p -p Выводить (+p) или не выводить (-p) запрос при обнаружении ошибок. При компиляции средствами редактора РК используется опция -p.

+q -q Выводить больше (-q) или меньше (+q) информации о работе компилятора. По умолчанию -q.

+x Генерировать таблицу перекрестных ссылок.

ФАЙЛЫ

/usr/lib/libSVSf.a /usr/lib/libSVSp.a Библиотеки времени выполнения. /usr/bin/fortran Компилятор. /usr/bin/jcode Генератор объектного кода SVS. /usr/bin/jlinker Генератор объектных файлов обычного формата. /usr/lib/ftncterrs Перечень ошибок времени компиляции. /usr/lib/ftnrterrs Перечень ошибок времени выполнения.

СМ. ТАКЖЕ

, .

ДИАГНОСТИКА

Система SVS FORTRAN содержит файл сообщений об ошибках компиляции, а также файл сообщений об ошибках времени выполнения. Компилятор выдает номера ошибок и сообщения о них.









SWAB(3C)


НАЗВАНИЕ

swab - перестановка байт

СИНТАКСИС

void swab (from, to, nbytes) char *from, *to; int nbytes;

ОПИСАНИЕ

Функция swab копирует nbytes байт из массива, на который указывает from, в массив, на который указывает to, меняя местами смежные четный и нечетный байты. Аргумент nbytes должен быть четным и неотрицательным. Если этот аргумент нечетный и положительный, копируется nbytes-1 байт. Если он отрицателен, ничего не копируется.



SWAP(1M)


НАЗВАНИЕ

swap - управление областями подкачки

СИНТАКСИС

/etc/swap [-a устройство начальный_блок длина] [-d устройство начальный_блок] [-l]

ОПИСАНИЕ

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

-a устройство начальный_блок длина

Добавить область подкачки. Устройство должно быть блочным, например /dev/dsk/hd0s2. Начальный_блок и длина задают расположение области подкачки на устройстве. Длина задается в блоках, размер блока считается равным 1Кбайт. Данную опцию может применять только суперпользователь. Обычно области подкачки добавляются при переходе в многопользовательский режим.

-d устройство начальный_блок

Удалить указанную область подкачки. Смысл аргументов устройство и начальный_блок тот же, что и в случае опции -a. Область подкачки отмечается флагом INDEL (как находящаяся в процессе удаления). Система не занимает новых блоков в этой области и пытается освободить занятые. Область продолжает использоваться, пока в ней есть занятые блоки. Данную опцию может применять только суперпользователь. -l Выдать состояние всех областей подкачки. Данные выводятся в 5 колонок:


Path - маршрутное имя специального файла-устройства, содержащего область подкачки.
Dev - Старший и младший номера устройства.
Low - начальный блок области подкачки на устройстве. Размер блока считается равным 1Кбайт.
Len - длина области подкачки в блоках.
Free - число свободных блоков в области подкачки.

ФАЙЛЫ

/etc/swapon Начальное определение области подкачки.

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

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



SWAPADD(2)XENIX System V (21 июня 1987)


НАЗВАНИЕ

swapadd - yкaзывaeт дoпoлнитeльныe ycтpoйcтвa для cтpaничнoй opгaнизaции пaмяти и cвoпингa

ОПИСАНИЕ

Дaннaя кoмaндa мoжeт быть выпoлнeнa тoлькo в XENIX-386. Для пoдpoбнoй инфopмaции пo этoй кoмaндe cмoтpи XENIX-386 Release Notes (Ocoбeннocти peaлизaции).



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


НАЗВАНИЕ

swapctl - Oпpeдeлeниe ycтpoйcтв для cтpaничнoй пoдкaчки и cвoпингa.

ОПИСАНИЕ

Этa кoмaндa дeйcтвитeльнa тoлькo в XENIX-386. Ecли y вac XENIX-386, cм. Release Notes, гдe пpeдcтaвлeнa пoлнaя инфopмaция пo этoмy вoпpocy.



SXT(7)


НАЗВАНИЕ

sxt - драйвер виртуального терминала

ОПИСАНИЕ

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

Виртуальным терминалам соответствуют файлы в каталоге /dev/sxt, которые образуют группы по 8. Чтобы начать работу с группой, программа должна открыть файл вида /dev/sxt/??0 (так называемый канал 0) с флагом O_EXCL, после чего выполнить команду SXTIOCLINK системного вызова для начала мультиплексирования.

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

Драйвер sxt поддерживает две группы команд системного вызова . Первая группа включает все стандартные команды ioctl, описанные в , со следующим добавлением:

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

Вторая группа включает команды для самого драйвера sxt. Некоторые из них могут выполняться только для канала 0.

SXTIOCLINK Создать группу каналов и начать мультиплексированное отображение виртуальных терминалов на реальный. Аргументом является количество создаваемых каналов. Эту команду можно выполнить только на канале 0. Возможны следующие ошибки:

[EINVAL] Значение аргумента некорректно. [ENOTTY] Команда выдана не с реального терминала. [ENXIO] В системе нет драйвера sxt. [EBUSY] Команда SXTIOCLINK уже была выдана для данного реального терминала. [ENOMEM] Не хватает памяти для структур виртуальных терминалов. [EBADF] Канал 0 не был предварительно открыт.

SXTIOCSWTCH Установить "управляющий" канал. Возможны следующие ошибки:


[EINVAL] Некорректный номер канала. [EPERM] Команду можно выполнить только на канале 0.

SXTIOCWF Заставить канал ожидать, пока он не станет "управляющим". Эта команда возвращает ошибку EINVAL, если указан некорректный номер канала. SXTIOCUBLK Сбросить флаг loblk для указанного канала. Эта команда возвращает ошибку EINVAL, если указан некорректный номер канала или канал 0. SXTIOCSTAT Выдать состояние (блокирован на вводе или на выводе) каждого канала, записав его в структуру типа struct sxtblock, адрес которой передан в качестве аргумента (тип struct sxtblock описан в файле <sys/sxt.h>). Если в структуру записать не удалось, выдается ошибка EFAULT. SXTIOCTRACE Включить трассировку. Трассировочная информация выдается на системную консоль. Если при конфигурировании системы возможность трассировки не предусмотрена, команда игнорируется. SXTIOCNOTRACE Выключить трассировку. Если при конфигурировании системы возможность трассировки не предусмотрена, команда игнорируется.

ФАЙЛЫ

/dev/sxt/??[0-7] Виртуальные терминалы.

СМ. ТАКЖЕ

.

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

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









SYMS(4)


НАЗВАНИЕ

syms - формат таблицы имен в обычном об ектном файле

СИНТАКСИС

#include <syms.h>

ОПИСАНИЕ

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

Имя первого файла.

Имя первой функции.

Локальные имена из первой функции.

Имя второй функции.

Локальные имена из второй функции. ...

Имена, локальные в первом файле (описанные вне функций как static).

Имя второго файла.

Имя первой функции.

Локальные имена из первой функции.

Имя второй функции.

Локальные имена из второй функции. ...

Имена, локальные во втором файле. ...

Определенные глобальные имена. Неопределенные глобальные имена.

Таблица имен состоит из элементов фиксированной длины (18 байт). Элемент, описывающий имя, кроме собственно текста имени, дополненного нулями, содержит его значение и другую информацию. Ниже приведена соответствующая C-структура:

#define SYMNMLEN 8 /* Максимальное количество символов в тексте имени */ #define FILNMLEN 14 /* Максимальное количество символов в имени файла */ #define DIMNUM 4 /* Размерность массива во вспомогательном разделе */

struct syment { union { /* Все способы описать текст имени */ char _n_name[SYMNMLEN]; /* Текст имени */ struct { long _n_zeroes; /* Если == 0, то в таблице цепочек */ long _n_offset; /* Смещение в табл. цепочек */ } _n_n; char *_n_nptr[2]; } _n; long n_value; /* Значение имени */ short n_scnum; /* Номер секции */ unsigned short n_type; /* Тип и производный тип */ char n_sclass; /* Класс памяти */ char n_numaux; /* Число вспомогательных элементов */ };

#define n_name _n._n_name #define n_zeroes _n._n_n._n_zeroes #define n_offset _n._n_n._n_offset #define n_nptr _n._n_nptr[1]

Смысл значений имен пояснен во включаемом файле <syms.h>. Для описания некоторых имен требуется больше информации, чем содержится в одном элементе; в таком случае за первым элементом, описывающим имя, следуют вспомогательные элементы. Вспомогательные элементы имеют тот же размер, что и основные; их формат приведен ниже:


union auxent { struct { long x_tagndx; /* Индекс описателя структуры, об единения или перечисления */ union { struct { unsigned short x_lnno; /* Номер строки определения */ unsigned short x_size; /* Размер массива, структуры или об единения */ } x_lnsz; long x_fsize; /* Размер функции */ } x_misc; union { struct { long x_lnnoptr; long x_endndx; } x_fcn; struct { /* Если массив, то его размерности (до 4) */ unsigned short x_dimen [DIMNUM]; } x_ary; } x_fcnary; unsigned short x_tvndx; } x_sym; struct { char x_fname [FILNMLEN]; /* Имя файла (занимает весь элемент) */ } x_file; struct { long x_scnlen; /* Длина секции */ unsigned short x_nreloc; /* Число элем. с инф. о настройке ссылок */ unsigned short x_nlinno; /* Число элем. с инф. о номерах строк */ } x_scn; struct { long x_tvfill; unsigned short x_tvlen; unsigned short x_tvran[2]; } x_tv; };

Элементы таблицы имен нумеруются, начиная с 0.

СМ. ТАКЖЕ

a.out(4), .

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

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

На компьютерах, у которых тип int эквивалентен типу long, вместо long в таблице имен указывается int. Таким образом, в таблице отсутствует информация о том, как на самом деле описано имя: как int или как long.









SYNC(1M)


НАЗВАНИЕ

sync - обновление суперблока на диске

СИНТАКСИС

sync

ОПИСАНИЕ

Команда sync выполняет системный вызов sync. При завершении работы системы команда sync обязательно должна быть выполнена, чтобы обеспечить целостность файловой системы. Sync вытолкнет все системные буфера, что гарантирует реальное выполнение изменений файлов. Более детальное описание см. в .

СМ. ТАКЖЕ

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



SYNC(2)


НАЗВАНИЕ

sync - обновление суперблока

СИНТАКСИС

void sync ( )

ОПИСАНИЕ

Системный вызов sync приводит к записи на диск всей буферизованной информации. При этом модифицируется суперблок, описатели файлов, буферизованные блоки ввода/ вывода.

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

Запись, хотя и запланированная, не обязательно завершается полностью к моменту возвращения из системного вызова sync.


НАЗВАНИЕ

sync - обеспечивает сохранение последней версии суперблока.

СИНТАКСИС

sync

ОПИСАНИЕ

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

СМ. ТАКЖЕ



SYSADM(1M)


НАЗВАНИЕ

sysadm система меню для интерактивного выполнения функций администратора

СИНТАКСИС

sysadm [команда ...]

ОПИСАНИЕ

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

Утилита sysadm может быть снабжена паролем (см. ниже admpasswd).

Далее приводится описание всех доступных команд. Уровень меню или команды показан отступом.

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

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

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

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

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

mountfsys смонтировать файловую систему на с емном диске
Файловая система становится доступной для пользователей. Для размонтирования следует пользоваться только командой umountfsys. Нельзя снимать диск со смонтированной файловой системой.

umountfsys размонтировать файловую систему на с емном диске
После размонтирования диск можно снимать.

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

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

Файлы, сохраняемые по команде backup, можно затем восстановить командой restore.

diskuse получить сведения о заполнении дисков
Команда diskuse выдает сведения о заполненности смонтированных дисковых устройств. Каждая строка вывода соответствует одной файловой системе.

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

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

restore Восстановить файлы, сохраненные командами backup или store
Команда restore позволяет восстановить с диска или ленты файлы, сохраненные командами backup или store. Можно восстановить отдельные файлы, каталоги файлов или все содержимое дисков или лент, причем как с полных, так и с добавочных копий. Кроме того, можно получить список файлов, сохраненных на диске или на ленте.

store сохранить файлы или каталоги файлов на с емном диске или ленте
Команда store копирует файлы с основной файловой системы на диск или ленту и позволяет проверять качество копии и затем при желании удалить оригиналы. Обычно удаляются файлы, которые пользователь желает поместить в архив, или к которым он хочет ограничить доступ. Можно сохранять как отдельные файлы, так и целые каталоги. Для восстановления файлов и просмотра имен сохраненных файлов следует использовать команду restore.

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

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

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

whoson вывести список активных пользователей
Команда whoson выводит входные имена, номера терминалов и время входа в систему всех пользователей, которые в данный момент пользуются компьютером.

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

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

installpkg установить новую программную систему
Команда install копирует файлы со с емного диска в основную файловую систему и выполняет необходимую дополнительную работу, чтобы программная система могла выполняться.

listpkg вывести список установленных программных систем

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

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

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

admpasswd задать или изменить пароли администраторов
Команда admpasswd позволяет установить или изменить пароли для административных команд и пользователей-администраторов, таких как sysadm.

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

nodename установить сетевое имя системы
Сетевое имя используется различными коммуникационными утилитами для идентификации данной машины.

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

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

ttymgmt меню обслуживания терминала

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

mklineset создать новую строку с характеристиками терминальной линии или изменить последовательность поиска

modtty показать и, возможно, изменить характеристики терминальной линии

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

addgroup зарегистрировать в системе новую группу
Команда addgroup регистрирует новое имя группы или ее идентификатор.

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

delgroup удалить группу из системы Удаляемая группа теряет свое имя, однако идентификатор группы остается.

deluser удалить пользователя из системы
Команда delgroup позволяет удалить пользователя из системы. При этом не только исключается соответствующая строка из файла /etc/passwd, но и удаляются все файлы, принадлежавшие данному пользователю.

lsgroup вывести список групп, зарегистрированных в системе

lsuser вывести список пользователей, зарегистрированных в системе

modadduser изменить подразумеваемые значения, используемые командой adduser

modgroup изменить имя уже зарегистрированной группы

moduser меню команд для изменения характеристик уже зарегистрированных пользователей

chloginid изменить входное имя
Административные и системные входные имена не могут быть изменены.

chgpasswd изменить пароль пользователя
Административные и системные пароли таким способом изменить нельзя - используйте группу команд syssetup.

chgshell сменить интерпретатор комад
Команда позволяет сменить программу, которая будет запущена при входе пользователя в систему. Интерпретатор команд для администраторов и системных программистов не может быть изменен.

ФАЙЛЫ

Файлы, поддерживающие работу sysadm, находятся в каталогах /usr/admin и /usr/admin/menu.

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSADMIN(8)


НАЗВАНИЕ

sysadmin - выполняет резервное копирование файловых систем и восстановление файлов.

СИНТАКСИС

/etc/sysadmin

ОПИСАНИЕ

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

Главное меню sysadmin выглядит следующим образом:

Filesystem Maintanance Options

1. Perform a scheduled backup 2. Perform a unscheduled backup 3. List the contents of an archive 4. Restore backed up file(s) 5. Restore an entire filesystem 6. Check backup archive integrity

Enter an option or enter q to quit:_

Любой поддерживаемый архивный носитель может быть использован для создания резервных копий. Любая файловая система может быть сохранена в резервной копии. Списки этих устройств в меню подгатавливаются для каждой опции с помощью файлов /tmp/backup.list, /etc/default/archive и /etc/default/filesys.

Чтобы использовать эту программу, вы должны быть привилегированным пользователем.

ФАЙЛЫ

/tmp/backup.list /etc/default/archive /etc/default/filesys

СМ. ТАКЖЕ

, , , , , archive(3), filesys(3)

ПРИМЕЧАНИЯ

Для подключения устройств или для удаления записей более не используемых устройств файлы /tmp/backup.list, /etc/default/archive и /etc/default/filesys могут редактироваться.

ПРЕДУПРЕЖДЕНИЕ

Не следует копировать на стримеры /dev/nrct0 и /dev/nrct2 более одной файловой системы. Это связано с тем, что, хотя backup может скопировать на них больше одной файловой системы, restore будет в состоянии восстановить с этих устройств только одну файловую систему.

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

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSADMSH(8)


НАЗВАНИЕ

sysadmsh - утилита системного администрирования с управлением из меню.

СИНТАКСИС

sysadmsh

ОПИСАНИЕ

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

ПРЕДУПРЕЖДЕНИЕ: sysadmsh не заменяет документацию по системе UNIX, а лишь обеспечивает обзор доступных средств системного администрирования и напоминает о тех задачах, которые должны выполняться регулярно. Для использования sysadmsh необходимо понимание Руководства по инсталляции системы UNIX, Руководства администратора системы и Руководства пользователя.

Для использования этой утилиты введите на системную login-подсказку:

sysadm

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

Меню sysadmsh может быь вызвано другим способом посредством подключения к системе в качестве привилегированного пользователя и введения на системную login-подсказку:

sysadmsh

Находясь в среде sysadmsh, вы можете получить контекстно-ориентированную помощь, нажав клавишу <F1>.

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

СМ. ТАКЖЕ

acctcom(8), , alias(5), , , , checklist(3), , , , , , , , , , , , , , , , , , , , , , , , , fstab(3), , init(5), , login(5), , , , , mfil(1), , , , , , , , , , , , , systemid(3), , ttys(3), unmount(8), , , , , .

ПРИМЕЧАНИЯ

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

Эта утилита разработана по образцу SCO LYrix Word Processing System.

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSFS(2)


НАЗВАНИЕ

sysfs - получение информации о типе файловой системы

СИНТАКСИС

#include <sys/fstyp.h> #include <sys/fsid.h>

int sysfs (opcode, fsname) int opcode; char *fsname;

int sysfs (opcode, fs_index, buf) int opcode; int fs_index; char *buf;

int sysfs (opcode) int opcode;

ОПИСАНИЕ

Системный вызов sysfs возвращает информацию о типах файловых систем, составляющих текущую конфигурацию. Число аргументов, допускаемое системным вызовом sysfs, может изменяться и определяется значением аргумента opcode. В настоящей версии поддерживаются следующие значения opcode и соответствующие им функции:

GETFSIND Преобразование аргумента fsname, задающего идентификатор файловой системы, оканчивающийся нулевым байтом, в индекс типа файловой системы. GETFSTYP Преобразование аргумента fs_index, задающего индекс типа файловой системы, в идентификатор файловой системы, оканчивающийся нулевым байтом. Идентификатор записывается по адресу buf. Размер буфера должен быть не менее FSTYPSZ; эта константа определена в файле <sys/fstyp.h>. GETNFSTYP Получение общего числа типов файловых систем, составляющих текущую конфигурацию.

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

[EINVAL] Аргумент fsname указывает на недопустимый идентификатор файловой системы; значение fs_index недопустимо; значение opcode недопустимо. [EFAULT] Аргумент buf или fsname указывает за пределы отведенного процессу адресного пространства.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

При успешном завершении возвращается индекс типа файловой системы, если значение opcode равно GETFSIND; 0, если значение opcode равно GETFSTYP; общее число типов файловых систем, составляющих текущую конфигурацию, если значение opcode равно GETNFSTYP. В случае ошибки возвращается -1, а переменной errno присваивается код ошибки.

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSM68K(2)


НАЗВАНИЕ

sysm68k - машинно-зависимые функции

СИНТАКСИС

#include <sys/trap.h>

int sysm68k (cmd, arg1, arg2, arg3) int cmd, arg1, arg2, arg3;

ОПИСАНИЕ

Системный вызов sysm68k реализует машинно-зависимые действия. Конкретный характер действий определяется аргументом cmd. Количество и смысл остальных аргументов, в свою очередь, зависят от выполняемого действия. Ниже кратко описаны три из возможных действий. Дополнительные сведения можно получить из включаемых файлов <sys/trap.h>, <sys/swap.h> и <sys/conf.h>.

Команда S3BFPHW

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

Чтобы проверить наличие сопроцессора, необходимо сделать следующее:

#include <sys/trap.h>

int fpu_present; sysm68k (S3BFPHW, &fpu_present);

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

[EFAULT] Дополнительный аргумент не является корректным адресом целочисленной переменной (например, он оказался нечетным). [EFAULT] Дополнительный аргумент указывает за пределы отведенного процессу адресного пространства.

Команда S3BSWPI

Если значение cmd равно S3BSWPI, то может быть добавлена или удалена отдельная область подкачки. Можно также получить текущую информацию обо всех областях подкачки. В качестве дополнительного аргумента указывается адрес структуры типа swapint:

struct swapint { char si_cmd; /* Код команды (см. ниже). */ char *si_buf; /* В случае информационного запроса [код SI_LIST] это поле должно указывать на буфер размером не менее sizeof (swpt_t) * MSFILES байт. В остальных запросах это указатель на маршрутное имя файла-устройства, на котором находится или создается область подкачки. */ int si_swplo; /* Номер первого блока области подкачки. Используется только для добавления и удаления областей подкачки. */ int si_nblks; /* Размер области подкачки в блоках. Используется только в запросе добавления области подкачки. */ } /* Возможные значения si_cmd (коды команд) */ #define SI_LIST 0 /* Получить список текущих областей подкачки. */ #define SI_ADD 1 /* Добавить область подкачки. */ #define SI_DEL 2 /* Удалить одну из текущих областей подкачки. */


Описания, необходимые для использования данной разновидности системного вызова sysm68k, содержатся во включаемом файле <sys/swap.h>.

Добавление и удаление областей подкачки доступно только суперпользователям.

Операции с областями подкачки обычно выполняются следующим образом:

#include <sys/trap.h> #include <sys/swap.h>

/* Описание структуры для выполнения запросов */ struct swapint swapbuf;

/* Заполнение структуры */ ...

/* Собственно системный вызов */ sysm68k (S3BSWPI, &swapbuf);

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

[EFAULT] Дополнительный аргумент указывает за пределы отведенного процессу адресного пространства. [EFAULT] Поле si_buf указывает за пределы отведенного процессу адресного пространства. [ENOTBLK] Заданная область подкачки не является специальным блочным файлом. [EEXIST] Заданная область подкачки уже существует. [ENOSPC] Добавить область подкачки нельзя, так как их количество уже максимально. [ENOMEM] Попытка удалить последнюю область подкачки. [EINVAL] Неправильные аргументы. [ENOMEM] Если удалить область подкачки, то не хватит места для подкачиваемых страниц.

Команда STIME

Если значение cmd равно STIME, то устанавливаются системные дата и время. Единственный дополнительный аргумент типа long должен содержать время, прошедшее с нуля часов 1 января 1970 года (по Гринвичу), измеренное в секундах. Эту команду может выполнить только суперпользователь.

СМ. ТАКЖЕ

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

ДИАГНОСТИКА

Для описанных вариантов системного вызова sysm68k при успешном завершении результат равен 0; в противном случае возвращается -1, а переменной errno присваивается код ошибки.








Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT


SYSTEM(3S)


НАЗВАНИЕ

system - выполнение команды shell'а

СИНТАКСИС

#include <stdio.h>

int system (string) char *string;

ОПИСАНИЕ

Аргумент string передается shell'у в качестве входной строки, как если бы эта строка была введена с терминала. Текущий процесс ожидает завершения shell'а, после чего функция system возвращает результат, равный коду завершения shell'а.

ФАЙЛЫ

/bin/sh

СМ. ТАКЖЕ

.

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

ДИАГНОСТИКА

Для того, чтобы запустить shell, выполняются системные вызовы fork и exec, и если один из них завершится неудачей, функция system вернет отрицательное число и поместит код ошибки в переменную errno

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSTEMID(5)XENIX System V (1 янвapя 1989)


НАЗВАНИЕ

systemid - фaйл cиcтeмныx идeнтификaтopoв ceти Micnet

ОПИСАНИЕ

Фaйл systemid coдepжит мaшинныe и ceтeвыe имeнa для cиcтeм, вxoдящиx в ceть Micnet. Machine name (мaшиннoe имя) - имя cиcтeмы, включeннoй в ceть, site name -имя ceти, в кoтopyю включeнa cиcтeмa.

Фaйл systemid мoжeт coдepжaть ceтeтoe имя и дo чeтыpex мaшинныx имeн. Фaйл имeeт cлeдyющий фopмaт:

[site-name] [machine-name1] [machine-name2] [machine-name3] [machine-name4]

Фaйл дoлжeн coдepжaть нe мeнee oднoгo мaшиннoгo имeни. Дpyгиe мaшинныe имeнa являютcя aльтepнaтивными и нeoбязaтeльными. Ceтeвoe имя дoлжнo пpиcyтcтвoвaть, ecли иcпoльзyeтcя бoлee oднoгo мaшиннoгo имeни или, ecли ceть cвязaнa c дpyгoй ceтью пo линии cвязи uucp. Ceтeвoe имя дoлжнo paзмeщaтьcя нa пepвoй cтpoкe фaйлa.

Имя дoлжнo нaчинaтьcя c бyквы и мoжeт cocтoять нe бoлee, чeм из дeвяти cимвoлoв (бyкв или цифp). Ha oднoй cтpoкe мoжeт paзмeщaтьcя тoлькo oднo имя. Cтpoкa, нaчинaющaяcя c cимвoлa `#', являeтcя кoммeнтapиeм и игнopиpyeтcя.

Для кaждoй cиcтeмы, включeннoй в ceть, тpeбyeтcя пo oднoмy фaйлy systenid, coдepжaщeмy yникaльнoe мaшиннoe имя и имя ceти, ecли oнa cвязaнa c дpyгoй ceтью uucp-cвязью.

Systemid иcпoльзyeтcя в ocнoвнoм пpи pacпoзнaвaнии пceвдoнимoв. Ceтeвoe и/или мaшиннoe имя, coдepжaщeecя в пceвдoнимe, cpaвнивaeтcя c имeнaми в фaйлe systemid и пpи ycпeшнoм cpaвнeнии yдaляeтcя. B пpoтивнoм cлyчae, пceвдoним (и cвязaнныe c ним cooбщeниe, фaйл или кoмaндa) пepecылaютcя в yкaзaннyю ceть и/или мaшинy для дaльнeйшиx дeйcтвий.

ФАЙЛЫ

/etc/systemid

СМ. ТАКЖЕ

, ,

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



SYSTTY(7)


НАЗВАНИЕ

systty - Устройство системного обслуживания

ОПИСАНИЕ

Файл /dev/systty - устройство, на котором высвечиваются сообщения о системных ошибках. Действующие физическое устройство, доступное /dev/systty, выбирается во время начальной загрузки, и обычно это устройство, используемое для управления за процедурой начальной загрузки. По умолчанию физическое устройство /dev/systty определяется с помощью boot(HW), когда система поднимает этот вопрос.

Первоначально /dev/console соединяется с /dev/systty.

ФАЙЛЫ

/dev/systty

СМ. ТАКЖЕ

boot(HW),

Comments: info@citmgu.ru

Designed by Andrey Novikov

Copyright © CIT



TRIG(3M)


НАЗВАНИЕ

trig: sin, cos, tan, asin, acos, atan, atan2 - тригонометрические функции

СИНТАКСИС

#include <math.h>

double sin (x) double x;

double cos (x) double x;

double tan (x) double x;

double asin (x) double x;

double acos (x) double x;

double atan (x) double x;

double atan2 (y, x) double x, y;

ОПИСАНИЕ

Функции sin, cos и tan возвращают, соответственно, синус, косинус и тангенс своего аргумента, заданного в радианах.

Функция asin возвращает значение arcsin (x) в диапазоне от - П/2 до П/2.

Функция acos возвращает значение arccos (x) в диапазоне от 0 до П.

Функция atan возвращает значение arctg (x) в диапазоне от - П/2 до П/2.

Функция atan2 возвращает значение arctg (y/x) в диапазоне от - П до П, используя знаки обоих аргументов для определения квадранта, которому должно принадлежать возвращаемое значение.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

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

Если абсолютная величина аргумента функций asin или acos превышает 1, либо оба аргумента функции atan2 равны нулю, то будет возвращено нулевое значение, а переменной errno присвоено значение EDOM. Кроме того, в стандартный протокол будет выдано сообщение о выходе за границы области определения.

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