Man pages на русском

         

CAPINFO(1)


ИМЯ

capinfo, fixpad - Осуществляет преобразование описаний termcap в описания terminfo.

СИНТАКСИС

capinfo capfile infofile fixpad

ОПИСАНИЕ

Команда capinfo вызывает командный файл редактора для того, чтобы начать преобразование описания терминалов в базе данных termcap в эквивалентное описание terminfo. Команда capinfo производит вызов команды fixpad, чтобы произвести заполнение свободных мест в памяти незначащей информацией для этих спецификаций. Это преобразование должно быть завершено вручную. На нижеследующее нужно обратить особое внимание:

Многие характеристики terminfo не имеют эквивалентов для termcap. Определенные расширения XENIX для termcap не имеют эквивалентов для terminfo. Такие средства termcap, как cr, nl и ht, отмечены в сценарии редактора ex, как проблематичные.

СМ. ТАКЖЕ

termcap(5), ,



ECVT(3C)


НАЗВАНИЕ

ecvt, fcvt, gcvt - преобразование вещественного числа в цепочку символов

СИНТАКСИС

char *ecvt (value, ndigit, decpt, sign) double value; int ndigit, *decpt, *sign;

char *fcvt (value, ndigit, decpt, sign) double value; int ndigit, *decpt, *sign;

char *gcvt (value, ndigit, buf) double value; int ndigit; char *buf;

ОПИСАНИЕ

Функция ecvt преобразует значение value в цепочку из ndigit символов, завершающуюся нулевым байтом, и возвращает указатель на нее. Старшая цифра результата равна 0 только для нулевого значения value. Младшая цифра округляется. Смещение десятичной точки относительно начала цепочки символов запоминается по адресу decpt. Если смещение отрицательно, это означает, что точка располагается слева от возвращенных цифр. Десятичная точка не включается в возвращаемую цепочку символов. Если результат отрицателен, то слово, адресуемое указателем sign, отлично от нуля, иначе - равно нулю.

Функция fcvt аналогична функции ecvt. Отличие в том, что результат округляется для вывода в формате %f (в Фортране это формат F). Количество выводимых цифр определяется аргументом ndigit.

Функция gcvt преобразует значение value в цепочку символов, завершающуюся нулевым байтом, адрес которой задан аргументом buf, и выдает buf в качестве результата. Если возможно, функция помещает в цепочку символов ndigit значащих цифр в F-формате Фортрана, в противном случае используется E-формат. В любом случае результат готов для печати. Знак минус, если он есть, или десятичная точка включаются прямо в возвращаемую цепочку символов. Завершающие нули подавляются.

СМ. ТАКЖЕ

.

СЮРПРИЗЫ

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



F77(1)


НАЗВАНИЕ

f77 - компилятор языка Фортран 77

СИНТАКСИС

f77 [-c] [-p] [-O[число]] [-S] [-o вых_файл] [-g] [-onetrip] [-1] [-66] [-C] [-I[24s]] [-U] [-u] [-w] [-F] [-m] [-E] [-R] [-v] [-Ncглубина] [-Nlстепень_разветвления] [-Nqчисло_эквивалентностей] [-Nnразмер] [-Nsчисло_меток] [-Nxчисло_внешних_имен] файл ...

ОПИСАНИЕ

Команда f77 служит для вызова компилятора языка Фортран 77. Компилятор обрабатывает несколько типов файловых аргументов.

Аргументы, оканчивающиеся на .f, интерпретируются как имена файлов, содержащих исходные тексты на языке f77; они компилируются, и каждый об ектный модуль помещается в текущем каталоге в файл с именем, которое образуется из имени исходного файла замещением расширения .f на .o. Аргументы, оканчивающиеся на .r или .e, интерпретируются как имена файлов, содержащих исходные тексты на языках RATFOR и EFL соответственно; сначала эти файлы обрабатываются подходящим препроцессором, а уже затем - компилятором f77 с образованием .o-файлов. Аналогично, аргументы, оканчивающиеся на .c или .s, интерпретируются как имена файлов, содержащих исходные тексты на языке C или языке ассемблера соответственно; эти файлы обрабатываются C-компилятором или ассемблером с образованием .o-файлов.

Следующие опции имеют тот же смысл, что и для команды cc(1) [см. опции редактора связей ]:

-c Отменить редактирование связей и сгенерировать об ектный модуль для каждого исходного файла.

-p Подготовить об ектные файлы для профилирования [см. ].

-O[число] Вызвать оптимизатор об ектного кода. Число - это максимальное количество регистровых переменных (от 1 до 4).

-S Скомпилировать указанные программы и результат на языке ассемблера поместить в соответствующие файлы с расширением .s (в этом случае об ектные модули не создаются).

-o вых_файл Окончательный результат поместить в файл с именем вых_файл, а не в a.out.

-g Сгенерировать дополнительную информацию для отладчика .

Следующие опции специфичны для команды f77:

-onetrip Компилировать DO-циклы так, чтобы они выполнялись по крайней мере один раз. (DO-цикл в языке Фортран 77 не выполняется ни разу, если верхняя граница значений управляющей переменной цикла меньше нижней).

-1 То же, что и -onetrip.

-66 Отменить расширения, нарушающие совместимость с языком Фортран 66.

-C Сгенерировать команды для проверок во время выполнения, не выходят ли индексы за допустимые пределы.

-I[24s] Изменить стандартный размер целых переменных (действует только на машинах, где "нормальный" размер целых не равен размеру действительных значений одинарной точности). Задание -I2 или -I4 (значение по умолчанию) приведет к тому, что все целые будут, соответственно, двух- или четырехбайтными. Задание -Is изменит подразумеваемый размер индексных выражений (и только их) на двухбайтный.

-U Различать большие и малые буквы. Обычно компилятор f77 их не различает, то есть a не отличается от A.

-u Установить тип переменной по умолчанию как неопределенный, а не использовать стандартные правила языка Фортран 77.

-w Подавить все предупреждающие сообщения. Если опция имеет вид -w66, то подавляются только предупреждающие сообщения о нарушении совместимости с языком Фортран 66.

-F Обработать препроцессорами efl и ratfor соответствующие файлы и результаты поместить в файлы с расширениями .f. Об ектные .o-файлы не создаются.

-m Перед препроцессированием EFL- и RATFOR-файлов обработать их макропроцессором m4.

-E Стоящие после этого флага символы используются как аргументы команды efl каждый раз, когда обрабатывается .e-файл.

-R Стоящие после этого флага символы используются как аргументы команды ratfor каждый раз, когда обрабатывается .r-файл.

-v Информационный режим. Выдавать полную диагностику во время компиляции.

-Ncглубина Изменить максимально допустимую глубину вложенности условных операторов и DO-циклов. Подразумевается 20.

-Nlстепень_разветвления Изменить максимально допустимое число меток в вычисляемом goto и допустимое число альтернативных точек возврата. Подразумевается 125.

-Nqчисло_эквивалентностей Изменить максимально допустимое число связей, устанавливаемых операторами EQUIVALENCE в одной программной единице. Подразумевается 150.

-Nnразмер Изменить размер таблицы имен. Подразумевается 401.

-Nsчисло_меток Изменить максимально допустимое число меток у операторов одной программной единицы. Подразумевается 201.

-Nxчисло_внешних_имен Изменить максимально допустимое число внешних имен. Подразумевается 200.


Остальные аргументы рассматриваются как опции редактора связей, имена об ектных модулей, совместимых с f77-программами (обычно эти модули получены в результате предшествующих запусков компилятора), или, возможно, библиотек f77-совместимых программ. Эти программы, вместе с результатами текущей компиляции, обрабатываются редактором связей, и созданная выполняемая программа, если не указана опция редактора связей -o, помещается в файл a.out.

ОКРУЖЕНИЕ

SHLIB Если переменная SHLIB имеет значение YES, будут использоваться разделяемые версии библиотек libc*.

STACKCHECK Если переменная STACKCHECK имеет значение ON, порождаются команды для контроля стека.

FP Если переменная FP имеет значение M68881, компилятор генерирует инструкции для сопроцессора MC68881, поддерживающего арифметику вещественных чисел. Если результат какой-либо функции является вещественным, он возвращается только в регистре %fp0. Если переменная FP равна M68881u, вещественные значения возвращаются еще и в регистрах %d0/ %d1 для совместимости со старыми библиотеками.

Компилятор выбирает соответствующие версии библиотек libc и libm согласно значениям переменных окружения FP и SHLIB.

ФАЙЛЫ

файл.[fresc] Исходный файл. файл.o Об ектный файл. файл.s Ассемблерный файл. a.out Результат работы редактора свя- зей. /usr/tmp/F77* Временные файлы. /lib/cpp Препроцессор. /usr/bin/ratfor Препроцессор . /usr/bin/efl Препроцессор . /usr/bin/f77pass1 Компилятор, проход 1. /usr/bin/f77pass2 Компилятор, проход 2. /lib/optim Необязательный оптимизатор об - ектного кода. /bin/as Ассемблер . /bin/ld Редактор связей . /lib/crt1.o /lib/crtn.o Стандартная программа инициализа- ции. /lib/mcrt0.o Программа инициализации профили- рования. /lib/libc.a Стандартная библиотека, см. раз- дел 3C. /lib/libm.a Математическая библиотека, см. раздел 3M. /lib/lib*_s.a Разделяемые версии библиотек. /lib/lib*881.a Версии библиотек для сопроцессора арифметики вещественных чисел. /lib/lib*881u.a Универсальные версии библиотек. /usr/lib/libp/*.a Версии библиотек для профилирова- ния. /usr/lib/libF77.a Библиотека встроенных функций. /usr/lib/libF77_881.a Версия библиотеки встроенных функций для сопроцессора арифме- тики вещественных чисел. /usr/lib/libI77.a Библиотека ввода/вывода Фортрана. /usr/lib/libI77_881.a Версия библиотеки ввода/вывода для сопроцессора арифметики ве- щественных чисел.

СМ. ТАКЖЕ

as(1), , , , , , prof(1), , .

ДИАГНОСТИКА

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

СЮРПРИЗЫ

Компилятор f77 генерирует неправильные команды при вызове функций с результатом типа CHARACTER - неверно корректируется указатель стека. По этой же причине не работают операторы ENTRY.

При компиляции оператора INQUIRE генерируется имя L%0, которое нигде не определяется. В результате редактор связей фиксирует фатальную ошибку.









FACTOR(1)


НАЗВАНИЕ

factor - разложение целого числа на простые множители

СИНТАКСИС

factor [целое_число]

ОПИСАНИЕ

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

При вызове с аргументом factor обрабатывает заданное целое_число описанным выше образом, после чего завершает работу.

Целое_число должно быть положительным. Верхняя граница - 10^14.

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

ДИАГНОСТИКА

Ouch! Задано число вне допустимого диапазона. Not an integer! Задано не целое число.



FALSE(1)


НАЗВАНИЕ

false - выдает логическое значение "ложь"

СИНТАКСИС

false

ОПИСАНИЕ

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

СМ. ТАКЖЕ

sh(1), .

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

Команда выдает ненулевой код завершения.



FCLOSE(3S)


НАЗВАНИЕ

fclose, fflush - закрыть поток или вытолкнуть буфера

СИНТАКСИС

#include <stdio.h>

int fclose (stream) FILE *stream;

int fflush (stream) FILE *stream;

ОПИСАНИЕ

Функция fclose записывает в файл всю информацию, буферизованную в потоке stream (выталкивает буфера), и закрывает этот поток.

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

Функция fflush выталкивает буфера потока stream в файл. Поток остается открытым.

СМ. ТАКЖЕ

, , , , .

ДИАГНОСТИКА

При успешном завершении результат равен 0; в случае какой-либо ошибки (например, при попытке записать в файл, не открытый на запись) возвращается EOF.



FCNTL(2)


НАЗВАНИЕ

fcntl - управление файлами

СИНТАКСИС

#include <fcntl.h>

int fcntl (fildes, cmd, arg) int fildes, cmd, arg;

ОПИСАНИЕ

Системный вызов fcntl выполняет управляющие операции над открытыми файлами. Аргумент fildes - это дескриптор открытого файла, полученный после выполнения системных вызовов creat, open, dup, fcntl и pipe.

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

F_DUPFD Создать новый дескриптор файла с такими свойствами:

Его номер - есть минимальный из доступных номеров, не меньших arg. Он ассоциирован с тем же открытым файлом (или каналом), что и исходный дескриптор fildes. У него тот же указатель текущей позиции в файле, что и у исходного (то есть они разделяют общий указатель). Тот же режим доступа к файлу (чтение, запись или чтение/запись). Те же флаги статуса файла (то есть оба дескриптора разделяют общие флаги статуса). Ассоциированный с новым дескриптором флаг "закрыть при выполнении вызова exec" устанавливается в состояние "оставить открытым при выполнении вызова exec".

F_GETFD Получить значение флага "закрыть при выполнении вызова exec" для дескриптора файла fildes. Если младший бит возвращаемого значения равен нулю, то файл останется открытым, в противном случае при выполнении вызова exec файл будет закрыт. F_SETFD Установить значение флага "закрыть при выполнении вызова exec" для дескриптора файла fildes равным значению младшего бита (0 или 1) аргумента arg. F_GETFL Получить флаги статуса файла, ассоциированного с дескриптором fildes. F_SETFL Установить флаги статуса файла, ассоциированного с дексриптором fildes, равными значению аргумента arg. Могут быть установлены только некоторые флаги [см. ]. F_GETLK Получить характеристики первой блокировки, мешающей установить новую блокировку, задаваемую структурой типа flock с адресом arg. Результирующая информация возвращается в той же структуре. Если нет помех для создания нужной блокировки, то структура flock не изменяется за исключением поля типа блокировки, которому присваивается значение F_UNLCK. F_SETLK Установить или снять блокировку сегмента файла в соответствии со значением структуры типа flock, на которую указывает аргумент arg. [см. ]. Операция F_SETLK используется для установки блокировки на чтение (F_RDLCK) или запись (F_WRLCK), а также для снятия блокировки обоих типов (F_UNLCK). Если блокировка на чтение или запись не может быть установлена, то системный вызов fcntl завершается немедленно и возвращает -1. F_SETLKW Эта операция отличается от операции F_SETLK только тем, что при неудачной попытке установить блокировку на чтение или запись процесс переходит в состояние ожидания до тех пор, пока нужный сегмент файла не будет разблокирован.


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

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

Структура типа flock содержит поля, определяющие для сегмента файла тип блокировки (l_type), начальное смещение (l_whence), относительное смещение (l_start), размер (l_len), идентификатор системы РУФ (l_sysid), идентификатор процесса (l_pid). Идентификаторы процесса и системы используются только в случае операции F_GETLK для возврата характеристик блокировки. Начало и конец блокируемой области могут выходить за конец файла, но не за начало. Можно определить блокировку, всегда действующую до конца файла, если значение поля l_len равно 0. Если значения полей l_whence и l_start равны 0, то блокировка будет распространяться на весь файл. Изменение или снятие блокировки сегмента из середины большого защищенного сегмента приводит к появлению с обоих концов двух меньших защищенных сегментов. Блокировка сегмента, который уже блокирован вызывающим процессом, приводит к удалению старого и установке нового типа блокировки. Все блокировки, ассоциированные с файлом для данного процесса, удаляются, когда файл закрывается этим процессом или когда процесс терминируется, не закрывая файл. Блокировки не наследуются порождаемым процессом при выполнении системного вызова .

Если блокировка доступа к файлу разрешена [см. ], то системные вызовы read и write для этого файла выполняются с учетом действующих блокировок.

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



[EBADF] Аргумент fildes не является корректным дескриптором открытого файла. [EINVAL] При операции cmd, равной F_DUPFD, значение аргумента arg либо отрицательно, либо больше или равно максимально допустимому для одного пользователя количеству дескрипторов открытых файлов. [EINVAL] При операции cmd, равной F_GETLK, F_SETLK или F_SETLKW, значение аргумента arg или информация, на которую указывает arg, некорректны. [EACCES] При операции cmd, равной F_SETLK, делается попытка блокировать на чтение (F_RDLCK) сегмент файла, заблокированный другим процессом на запись, либо попытка блокировать на запись (F_WRLCK) сегмент файла, заблокированный другим процессом на чтение или запись. [ENOLCK] При операции cmd, равной F_SETLK или F_SETLKW, превышается максимально допустимое системой количество блокировок. [EDEADLK] При операции cmd, равной F_SETLKW, ожидание возможности установить блокировку приводит к тупику. [EFAULT] При операции cmd, равной F_SETLK, аргумент arg указывает за пределы отведенного процессу адресного пространства. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [ENOLINK] Дескриптор fildes ассоциирован с файлом на удаленном компьютере, связи с которым в данный момент нет.

СМ. ТАКЖЕ

, , , , , , , .

ДИАГНОСТИКА

При успешном завершении системного вызова в зависимости от операции cmd возвращаются следующие значения:

F_DUPFD Новый дескриптор файла. F_GETFD Значение флага (определен только младший бит). F_SETFD Значение, отличное от -1. F_GETFL Значение флагов статуса файла. F_SETFL Значение, отличное от -1. F_GETLK Значение, отличное от -1. F_SETLK Значение, отличное от -1. F_SETLKW Значение, отличное от -1.

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

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

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









FCNTL(5)


НАЗВАНИЕ

fcntl - флаги управления файлами

СИНТАКСИС

#include <fcntl.h>

ОПИСАНИЕ

Системный вызов предназначен для управления открытыми файлами. Во включаемом файле <fcntl.h> описаны запросы и аргументы для системных вызовов и .

Флаги, доступные и

/* Первые три флага могут быть установлены только при открытии файла */

#define O_RDONLY 0 #define O_WRONLY 1 #define O_RDWR 2 #define O_NDELAY 04 /* Неблокируемый ввод/вывод */ #define O_APPEND 010 /* Добавлять (гарантируется, что запись будет производиться в конец файла) */ #define O_SYNC 020 /* Флаг синхронной записи */

Флаги, доступные только

#define O_CREAT 00400 /* Создать и открыть файл, ис- пользуя третий агрумент , как режим доступа */ #define O_TRUNC 01000 /* Открыть с опустошением */ #define O_EXCL 02000 /* Флаг исключительности */

Запросы к #define F_DUPFD 0 /* Скопировать дескриптор файла */ #define F_GETFD 1 /* Получить флаги файла с данным дескриптором */ #define F_SETFD 2 /* Установить флаги файла с данным дескриптором */ #define F_GETFL 3 /* Получить флаги файла */ #define F_SETFL 4 /* Установить флаги файла */ #define F_GETLK 5 /* Получить состояние блокировки файла */ #define F_SETLK 6 /* Установить блокировку файла */ #define F_SETLKW 7 /* Установить блокировку файла и ждать */ #define F_CHKFL 8 /* Проверить допустимость измене- ний флагов файла */ #define F_ALLOCSP 10 /* Зарезервирован */ #define F_FREESP 11 /* Зарезервирован */

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

struct flock { short l_type; short l_whence; long l_start; long l_len; /* Если 0, то до конца файла */ short l_sysid; /* Возвращается по запросу F_GETLK */ short l_pid; /* Возвращается по запросу F_GETLK */ };

Типы блокировок сегмента файла

#define F_RDLCK 01 /* Блокировка на чтение */ #define F_WRLCK 02 /* Блокировка на запись */ #define F_UNLCK 03 /* Блокировка на удаление */

СМ. ТАКЖЕ

, .



FD(HW)


НАЗВАНИЕ

fd - устройства флоппи-дисков

ОПИСАНИЕ

Устройства fd обеспечивают интерфейс системы UNIX к дисководам гибких дисков. Обычно для чтения гибких дисков или записи на них используются команды tar(1), cpio(1) или dd(1). Например:

tar tvf /dev/fd0

табулирует содержимое гибкого диска на дисководе 0.

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

Устройства флоппи-дисков носят имена /dev/fd0 и /dev/fd1 (см. "Описание" для получения дополнительной информации о процедуре присвоения имен устройствам.)

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

В отношении форматирования смотрите format(1).

Малое (меньшее) число устройства определяет тип физического устройства, связанного с файлом этого устройства (см. Описание).

ФАЙЛЫ

/dev/fd0 /dev/rfd048ds8 /dev/rfd096ds15 /dev/rfd0135ds9 /dev/fd1 /dev/rfd148ds8 /dev/rfd196ds15 /dev/rfd1135ds9 /dev/fd0 /dev/rfd048ds9 /dev/rfd096ds9 /dev/rfd0135ds18 /dev/fd1 /dev/rfd148ds9 /dev/rfd196ds9 /dev/rfd1135ds18 /dev/rfd048ss8 /dev/rfd148ss8

ПРИМЕЧАНИЯ

При осуществлении доступа к специальным символьным устройствам флоппи-дисков пользовательский буфер должен начинаться на границе слова. Количество count при вызове read(2), write(2) и lseek(2) подобного устройства должно быть кратным 1K байтов.

Имена устройств определяют конфигурацию конкретного дисковода и носителя. Имена устройств имеют вид: fd048ds9, где fd0 - номер дисковода (0, 1, 2, 3), 48 - количество дорожек на дюйм на диске (48 или 96), ds - односторонний или двусторонний тип диска (ss или ds), 9 - количество секторов на дорожке диска (8 или 9).

Например, /dev/fd048ss9 указываает на устройство гибкого диска дисковода 0 формата 48 дорожек на дюйм, одностороннего, 9-секторного.


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

 48 дор/дюйм96 дор/дюйм135 дор/дюйм  ds/8ds/9ss/8ss/9ds/15ds/8ds/9ds/18 ДисководМалое число устройства 01248052443660 11359153453761 214610254463862 3 *  * Зарезервировано для специальных устройств не-дискетного типа, подключенных к контроллеру дисковода гибких дисков.

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

Например, малое число устройства /dev/fd048ss8 равно 8. В двоичном виде это - 00001000.

Каждый бит или двоичный разряд интерпретируется так:
48 дор/дюйм - 0Секторов на дорожкеss - 0Дисковод 96 дор/дюйм - 1ds - 1 135 дор/дюйм - 1  32168421 001000

При идентификации малого числа устройства используются только последние шесть битов этого числа. Первым значащим битом является третий слева. Например, если третий бит слева - 0, то устройство имеет формат 48 дор/дюйм. Следующие два бита интерпретируются так:
БитыСекторов на дорожке 168 009 018 1015 1118 Четвертый бит сообщает, является ли дискета односторонней (ss - 0) или двусторонней (ds - 1). Последние два бита указывают номер дисковода:
БитыНомер дисковода 21 000 011 102 113 * * Зарезервировано для специальных устройств не-дискетного типа, подключенных к контроллеру дисковода гибких дисков.

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

Не рекомендуется форматировать дискеты низкой плотности (48 дор/дюйм) на дисководах высокой плотности (96 дор/дюйм или 135 дор/дюйм). Записи на дискетах низкой плотности, сделанные на дисководах высокой плотности, следует считывать на дисководах высокой плотности. На дисководах низкой плотности они могут и не считаться.

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

FDISK(1)


ИМЯ

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

СИНТАКСИС

fdisk

ОПИСАНИЕ

Команда fdisk обычно используется в инсталляционных процедурах UNIX для компьютеров, совместимых с IBM/PC, и служит альтернативой известной MSDOS команде fdisk при совместной эксплуатации UNIX и MSDOS на одном компьютере. Команда fdisk использует меню-ориентированный интерфейс, который зависит от конкретной реализации UNIX.



FDISK(8)


НАЗВАНИЕ

fdisk - работает с разделами диска.

СИНТАКСИС

fdisk [[-p] [-ad partition] [-c partition start size] [-f devicename]]

ОПИСАНИЕ

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

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

Для использования системы UNIX ей должен быть отведен хотя бы один раздел.

При выборе опции "Use Entire Disk for UNIX" утилита fdisk не резервирует первую дорожку и последний цилиндр жесткого диска. Первая дорожка жесткого диска резервируется под главный загрузчик, а последний цилиндр обычно используется для диагностики жесткого диска. Если вы намерены запускать программы диагностики жесткого диска, вам не следует занимать его последний цилиндр.

Например, если на диске 2442 дорожки, то fdisk воспринимает их под номерами 0 - 2441. Если у жесткого диска четыре головки, то fdisk будет использовать (опция "Use Entire Disk for UNIX" ) дорожки 1-2437. (Нулевая дорожка резервируется для главного загрузчика.) Последний цилиндр (дорожки 2438-2441) при выборе опции "Use Entire Disk for UNIX" не используется.

Разделы определяются в "таблице разделов" в конце блока главного загрузчика. Эта таблица содержит информацию о расположении и размерах разделов на диске. Она определяет также, какой из разделов является активным. Любой раздел может быть отведен под систему UNIX, DOS или какую-нибудь другуя операционную систему. Если сформирован раздел DOS, то доступ к файлам и каталогам DOS, находящимся в этом разделе, может быть получен посредством команд системы UNIX. Система DOS может быть загружена без активизации раздела DOS с помощью команды "boot:dos".

Аргументы


-p,-a,-d,-c

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

-p выдает таблицу разделов диска. -a number активизирует заданный раздел диска. -d number удаляет заданный раздел диска. - number start size создает раздел с заданными началом и размером. -f name Откройте устройство name и прочитайте таблицу разделов, связанную с этим устройством. По умолчанию этим устройством является /dev/rhd00.

Опции

Команда fdisk высвечивает подсказку и меню с пятью опциями. Модификация диска не производится, пока вы не введете 'q' в главном меню.

Display Partition Table


Эта опция выдает таблицу с информацией по каждому разделу жесткого диска. В колонке PARTITION содержится номер раздела. Колонка STATUS сообщает, какой из разделов явялется активным (A), а какой - нет (I). Колонка TYPE говорит о том, какой раздел содержит систему UNIX, какой - DOS и какой "other" (прочую). Эта опция высвечивает также начальную дорожку, конечную дорожку и общее количество в каждом разделе. Use Entire Disk for UNIX


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


Эта опция разрешает создание раздела посредством изменения таблицы разделов. fdisk сообщает количество дорожек, доступных в каждом разделе, и количество занятых дорожек. fdisk обеспечивает подсказки для создания раздела, а также ввода начальной дорожки и размера раздела в дорожках. Изменения записываются в операционную систему и на жесткий диск, когда вы выходите из главного меню, вводя 'q'. Activate Partition


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


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

Выйдите из программы fdisk, набрав 'q' в главном меню fdisk. Теперь изменения будут записаны в операционную систему и на жестком диске.

ПРИМЕЧАНИЯ

Минимальный рекомендуемый размер раздела UNIX составляет 5 мегабайт.

fdisk предназначается для работы с системой DOS и не может работать со всеми комбинациями различных операционных систем.

СМ. ТАКЖЕ










FDSWAP(8)


НАЗВАНИЕ

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

СИНТАКСИС

fdswap [on|off]

ОПИСАНИЕ

fdswap сообщает кодам в CMOS подкачать информацию с загрузочного дисковода, используемого для чтения загрузочной информации во время загрузки. Например, если по умолчанию ваш компьютер считывает загрузочную информацию с дисковода A, команда fdswap on меняет этот дисковод на дисковод B.

fdswap без аргументов сообщает текущее состояние fdswap - on или off. Команда fdswap off переключает установку дисковода назад к конфигурации, устанавливаемой по умолчанию. Измененная установка вступает в действие во время следующей загрузки системы.

ПРИМЕЧАНИЯ

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

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



FERROR(3S)


НАЗВАНИЕ

ferror, feof, clearerr, fileno - опрос состояния потока

СИНТАКСИС

#include

int ferror (stream) FILE *stream;

int feof (stream) FILE *stream;

void clearerr (stream) FILE *stream;

int fileno (stream) FILE *stream;

ОПИСАНИЕ

Функция ferror возвращает ненулевое значение, если ранее при операциях чтения/записи в поток stream фиксировалась ошибка ввода/вывода; в противном случае результат равен 0.

Функция feof возвращает ненулевое значение, если ранее при чтении из потока steram фиксировался конец файла; в противном случае результат равен 0.

Функция clearerr обнуляет индикаторы ошибок и конца файла для потока stream.

Функция fileno возвращает целое значение - дескриптор файла, ассоциированный с потоком stream; см. .

ПРИМЕЧАНИЯ

Ferror, feof, clearerr, fileno реализованы в виде макросов; их нельзя определять или переопределять как функции.

СМ. ТАКЖЕ

, , .



FF(1M)


НАЗВАНИЕ

ff - вывод имен файлов и статистической информации о файловой системе

СИНТАКСИС

/etc/ff [-I] [-l] [-p маршрут] [-s] [-u] [-a число] [-m число] [-c число] [-n файл] [-i список_номеров_описателей] файловая_система

ОПИСАНИЕ

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

маршрутное_имя номер_описателя

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

маршрутное_имя номер_описателя размер имя_владельца

Опции управления выводом информации:

-I После имени не выводить номер описателя файла.

-l Выдавать все маршрутные имена файлов, на которые имеется более одной ссылки.

-p маршрут Указанный маршрут вставляется перед каждым сгенерированным именем файла. По умолчанию вставляется точка.

-s После каждого имени выводить размер файла в байтах.

-u После каждого имени выводить входное имя пользователя.

Ниже перечислены опции, определяющие критерий выбора файлов. Аргумент число задается как целое десятичное число, быть может со знаком. Конструкция +число означает "больше, чем число", -число - "меньше, чем число", число - "в точности число". День определяется как 24 часовой период.

-a число Истина, если последний доступ к файлу производился заданное число дней назад.

-m число Истина, если последняя модификация файла выполнялась заданное число дней назад.

-c число Истина, если последнее изменение описателя файла выполнялось заданное число дней назад.

-n файл Истина, если файл модифицировался позднее указанного файла.

-i список_номеров_описателей Истина, если номер описателя файла входит в заданный список.

СМ. ТАКЖЕ

, , .

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

СЮРПРИЗЫ

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



FGREP(1)


НАЗВАНИЕ

fgrep - поиск цепочки символов

СИНТАКСИС

fgrep [-b] [-c] [-i] [-l] [-n] [-v] [-e специальная_цепочка] [-f файл] цепочка_символов [файл ...]

ОПИСАНИЕ

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

Команда fgrep трактует символы $, *, [ ], ^, |, ( ), и \ буквально, а не как элементы полных регулярных выражений. Для экранирования этих символов от интерпретации shell'ом проще всего заключать цепочку_символов в одинарные кавычки.

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

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

-c Выдавать только количество успешно сопоставленных строк.

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

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

-n Перед каждой строкой ставить ее номер в файле (строки нумеруются с 1).

-v Выдавать только строки, не содержащие цепочку_символов.

-e специальная_цепочка Искать специальную_цепочку (цепочку, начинающуюся со знака -).

-f файл Цепочки_символов читаются из файла.

СМ. ТАКЖЕ

ed(1), , , , .

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

0 Были успешные сопоставления. 1 Успешных сопоставлений не было. 2 Есть синтаксические ошибки или недоступные файлы (даже если были успешные сопоставления).

СЮРПРИЗЫ

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

Длина строки ограничена BUFSIZ символами; более длинные строки обрезаются. Значение BUFSIZ определяется во включаемом файле .



FILE(1)


НАЗВАНИЕ

file - определение типа файла

СИНТАКСИС

file [-c] [-f файл_имен] [-m магический_файл] файл ...

ОПИСАНИЕ

Команда file проводит серию тестов, пытаясь классифицировать файлы, указанные в командной строке. Если файл текстовый, команда пытается по первым 512 байтам угадать язык программирования. Для выполняемых файлов выдается также номер версии, если он больше 0 [см. ld(1)].

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

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

-f файл_имен Определяются типы файлов, имена которых заданы в файле_имен.

-m магический_файл Задается магический_файл, отличный от стандартного, /etc/magic. Магический файл содержит список магических чисел, по которым и производится классификация. Комментарии в начале файла /etc/magic об ясняют его формат.

ФАЙЛЫ

/etc/magic

СМ. ТАКЖЕ

ld(1). filehdr(4) в Справочнике программиста.



FILE2C(1)FreeBSD Reference Manual


ИМЯ

file2c - переводит файл к исходнику на C.

СИНТАКСИС

file2c [string] [string]

ОПИСАНИЕ

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

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

ПРИМЕР

команда:

date | file2c 'const char date[] = {' ',0};'

даст:

const char date[] = { 83,97,116,32,74,97,110,32,50,56,32,49,54,58,50,56,58,48,53, 32,80,83,84,32,49,57,57,53,10 ,0};



FILEHDR(4)


НАЗВАНИЕ

filehdr - заголовок об ектного файла обычного формата

СИНТАКСИС

#include <filehdr.h>

ОПИСАНИЕ

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

struct filehdr { unsigned short f_magic; /* Магическое число */ unsigned short f_nscns; /* Количество секций */ long f_timdat; /* Время и дата создания */ long f_symptr; /* Указатель в файле на таблицу имен */ long f_nsyms; /* Число элем. в табл. имен */ unsigned short f_opthdr; /* Размер вспомогательного заголовка */ unsigned short f_flags; /* Флаги */ };

Поле f_symptr содержит смещение в байтах таблицы имен от начала файла. Это значение может быть использовано как аргумент функции для позиционирования на таблицу имен в потоке ввода/вывода. Вспомогательный заголовок системы UNIX состоит из 28 байт.

Значение f_timdat получается как результат вызова . Биты поля f_flags, в настоящее время, определены следующим образом:

#define F_RELFLG 0000001 /* Информация о настройке ссылок удалена из файла */ #define F_EXEC 0000002 /* Файл выполняемый */ #define F_LNNO 0000004 /* Информация о номерах строк удалена из файла */ #define F_LSYMS 0000010 /* Информация о локальных именах удалена из файла */ #define F_MINMAL 0000020 /* Минимальный об ектный файл */ #define F_UPDATE 0000040 /* Полностью обновленный файл */ #define F_SWABD 0000100 /* Байты в полусловах переставлены */

#define F_AR16WR 0000200 /* Слово двухбайтное, порядок байт в слове соответствует PDP 11/70 */ #define F_AR32WR 0000400 /* Слово четырехбайтное, порядок байт как у машин серии VAX */ #define F_AR32W 0001000 /* Слово четырехбайтное, порядок байт как у машин серии 3b */ #define F_PATCH 0002000 /* Во вспомогательном заголовке содержится список "заплаток" */

СМ. ТАКЖЕ

, , a.out(4).



FILESYS(5)XENIX System V (1 янвapя 1989)


НАЗВАНИЕ

filesys - Инфopмaция o мoнтиpyeмoй cиcтeмe, пoлyчaeмaя пo yмoлчaнию.

ОПИСАНИЕ

/etc/default/filesys coдepжит инфopмaцию o мoнтиpyeмыx фaйлoвыx cиcтeмax в cлeдyющeм фopмaтe:

name = value [name = value] ...

value мoжeт coдepжaть пpoбeлы, зaключeнныe в кaвычки, cимвoлы нoвoй cтpoки дoлжны быть экpaниpoвaны oбpaтнoй кocoй чepтoй.

Koмaндa mnt (cмoтpи ) и sysadmin(1) иcпoльзyeт инфopмaцию, coдepжaщyюcя в фaйлe /etc/default/filesys, кoгдa cиcтeмa пepexoдит в мнoгoпoльзoвaтeльcкий peжим. Cлeдyющиe имeнa oпpeдeлeны в фaйлe /etc/default/filesys :

bdevИмя блoкopиeнтиpoвaннoгo ycтpoйcтвa. cdevИмя бaйтopиeнтиpoвaннoгo ycтpoйcтвa. sizePaзмep в блoкax. mountdirKaтaлoг, в кoтopый мoнтиpyeтcя фaйлoвaя cиcтeмa. descOпиcaниe фaйлoвoй cиcтeмы. Haпpимep, "User filesystem". mountflagsЛюбoй флaг, пepeдaвaeмый кoмaндe . fsckflagsЛюбoй флaг, пepeдaвaeмый кoмaндe . remountOпpeдeляeт, нyжнo ли мoнтиpoвaть фaйлoвyю cиcтeмy в тoм cлyчae, ecли oпepaциoннaя cиcтeмa cтaнoвитcя мнoгoпoльзoвaтeльcкoй. B кaчecтвe знaчeний мoгyт иcпoльзoвaтьcя "no" (нe мoнтиpoвaть),"yes" (мoнтиpoвaть), "prompt" (cиcтeмa зaдacт вoпpoc o тoм, мoнтиpoвaть ли фaйлoвyю cиcтeмy).

СМ. ТАКЖЕ

, sysadmin(1)



FILESYSTEM(5)XENIX System V (1 янвapя 1989)


НАЗВАНИЕ

file system - Фopмaт тoмa, coдepжaщий фaйлoвyю cиcтeмy.

СИНТАКСИС

#include <sys/filsys.h> #include <sys/types.h> #include <sys/param.h>

ОПИСАНИЕ

Kaждый тoм, coдepжaщий фaйлoвyю cиcтeмy (нaпpимep, жecткий диcк) пoдpaздeляeтcя нa блoки пo 256 cлoв (512 бaйт). Блoк c нoмepoм 0 нe иcпoльзyeтcя и coдepжит пpoгpaммy нaчaльнoй зaгpyзки или дpyгyю инфopмaцию.

Блoк нoмep 1 - cyпepблoк. Фopмaт этoгo блoкa oпиcaн в мaкpo фaйлe /usr/include/sys/filesys.h. B этoм мaкpo фaйлe S_isize пpeдcтaвляeт coбoй aдpec пepвoгo блoкa дaнныx пocлe cпиcкa индeкcныx дecкpиптopoв, нaчинaющeгocя cpaзy пocлe cyпepблoкa в блoкe нoмep 2; длинa cпиcкa индeкcныx дecкpиптopoв paвнa s_isize-2. S-fsize пpeдcтaвляeт coбoй пepвый блoк, нeдocтyпный фaйлoвoй cиcтeмe. Эти блoки иcпoльзyютcя oпepaциoннoй cиcтeмoй для зaмeны дeфeктныx блoкoв. Ecли oпepaциoння cиcтeмa вынyждeнa выдeлить блoк из cпиcкa зaмeны или, нaпpoтив, ocвoбoждaeтcя блoк из cпиcкa зaмeны, нa кoнcoль вывoдитcя cooбщeниe. Бoлee тoгo, cпиcoк cвoбoдныx блoкoв кoppeктиpyeтcя тaк, чтoбы дeфeктный блoк нe пoпaл в cпиcoк cвoбoдныx блoкoв.

Cпиcoк cвoбoдныx блокoв кaждoгo тoмa oбpaзoвaн cлeдyющим oбpaзoм. Maccив s_free coдepжит в элeмeнтax s_free[1], ... , s_free[s_nfree-1] дo 49 нoмepoв cвoбoдныx блoкoв. S_free[0] coдepжит нoмep блoкa зaгoлoвкa цeпи блoкoв, cocтaвляющиx cпиcoк cвoбoднoгo пpocтpaнcтвa. Пepвaя пepeмeннaя типa long в кaждoй цeпи cвoбoдныx блoкoв пpeдcтaвляeт coбoй чиcлo (дo 50) нoмepoв cвoбoдныx блoкoв, зaпиcaнныx в cлeдyющиx 50 элeмeнтax типa long этoгo элeмeнтa цeпи. Пepвый из этиx пятидecяти блoкoв cвязaн co cлeдyющим элeмeнтoм цeпи. Для тoгo, чтoбы выдeлить блoк: yмeньшить знaчeниe s_nfree и нoвый s_free[s_nfree]. Ecли нoмep нoвoгo блoкa paвeн нyлю, нe cyщecтвyeт ocтaвшиxcя блoкoв, пoэтoмy выдaeтcя oшибкa. Ecли s_nfree cтaнoвитcя 0, пpoчecть в блoкe, oпpeдeляeмым нoмepoм нoвoгo блoкa, зaмeнить s_nfree eгo пepвым cлoвoм и кoпиpoвaть нoмepa блoкoв в cлeдyющиx 50 элeмeнтax типa long в мaccив s_free. Для тoгo, чтoбы ocвoбoдить блoк пpoвepить, ecли s_nfree paвнo 50; ecли дa, кoпиpoвaть s_nfree и мaccив s_free в нeгo и ycтaнoвить знaчeниe s_nfree paвным 0. B любoм cлyчae ycтaнoвить s_free[s_nfree] нa нoмep ocвoбoждeннoгo блoкa и yвeличить s_nfree.



FINC(1M)


НАЗВАНИЕ

finc - быстрое выборочное копирование

СИНТАКСИС

/etc/finc [критерий_выбора] файловая_система магнитофон

ОПИСАНИЕ

Утилита finc выборочно копирует исходную файловую_систему на магнитную ленту (магнитофон задается как бесструктурное устройство, обычно /dev/mt). Для получения аккуратной копии следует монтировать исходную файловую _систему доступной только на чтение, хотя и при монтировании с доступом как для чтения, так и для записи можно получить приемлемый результат. Копируются только те описатели/файлы, которые удовлетворяют логическому выражению - критерию_выбора.

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

В критерии_выбора аргумент число задается как целое десятичное число, быть может со знаком. Конструкция +число означает "больше, чем число", -число - "меньше, чем число", число - "в точности число". День определяется как 24-часовой период.

-a число Истина, если последний доступ к файлу производился заданное число дней назад.

-m число Истина, если последняя модификация файла выполнялась заданное число дней назад.

-c число Истина, если последнее изменение описателя файла выполнялось заданное число дней назад.

-n файл Истина, если файл модифицировался позднее указанного файла.

ПРИМЕРЫ

Для записи на магнитную ленту всех файлов файловой сис- темы hd0s1, изменявшихся в течение последних 48 часов, можно воспользоваться командой

finc -m -2 /dev/rdsk/hd0s1 /dev/mt

СМ. ТАКЖЕ

, , .

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

СЮРПРИЗЫ

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



FIND(1)


НАЗВАНИЕ

find - поиск файлов

СИНТАКСИС

find список_поиска выражение

ОПИСАНИЕ

Команда find рекурсивно просматривает каждый из каталогов, перечисленных в списке_поиска, отыскивая файлы, удовлетворяющие логическому выражению, построенному с помощью описанных ниже средств. В список_поиска могут входить и обычные файлы. Далее n обозначает целое десятичное число, на месте которого могут также указываться комбинации +n, что означает "больше, чем n", и -n, что означает "меньше, чем n". Элементарные логические выражения и их результаты:

-name шаблон_файлов Истина, если текущий файл удовлетворяет шаблону_файлов. Символы шаблона, имеющие для shell'а специальный смысл, должны быть экранированы.

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

-type c Истина, если файл имеет тип c, где c есть b, c, d, p или f - блочный или символьный специальный файл, каталог, именованный канал или обычный файл.

-links n Истина, если на файл имеется n ссылок.

-user имя_пользователя Истина, если файл принадлежит пользователю с данным именем. Если имя_пользователя является числом и не встречается в файле /etc/passwd, оно рассматривается как идентификатор пользователя.

-group имя_группы Истина, если файл принадлежит группе с данным именем. Если имя_группы является числом и не встречается в файле /etc/group, оно рассматривается как идентификатор группы.

-size n[c] Истина, если файл занимает n блоков (по 512 байт). Если указана буква c, то размер файла задается в символах. Напомним, что с помощью комбинаций +n и -n можно проверять размер (и три указанные ниже характеристики) не только на равенство, но и на неравенство.

-atime n Истина, если последний доступ к файлу производился n дней назад. Сама команда find изменяет время доступа к каталогам, входящим в список_поиска.

-mtime n Истина, если файл последний раз модифицировался n дней назад.

-ctime n Истина, если характеристики файла (размер, режим доступа) последний раз изменялись n дней назад.

-exec команда Истина, если после выполнения команды возвращается нулевой код завершения. Запись команды должна заканчиваться экранированной точкой с запятой. Аргумент команды { } заменяется текущим маршрутным именем файла.

-ok команда Эквивалентно -exec за исключением того, что перед выполнением команды запрашивается подтверждение (в виде сгенерированной командной строки со знаком вопроса в конце) и она выполняется только при ответе y.

-print Всегда истина; вызывает выдачу маршрутного имени текущего файла.

-cpio устройство Всегда истина; вызывает вывод текущего файла на указанное устройство в формате (записями по 5120 байт).

-newer файл Истина, если текущий файл был модифицирован позднее указанного файла.

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

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

-local Истина, если файл физически находится на локальной системе.

(выражение) Истина, если истинно заключенное в скобки выражение (скобки должны быть экранированы от интерпретации shell'ом).


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

Унарная операция отрицания, обозначается !. Логическое И, обозначается пробелом. Логическое ИЛИ, обозначается -o.

ПРИМЕР



Удалить все файлы с именами a.out или *.o, доступ к которым не производился в течение недели:

find / \( -name a.out -o -name '*.o' \) \ -atime +7 -exec rm {} \;

Удалить из текущего каталога и его подкаталогов все файлы нулевого размера, запрашивая подтверждение:

find . -size 0c -ok rm {} \;

ФАЙЛЫ

/etc/passwd /etc/group

СМ. ТАКЖЕ

, , , .

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

СЮРПРИЗЫ

Команда

find / -depth

всегда завершается неудачей с сообщением

find: stat failed: : No such file or directory

Она исправно обходит все файлы, кроме корневого каталога.









FINGER(1)


ИМЯ

finger - Осуществляет поиск информации о пользователях.

СИНТАКСИС

finger [-bfilpqsw] [login1 [login2 ...]]

ОПИСАНИЕ

По умолчанию команда finger выводит в список для каждого пользователя системы UNIX на данный момент имя регистрации в систему, полное имя, имя терминала и статус записи (при отсутствии разрешения на запись перед терминальным именем указывается символ "*"), время простоя, время регистрации, нахождение места работы и телефонный номер (если они известны). (Время простоя отображается в минутах, если оно выведено одним целым числом, в часах и минутах, если в его отображении присутствует двоеточие (:), или в днях и часах, если в выводе присутствует символ "d".)

Кроме того, существует более длинный формат вывода и он используется командой finger в том случае, если задан список имен пользователей. (Допускаются наряду с первым и последним именами пользователей также и учетные имена.) Этот формат состоит из нескольких строк; он включает всю информацию, описанную выше, и, дополнительно, пользовательские входной каталог и интерпретатор shell регистрации, любой план, который пользователь разместил в файле .plan в своем входном каталоге, и проект, в соответствии с которым заданные пользователи работают в данный момент, взятый из файла .project, который также находится во входном каталоге. Если в домашней директории указанного пользователя находится файл .nofinger, то по команде finger информация об этом пользователе не возвращается.

ОПЦИИ

-b Сокращенный длинный формат вывода пользователей. -f Подавляет печать заголовка строки (короткий формат). -i Быстрый список пользователей с указанием времени простоев. -l Вызывает вывод в длинном формате. -p Подавляет печать файлов .plan. -q Быстрый список пользователей. -s Вызывает вывод в коротком формате. -w Вызывает узкий форматный список указанных пользователей.

ФАЙЛЫ

/etc/utmp Файл пользователей, работающих в данный момент в системе.

/etc/passwd Имена пользователей, места их работы, телефо- ны, входные каталоги и имена интерпретаторов shell.

$HOME/.plan Планы.

$HOME/.project Проекты.

$HOME/.nofinger Отказ.


СМ. ТАКЖЕ

.

РАЗРЕШЕНИЕ

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

ЗАМЕЧАНИЕ

Из файла .project выводится только первая строка.

Записи в файле /etc/passwd имеют следующий формат:

имя регистрации:пользовательский пароль(закоди- рованный):идентификатор пользователя ID:групповой иден- тификатор ID:комментарии: входной каталог:имя интерпре- татора shell регистрации

Поле комментариев в выводе команды finger подразделяется на отдельные поля. Например, в приведенной ниже записи из файла /etc/passwd:

blt:Tg6bLFzOwgfbA:47:5:Brian Foster,Mission,x70,767-1234 :/u/blt:/bin/shV

поле комментария "Brian Foster,Mission,x70,767-1234" состоит из данных, соответствующих значениям полей "Имя в реальной жизни", "Место работы" и "Домашний телефон" в списке вывода команды finger.

Время простоя вычисляется как время, прошедшее с момента выполнения каких-либо действий на данном терминале. Оно включает предыдущие вызовы команды finger, которая, возможно, модифицировала файл устройства /dev/tty??, соответствующий данному терминалу.









FINITO(1M)


НАЗВАНИЕ

finito - остановка системы и перезагрузка

СИНТАКСИС

/etc/finito

ОПИСАНИЕ

Утилита finito выполняет размонтирование всех смонтированных файловых систем, выталкивает буфера и вызывает init 6 [см. ].

Init обращается к команде для размонтирования корневой файловой системы и перезагрузки ОС, если это позволяет аппаратура.

Утилита finito написана на языке shell.

Finito может выполняться только в однопользовательском режиме.

СМ. ТАКЖЕ

, , , .



FIXHDR(1)


ИМЯ

fixhdr - Изменяет заголовки выполняемых двоичных файлов.

СИНТАКСИС

fixhdr option files

ОПИСАНИЕ

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

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

Для команды fixhdr существует следующий набор опций, задаваемых параметром option:

-xa Изменяет формат заголовка x.out на формат a.out.

-xb Изменяет формат заголовка x.out на формат b.out.

-x4 Изменяет формат заголовка x.out на формат a.out версии 4.2BSD.

-x5 [-n] Изменяет формат заголовка x.out на формат a.out версии 5.2 (система UNIX (TM) System V версия 2). Применение флага -n приводит к тому, что символьные имена, имеющие в начале символы подчеркивания, проходят без изменений.

-ax -c [11,86] Изменяет формат заголовка a.out на формат x.out. Флаг -c задает целевой центральный процессор. Число 11 указывает на центральный процессор PDP-11. Число 86 указывает на один из семейства 8086 центральных процессоров (8086, 8088, 80186, 80286 или 80386).

-bx Изменяет формат заголовка b.out на формат x.out.

-5x [-n] Изменяет формат заголовка a.out версии 5.2 (система UNIX (TM) System V версия 2) на формат x.out. Применение флага -n приводит к тому, что символьные имена, имеющие в начале символы подчеркивания, проходят без изменений.

-86x Добавляет формат заголовка x.out к формату объектного модуля 86rel. См. описание 86rel(3).

-F num Увеличивает (или изменяет) фиксированный размер стека, указанный в формате x.out заголовка. Значение num должно быть шестнадцатеричным числом.

-A num Увеличивает (или изменяет) адрес автономной загрузки, указанный в формате x.out заголовка. Значение num должно быть шестнадцатеричным числом.

-M[smlh] Изменяет модель формата x.out или 86rel. Модель отсылает к заданной модели компиляции при создании двоичного файла. При этом опция s относится к модели типа small (малой), m относится к модели типа medium (средней), опция l - к модели типа large (большой) и h - к модели типа huge (огромной).

-v [2,3,5,7] Изменяет версию системы XENIX, указанную в заголовке. Версия 2 системы XENIX была разработана на базе версии 7 системы UNIX.

-s s1=s2 [-s s3=s4] Изменяет символьные имена, при этом символьное имя s1 заменяется на имя s2.

-r Обеспечивает ненулевой размер таблицы решений.

-C cpu Устанавливает тип центрального процессора. Параметр cpu может принимать одно из значений 186, 286, 386, 8086 и другие.

ФАЙЛЫ

/usr/bin/fixhdr

СМ. ТАКЖЕ

a.out(3), 86rel(3).

ЗАМЕЧАНИЕ

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



FIXPERM(8)


НАЗВАНИЕ

fixperm - Корректирует и инициализирует режим доступа и право собственности на файлы.

СИНТАКСИС

fixperm [-cfgilnsvwDS [-d package]] specfile

ОПИСАНИЕ

fixperm выполняет согласование перечисляемых имен в каждой строке файла спецификаций specfile c соответствующей спецификацией. fixperm обычно используется для конфигурирования системы UNIX после инсталляции. Непривилегированные пользователи могут использовать fixperm только с опциями -n, -f, -D или -l. Для использования других опций необходим статус привилегированного пользователя.

Файл спецификаций имеет следующий формат: каждая непустая строка содержит либо комментарии, либо спецификацию элемента. Комментарием считается любой текст от знака # до конца строки. На одну строку полагается одна спецификация. Пользовательские и групповые идентификаторы должны задаваться в начале этого файла для каждого пользователя и для каждой группы, упоминаемых в этом файле. Синтаксис части определений прост: первое поле указывает на тип идентификатора (либо uid - пользовательский, либо gid - групповой), второе поле содержит именную ссылку на идентификатор и третье поле содержит соответствующий идентификатор. Например:

uid root 0

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

Описатель пакета - это произвольная строка внутри комплекта дистрибуции. Пакет - это набор файлов.

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

x Выполняемый. a Архивный. e Пустой файл (создается при заданаии опции -c). b Блочное устройство. c Символьное устройство. d Каталог. f Текстовый файл. P Поименованный конвейер.

Если спецификация элемента набрана строчной буквой, то связанный с ней файл - необязателен, и fixperm не возвратит сообщение об ошибке, если он отсутствует.


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

Опции

-cСоздает пустые файлы и каталоги. Также создает или модифицирует файлы устройств. -gЗадает для fixperm перечисление устройств, указанных в списке permlist (аналогично аргументу -f, задающему выдачу файлов на стандартный вывод). Не вызывает никаких изменений. -d packageОбрабатывает строки ввода, начиная со строки описателя заданного пакета (смотрите выше). Например, -dBASE обрабатывает только те элементы, которые принадлежат комплекту утилит пакета BASE. По умолчанию обрабатываются все строки. -u packageКак и в опции -d, с той разницей, что обрабатываются элемент, не являющиеся частью заданного пакета. -fВыдает файлы только на стандартный вывод. Файлы назначения не модифицируются. -iВыполняет проверку установки заданных пакетов. Возвращаемые значения: 0 пакет установлен полностью 4 пакет не установлен 5 пакет установлен частично

-lВыдает файлы и каталоги на стандартный вывод. Файлы назначения не модифицируются. -nВыводит только сообщения об ошибках. Файлы назначения не модифицируются. -DВыдает каталоги только на стандартный вывод. Файлы назначения не модифицируются. -vМногозначная опция; жалуется, если выполняемые файлы не загружаются, не имеют фиксированного стека, не являются отдельными I и D или не анализируются. -sВ дополнение к остальным файлам списка permlist модифицирует специальные файлы устройств. -wВыдает информацию о том, где (на каком томе) располагаются заданные файлы и каталоги. Следующие две строки формируют дистрибуцию и вызывают для архивирования файлов только из perms/inst в /dev/sample:

/etc/fixperm -f /etc/perms/inst > list tar cfF /dev/sample list

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

/etc/fixperm -nd BASE

ПРИМЕЧАНИЯ

Обычно fixperm запускается только программой-оболочкой во время инсталляции.

СМ. ТАКЖЕ

FLEX(1)


ИМЯ

flex,lex - ЛЕКСИЧЕСКИЙ АНАЛИЗАТОР

СИНТАКСИС

flex [-bcdfhilnpstvwBFILTV78+ -C[aefFmr] -Pprefix -Sskele- ton] [filename ...]

Введение

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

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

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

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

%% [\t]+$;

Программа содержит разграничитель %%, выделяющий начало фрагмента и одно правило. Это правило содержит регулярное выражение, которое выбирает один или более экземпляров пробелов или знаков табуляции (для наглядности пишется \t, в соответствии с правилами языка СИ) до конца строки. Скобки указывают на знаковый класс знака табуляции или пробела, + обозначает один или несколько предыдущих пунктов, и знак $ указывает на конец строки. Никаких действий не определяется, поэтому программа, созданная lex, будет просто игнорировать эти символы. Все остальное будет копироваться. Чтобы преобразовать любую цепочку пробелов и знаков табуляции в единственный пробел, добавьте еще одно правило:


%% [\t]+$; [\t]+ printf("");

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

Регулярные выражения lex

Регулярное выражение определяет набор строк, которые должны быть сопоставлены. Оно содержит текстовые символы (соответствующие символам в сравниваемых строках) и знаки операторов символы (указывающие на повторение, удаление и другие возможности). Буквы алфавита и цифры всегда являются текстовыми символами. Таким образом, регулярное выражение:

integer

подбирает литерную цепочку integer, где бы она ни появилась, а выражение

a57D

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

" \ [] ^ - ? . * + I () $ / {} % <>

Если какой-либо из этих знаков используются дословно, то это необходимо отмечать косой чертой (\). Группа знаков выделяется кавычками ("). Оператор кавычек указывает на то, что все, содержащееся между двумя выделяющими кавычками, воспринимается как символы текста. Таким образом

xyz"++"

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

"xyz++"

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

Знак оператора также может быть преобразован в текстовый символ, если перед ним поставить обратную косую черту (\):

xyz\+\+

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



\n знак новой строки \t знак табуляции \ b возврат на один знак назад с его удалением \\ обратная косая черта

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

Вызов lex

Компилирование исходной программы lex осуществляется в две стадии. Сначала исходная программа преобразуется в модуль на универсальном языке программирования. Затем программа (обычно с использованием библиотечных подпрограмм lex) транслируется и загружается. Созданная программа находится в файле с именем lex. yy.c. Библиотека ввода/вывода определяется в теминах стандартной библиотеки СИ. Доступ к библиотеке осуществляется с помощью флага загрузки -ll. Вот пример характерного набора команд:

lex source cc lex.yy.c -ll

Полученная программа помещается в файл a.out для последующего использования. Как применять lex вместе с yacc, описано в разделе "lex и yacc" этой главы и в главе 6 "YACC: компилятор компиляторов". Хотя подпрограммы ввода-вывода lex по умолчанию используют стандартную библиотеку СИ, производимые lex программы этого не делают. Если даны собственные варианты input(), output(), unput(), библиотека может не использоваться.

Описание классов символов

Классы символов задаются с помощью квадратных скобок [ и ]. Конструкция

[abc]

выбирает один из символов a, b или c. Внутри квадратных скобок большинство значений операторов игнорируется. Только три знака рассматриваются как специальные: обратная косая черта (\), тире (-) и символ (^). Символ тире задает перечисления. Например:

[a-z0-9<>_]

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

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



[-+0-9]

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

[^abc]

подбирает все символы, кроме a,b,c, включая все специальные и управляющие знаки, а

[^a-zA-Z]

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

Описание произвольного символа

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

[\40-\176]

подбираетет все печатаеные символы в коде ASCII, с восьмеричного 40 (пробел) до восьмеричного 176 (тильда).

Описание необязательных выражений

Оператор вопроса (?) указывает на необязательный элемент выражения. Таким образом

ab?c

подбирает ac или abc. Заметим, что значение оператора знака вопроса в данном случае отличается от его значения в командном процессоре.

Описание повторяющихся выражениий

Повторение классов обозначаются операторами звездочки (*) и плюса (+). Например:

a*

подбирает любую цепочку последовательных символов a, включая пустую, в то время как a+ подбирает один и более экземпляров a. Например:

[a-z]+

подбирает все цепочки строчных букв, и

[A-Za-z][A-Za-z0-9]*

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

Описание чередования и группировки

Оператор вертикальной черты (|) определяет чередование. Например:

(ab|cd)

подбирает ab или cd. Заметим, что круглые скобки используются для группировки, хотя они не являются необходимыми на внешнем уровне. Например:

ab|cd

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



(ab|cd+)?(ef)*

которое подбирает такие литерные цепочки, как abefef, efefef, cdef и cddd, но не abc, abcd или abcdef.

Описание зависимости от контекста

lex распознает только малую часть окружающего контекста. Для этого используются два простейших оператора: знак (^) и знак доллара ($). Если (^) - первый знак выражения, то выражение сопоставляется только в начале строки (после символа новой строки или в начале входного потока). Это не может противоречить другому значению символа (^), дополнению класса символов, так как дополнение применяется только внутри скобок. Если самым последним символом является зкак доллара, то выражение сопоставляется только в конце строки (если за ним сразу же следует знак новой строки). Этот оператор является частным случаем оператора косой черты (/), который указывает на последующий контекст. Выражение

ab/cd

подбирает строку ab, если за ней идет cd. Таким образом:

ab$

это то же самое, что

ab/\n

Левый контекст управляется из lex путем описания стартовых условий, которые объясняются в разделе "Описание зависимости от левого контекста". Если правило должно выполняться только в случае нахождения автоматического интерпретатора lex в стартовой позиции x, то оно должно быть заключено в угловые скобки:

<x>

Если мы считаем что стартовое условие ONE находится в начале строки, то оператор (^) будет эквивалентен

<ONE>

Стартовые условия будут детально описаны в этой главе.

Описание повторения выражений

Фигурные скобки ({ }) описывают или повторения (если они содержат число), или определение расширения (если оно содержит имя). Например:

{digit}

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

Описание определений

Определения задаются в первой части ввода lex, перед правилами.

a{1,5}

наоборот, ищет от 1 до 5 экземпляров символа a.

Наконец, начальный знак процента (%) является специальным, поскольку он разграничивает сегменты источника lex.

Описание действий

Когда выражение сопоставляется с образцом текста на вводе, lex выполняет соответствующие действия. Этот раздел описывает некоторые особенности lex, которые помогают при описании действий. Заметим, что существует действие по умолчанию, которое копирует входные данные на выход. Это выполняется для всех символов, которые в противном случае не сопоставляются. Таким образом, пользователь lex, который желает произвести полный ввод без какого-либо вывода, должен составить правила, подбирающие все данные. Если lex используется совместно с yacc, то это считается нормальной ситуацией. Вы можете рассматривать эти действия, как заменяющие копирование входных данных в выходные. Таким образом, правило простого копирования может быть опущено. Самое простое, что можно сделать, это проигнорировать ввод. Описание в качестве действия пустого оператора языка СИ приводит именно к этому результату. Часто используется правило



[\t\n];

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

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

" " | "\t" | "\n" ;

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

[a-z]+

lex хранит этот текст во внешнем символьном массиве с именем yytext. Так, чтобы напечатать найденное имя, используется правило типа

[a-z]+printf("%s",yytext);

которое печатает символьную строку, хранящуюся в yytext. Функция языка СИ printf(2) позволяет печатать формальные параметры и данные. В этом случае форматом является print string, где знак процента (%) указывает на преобразование данных, s обозначает тип символьной строки. Данными являются символы из yytext. Это переводит подобранную строку в выходные данные. Это действие настолько заурядно, что может быть написано через ECHO. Например:

[a-z]+ ECHO;

аналогично предыдущему примеру. Так как действие по умолчанию печатает только найденные символы, то может возникнуть вопрос: зачем нужно правило, описывающее только действие по умолчанию? Такие правила нужны, чтобы избежать сопоставления каких-то других, нежелательных правил. Например, если есть правило, которое сопоставляет read, то оно будет сопоставлять экземпляры read, заключенные в bread или readjust. Чтобы избежать этого, требуется правило

[a-z]+

Этот вопрос будет подробнее разобран далее.

Иногда бывает удобным знать конец найденных данных, поэтому lex подсчитывает число сопоставленных символов в переменной yyleng. Чтобы подсчитать и число слов и число символов, следует написать:

[a-zA-Z]+ {words++;chars+=yyleng;}

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



yytext[yyleng-1]

Иногда lex может решить, что правило не обнаружило соответствующий набор символов. Существуют две программы, помогающие в этой ситуации. Во-первых, может быть вызвана подпрограмма yymore(), предписывающая присоединить следующее вводимое выражение к концу текущего ввода. Обычно следующая вводимая символьная строка затирает текущий элемент в yytext. Во-вторых, может быть вызвана подпрограмма yyless(n), определяющая, что не все символы, подбираемые текущим выражением, требуются прямо сейчас. Ар гумент n указывает число символов, содержащихся в yytext. После дующие символы, которые уже были сопоставлены, возвращаются обратно на ввод. Это обеспечивает способ просмотра данных, ана логичный задаваемому оператором (/), но в другой форме.

Например, рассмотрим язык, который определяет группу симво лов, заключенных в кавычки, как символьную строку. Если в эту строку надо включить знак кавычек, то ему должна предшествовать обратная косая черта (\). Регулярные выражения, используемые для такого сопоставления, довольно сложны, поэтому предпочтительнее ввести:

\"[^"]* { if(yytext[yyleng-1]==`\\`) yymore(); else ...normal user processing }

При этом, если встретится

"abc\"def"

то будут сопоставляться первые пять символов

"abc\

Затем, вызов yymore() перенесет следующую часть символьной строки

"def

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

Функция yyless() в различных обстоятельствах может быть использована для повторной обработки текста. Рассмотрим проблему определения неоднозначного выражения =-a в старом варианте СИ. Допустим, что это требуется представить как =- a для последующей печати. Можно применить следующее правило:

=-[a-zA-Z] { printf("Operator(=-)ambiguous\n"); yyless(yyleng-1); ...action for=-... }

Будет печататься сообщение, после каждого оператора буква будет возвращаться во входной поток, а оператор будет трактоваться как =-.

Наоборот, может потребоваться трактовать это как = -a; чтобы добиться этого, уберите знак минус и букву для ввода. Интерпретация будет выполнена следующими строками:



=-[a-zA-Z { printf("Operator(=-)ambiguous\n"); yyless(yyleng-2); ...action for=... }

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

=-/[A-Za-z]

в первом случае, и

=/-[A-Za-z]

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

=-/[^\t\n]

В дополнение к этим программам, lex также разрешает доступ своим собственным подпрограммам ввода/вывода:

input(), которая возвращает следующий вводимый символ; output(с), которая выводит символ c; unput(с), которая помещает символ c обратно во входной поток, чтобы затем считать его с помощью input().

По умолчанию эти подпрограммы рассматриваются как макроопределения, но пользователь может заменить их собственными версиями. Эти подпрограммы устанавливают взаимосвязь между внешними файлами и внутренними символами, поэтому они все должны сохраняться или видоизменяться согласованно. Они могут быть переопределены, чтобы вызвать перемещение выходных или входных данных в другие области, включая другие программы или оперативную память. Но используемые наборы символов во всех подпрограммах должны быть согласованы. Нулевое значение, возвращаемое input(), должно означать конец файла. Связь между unput() и input() должна сохраняться, иначе просмотр вперед не будет осуществляться. lex вообще не будет выполнять просмотр вперед, если ему это не предписано. Но каждое провило, содержащее косую черту (/) или оканчивающееся одним из следующих символов подразумевает просмотр:

+ * ? $

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

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

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

Обработка неоднозначностей источника



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

предпочитается самое длинное сопоставление; предпочитается первое из правил, сопоставляющих одинаковое число символов.

Предположим, например, что даны слаедующие правила:

integer keyword action...; [a-z]+ identifier action...;

Если на входе intergers, это воспринимается как идентификатор, потому что

[a-z]+

сопоставляет восемь символов, в то время, как

integer

сопоставляет только 7. Если на входе integer, оба правила сопоставляют 7 символов, выбирается правило клавиатуры, поскольку оно задано первым. Что-либо более короткое (например, int) не сопоставляет выражение integer, поэтому используется интерпретация данных как идентификатора.

Принцип предпочтения наиболее длинного сопоставления делает некоторые конструкции, такие как

.*

опасными. Например,

`.*`

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

Представленное на входе выражение

`first`quoted string here,`second`here

подбирает

`first`quoted string here,`second`

Но это, возможно, не то, что требуется. Более приемлемо следующее правило:

`[^~\n]*`

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

[.\n]+

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

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



she s++; he h++; \n | . ;

где два последних правила игнорируют все, кроме he и she. Следует помнить, что точка (.) не подбирает знак новой строки. Так как she включает he, то lex не будет распзнавать экземпляры he внутри she: обработав she, он больше к этому месту не возвращается.

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

she {s++;REJECT;} he {h++;REJECT;} \n | . ;

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

Рассмотрим два правила:

a[bc]+{...;REJECT;} a[cd]+{...;REJECT;}

Если вводится ab, то сопоставляется только первое правило, если ad - только второе. Входная символьная строка accb сопоставляется первому правилу (для четырех символов), и второму - для трех. Наоборот, ввод accd сопоставляется второму правилу для четырех символов, затем первому для трех.

REJECT полезно всегда, когда целью lex является не разделение входного потока, а обнаружение всех экземпляров определенных элементов входных данных. Эти элементы могут перекрываться или содержать в себе друг друга. Допустим, что требуется числовая таблица входных данных; числа перекрываются аналогично тому, как слово "the" содержит th и he. Следует определить двумерный массив digram. Тогда подойдет такой источник:

%% [a-z][a-z] {digram[yytext[0]yytext[1]]++;REJECT;} . ; \n ;

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

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

Описание зависимости от левого контекста



Иногда необходимо иметь несколько наборов лексических правил и обращаться к ним в различное время в процессе ввода. Например, препроцессор компилятора должен различать операторы препроцессора и анализировать их отдельно от других операторов. Для этого надо учитывать предыдущий контекст. Существует несклько способов решения таких проблем. Оператор (^) - это оператор предшествующего контекста. Он распознает непосредственно предшествующий левый контекст после того, как оператор знака доллара ($) распознает правый контекст. Принципы обработки прилегающего левого контекста могли бы быть расширены для обеспечения возможностей, аналогичных обеспечиваемым анализои прилегающего правого контекста. Но вряд ли это так же полезно, поскольку нужный левый контекст часто появляется раньше например, в начале строки.

Этот раздел описывает три способа работы с различными контекстами:

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

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

Допустим, имеется следующая задача: скопировать входные данные в выходные, заменяя в каждой строке, начинающейся с буквы a, слово magic на first; заменяя magic на second в каждой строке, начинающейся с буквы b; и заменяя magic на third в каждой строке, начинающейся с буквы c. Все остальные слова и строки оставляются без изменений.

Эта задача настолько проста, что лучше всего воспользоваться эфлогом:



int flag; %% ^a {flag=`a`;ECHO;} ^b {flag=`b`;ECHO;} ^c {flag=`c`;ECHO;} \n {flag=0;ECHO;} magic { switch (flag) { case`a`:printf("first");break; case`b`:printf("second");break; case`c`:printf("third");break; default:ECHO;break; } }

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

% Start name1 name2...

где условия могут именоваться в любом порядке. Слово Start может быть заменено сокращением s или S. Об условиях можно упомянуть в начале программы, используя угловые скобки. Например, правило:

<name1> expression

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

BEGIN name1;

который меняет стартовое условие на name1. Для возврата в прежнее положение используйте оператор

BEGIN 0

который устанавливает начальные условия интерпретатора lex. Правило может действовать в нескольких стартовых условиях. Например:

<name1,name2,name3>

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

Пример, аналогичный предыдущему, может быть записан так:

% START AA BB CC %% ^a {ECHO;BEGIN AA;} ^b {ECHO;BEGIN BB;} ^c {ECHO;BEGIN CC;} \n {ECHO;BEGIN 0;} <AA>magic printf("first"); <BB>magic printf("second"); <CC>magic printf("third");

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

Описание определений источника

Вспомним формат источника lex:

{ определения } %% { правила } %% { подпрограммы пользователя }

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

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



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

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

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

Все расположенное после третьего ограничителя %% копируется после вывода lex, невзирая на формат.

Определения, предназначенные для lex, задаются до первого ограничителя %%. Любая строка этой секции, не заключенная между %{ и %} начинающаяся в первом столбце, рассматривается как определение замещающих строк lex. Формат этих строк следующий:

имя перевод

Это вызывает сопоставление строки, заданной как "перевод", с соответствующим именем. Имя и перевод должны разделяться, по крайней мере, одним пробелом или знаком табуляции, причем имя должно начинаться с буквы. Перевод может быть указан в правиле в формате {name}. Например, использование {D} для цифр и {E} для порядка экспоненты может сократить правила распознавания чисел:

D [0-9] E [DEde][-+]?{D}+ %% {D}+ printf("inreger"); {D}+"."{D}*({E})? | {D}*"."{D}+({E})? | {D}+{E} printf("real");



Первые два правила используются для вещественных чисел; в обоих необходима десятичная точка и десятичная часть. В первом правиле необходима хотя бы одна цифра перед десятичной точкой; во втором - хотя бы одна цифра после десятичной точки. Чтобы успешно разрешить проблемы, возникающие в языке FORTRAN при применении выражений вида 35.Q.I, которые не содержат целых чисел, помимо обычных правил для целых чисел используется контекс тно-зависимое правило:

[0-9]+/"."EQ printf("integer");

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

lex и yacc

Если вы используете lex совместно с yacc, помните: все написанное lex заносится в программу с именем yylex(); это имя потребуется анализатору yacc. Обычно принимаемая по умолчанию главная программа библиотеки lex вызывает эту подпрограмму. Но если yacc загружен и используется его главная программа, yacc будет вызывать yylex(). В этом случае все правила lex будут оканчиваться:

return (token);

которое возвращает значение соответствующей лексемы.

Простой способ получить доступ к именам лексем yacc - оттранслировать выходной файл lex как часть выходного файла yacc, поместив в последнюю секцию входных данных yacc следующую строку:

#include "lex.yy.c"

Предположим, грамматика имеет имя good, а лексические правила - имя better, тогда нужная последовательность команд XENIX может быть такой:

yacc good lex better cc y.tab.c-ly-ll

Библиотеку yacc(-ly) следует загрузить до загрузки библиотеки lex, чтобы получить главную программу, вызывающую анализатор yacc. Генерация программ lex и yacc может быть осуществлена в любом порядке.

В качестве простой задач, рассмотрим копировани входного файла с прибавлением 3 к каждому положительному числу, кратному 7. Вот пример исходной программы lex, показывающей как это делать:



%% int k [0-9]+ { k=atoi(yytext); if(k%7==0) printf("%d",k+3); else printf("%d",k); }

Правило [0-9] узнает строки цифр; atoi (см. atof(2)) - преобразует цифры в двоичные и накапливает результат в k. Оператор остатка (%) используется для проверки, является ли k кратным 7; если да, то к нему добавляется 3. Можно показать, что эта программа будет искажать входные данные типа 49.63 или X7

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

%% int k; -?[0-9]+ { k=atoi(yytext); printf("%d",k%7==0?k+3:k); } -?[0-9.]+ ECHO; [A-Za-z][A-Za-z0-9]+ ECHO;

Числовые строки, содержащие десятичные точки или начинающиеся с букв, будут отбираться одним из двух последних правил и изменяться не будут. if-else для экономии места замещается условным оператором СИ. Конструкция a?b:c означает: если a, то b, иначе c.

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

int lengs[100]; %% [a-z]+ lengs[yyleng]++; . | \n ; %% yywrap() { int i; printf("Length No. words\n"); for(i=0;i0) printf("%5d%10d\n",i,lengs[i]); return(1); }

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

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

a [aA] b [bB] c [cC] . . . . . . z [zZ]



Дополнительный класс распознает пробел:

w[\t]*

Первое правило переводит double precision в real или DOUBLE PRECISION в REAL.

{d}{o}{u}{b}{l}{e}{W}{p}{r}{e}{c}{i}{s}{i}{o}{n}{ printf(yytext[0]=='d'?"real":"REAL"); }

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

^" "[^0] ECHO;

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

[0-9]+{W}{d}{W}[+-}?{W}[0-9]+ | [0-9]+{W}"."{W}{d}{W}[+-]?{W}[0-9]+ | "."{W}[0-9]+{W}{d}{W}[+-]?{W}[0-9]+ { /*convert constants*/ for(p=yytext;*p!=0;p++) { if(*p=='d'*p=='D') *p+='e'-'d'; ECHO; }

После нахождения константы с плавающей точкой, она обрабатывается в цикле for с целью найти букву "d" или "D". Затем программа добавляет "'e'-'d'", что переводит ее в следующую букву алфавита. Модифицированная константа выводится снова, теперь уже одинарной точности. Далее приводится ряд имен, которые должны быть преобразованы с целью удалить начальную "d". При испльзовании массива yytext подобное действие удовлетворяет всем именам (здесь приводится только часть довольно длинного списка).

{d}{s}{i}{n} | {d}{c}{o}{s} | {d}{s}{q}{r}{t} | {d}{a}{t}{a}{n} | ... {d}{f}{l}{o}{a}{t}printf("%s",yytext+1);

Другой список имен изменяет начальную d на начальную a:

{d}{l}{o}{g} | {d}{l}{o}{g}10 | {d}{m}{i}{n}1 | {d}{m}{a}{x}1 { yytext[0]+='a'-'d'; ECHO; }

Еще одна подпрограмма изменяет начальную d на r:

{d}1{m}{a}{c}{h}{ yytext[0]+='r'-'d'; ECHO; }

Чтобы избежать восприятия таких имен, как имен dsinx, в качестве экземпляров dsin, некоторые конечные правила принимают более длинные слова как идентификаторы и копируют некоторые оставшиеся символы:



[A-Za-z][A-Za-z0-9]* | [0-9]+ | \n | . ECHO;

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

Описание наборов символов

Программы, созданные lex, осуществляют символьный ввод/вывод только с помощью подпрограмм input(), output(), unput(). Таким образом, символьное представление в этих подпрограммах допускается lex и используется для возврата значений в yytext. Для внутреннего использования символ представляется как малое целое. Если используется стандартная библиотека, он имеет значение, равное целому значению двоичного кода, представляющего символ на главной ЭВМ. Обычно буква a представляется в той же форме, что и символьная константа:

'a'

Если эта интерпретация изменяется добавлением подпрограмм ввода-вывода, транслирующих символы, то об этом надо информировать lex с помощью таблицы перекодировки. Эта таблица должна находиться в секции определений и должна отделяться строками, содержащими только %T. Таблица состоит из строк следующего вида:

{целое} {строка символов}

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

%T 1 Aa 2 Bb ... 26 Zz 27 \n 28 + 29 - 30 0 31 1 ... 39 9 %T

Эта таблица устанавливает соответствие заглавных и строчных букв целым числам от 1 до 26, знака новой строки - 27, плюса (+) и минуса (-) - 28 и 29, и цифр - числам от 30 до 39. Заметьте избегание знака новой строки. Если таблица задается, то каждый символ, который может появиться в правилах или в корректных входных данных, должен быть в нее включен. нельзя пользоваться значением 0 и значениями, выходящими за пределеы набора кодов, обеспечиваемого аппаратной частью.

Формат источника

Стандартная форма файла источника lex:

{определения} %% {правила} %% {подпрограммы пользователя}

Cекция определений содержит комбинацию следующих элементов:

Определения в форме "имя пробел перевод". Включаемый код в форме "пробел код". Включаемый код в форме



%{ код %}

Стартовые условия, задаваемые в форме:

%S имя1 имя2

Таблицы наборов символов в форме:

%T число пробел строка-символов %T

Изменения размеров внутреннего массива в форме:

%x nnn

где nnn - десятичное целое число, представляющее размер массива; x выбирает значение одного из следующих параметров:
Буква параметр p позиции n состояния e вершины дерева a переходы k упакованные классы символов o размер выходного массива

В секции правил строки имеют вид:

выражение действие

где действие может быть продолжено на следующих строках, если использовать фигурные скобки для обозначения границ. Регулярные выражения в lex используют следующие операторы:
x символ "x" "x" "x", даже если x - оператор \x "x", даже если х - оператор [xy] символ x или y [x-z] символы x,y или z [^x] любой знак, кроме x . любой знак, кроме знака новой строки ^x x в начале строки <y>x x, если lex находится в стартовом условии y x$ x в конце строки x? необязательный x x* 0,1,2,... экземпляров x x+ 1,2,3,... экземпляров x x|y x или y (x) x x/y x, но только если за ним следует y {xx} перевод xx из секции определений x{m,n} от m до n вхождений x

FLOFF(1)


НАЗВАНИЕ

floff - размонтирование дискеты

СИНТАКСИС

floff

ОПИСАНИЕ

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

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

СМ. ТАКЖЕ

flon(1).

mount(1M) в Справочнике администратора.



FLON(1)


НАЗВАНИЕ

flon - монтирование дискеты

СИНТАКСИС

flon

ОПИСАНИЕ

Команда flon служит для монтирования файловой системы, расположенной на дискете, на каталог /mnt. Затем командами вида

cp f2 /mnt cp /mnt/f1 .

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

После того, как все запланированные действия с дискетой выполнены, ее нужно размонтировать командой floff, и только после этого вынимать из дисковода.

Если при монтировании выдано сообщение о повреждении файловой системы, следует воспользоваться утилитой fsck(1M)

fsck -y /dev/dsk/fd

после чего повторить команду flon.

СМ. ТАКЖЕ

floff(1).

formatflop(1M), в Справочнике администратора.



FLOOR(3M)


НАЗВАНИЕ

floor, ceil, fmod, fabs - функции, вычисляющие ближайшее целое снизу и сверху, остаток от деления нацело, абсолютное значение

СИНТАКСИС

#include <math.h>

double floor (x) double x;

double ceil (x) double x;

double fmod (x, y) double x, y;

double fabs (x) double x;

ОПИСАНИЕ

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

Функция ceil возвращает минимальное целое, не меньшее x.

Функция fmod возвращает значение x, если y равно 0; в противном случае она возвращает число f того же знака, что x и притом такое, что

x = i * y + f

для некоторого целого i и |f| < |y|.

Функция fabs возвращает абсолютную величину x, |x|.

СМ. ТАКЖЕ

.



FOLD(1)FreeBSD Reference Manual


ИМЯ

fold - переносит строки, делая их не длиннее указанного размера

СИНТАКСИС

fold [-w width] file ...

ОПИСАНИЕ

Fold переносит окончание строки на следующую стоку, если длина исходной строки больше указанного значения. Если файл не указан производится чтение со стандартного ввода. Максимальная длина разбиваемой строки - 80 символов.

-w Указывает длину строки для разбиения. По умолчанию 80 символов. Длина строки должна быть не менее 8 если есть символы табуляции, или символы табуляции должны быть расширены командой expand(1) перед использованием fold.

ПРИМЕР

fold -w 10 file

file - файл содержащий строку: Эта строка разбита командой fold

даст: Эта строка разбита ко мандой fol d

СМ. ТАКЖЕ

expand(1)



FOPEN(3S)


НАЗВАНИЕ

fopen, freopen, fdopen - открыть поток

СИНТАКСИС

#include <stdio.h>

FILE *fopen (filename, type) char *filename, *type;

FILE *freopen (filename, type, stream) char *filename, *type; FILE *stream;

FILE *fdopen (fildes, type) int fildes; char *type;

ОПИСАНИЕ

Функция fopen открывает файл с именем filename, ассоциирует с ним поток и возвращает указатель на структуру типа FILE, соответствующую этому потоку.

Аргумент filename является указателем на цепочку символов - имя открываемого файла.

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

r Открыть на чтение. w Опустошить или создать для записи. a Добавлять; открыть для записи в конец файла или создать для записи. r+ Открыть для изменения (чтения и записи). w+ Опустошить или создать для изменения. a+ Добавлять; открыть или создать для изменения в конце файла.

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

Функция freopen обычно используется для привязки заранее открытых потоков stdin, stdout и stderr к другим файлам.

Функция fdopen ассоциирует поток с дескриптором файла fildes, полученным в результате выполнения системных вызовов open, dup, creat или , которые открывают файл, но не возвращают указатель на структуру типа FILE, описывающую поток. Этот указатель требуется для идентификации потока во многих библиотечных функциях подраздела 3S. Тип потока, заданный аргументом type, должен соответствовать режиму доступа к открытому файлу.

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

Если файл открывается для добавления (то есть тип type равен "a" или "a+"), то невозможно изменить информацию, уже содержащуюся в файле. Функция fseek может использоваться для перемещения указателя файла в любую его позицию, но при операции записи указатель текущей позиции файла игнорируется. Вся выводимая информация записывается в конец файла и указатель текущей позиции перемещается на конец записываемых данных. Если два процесса открывают один и тот же файл для добавления, то каждый процесс может писать в файл без риска разрушить вывод другого процесса. Данные, записываемые двумя процессами, будут перемежаться в файле в порядке их поступления.

СМ. ТАКЖЕ

, , , , , , .

ДИАГНОСТИКА

В случае ошибки функции fopen, fdopen и freopen возвращают пустой указатель NULL.



FORK(2)


НАЗВАНИЕ

fork - создание нового процесса

СИНТАКСИС

int fork ( )

ОПИСАНИЕ

Вызов fork приводит к созданию нового процесса (порожденного процесса) - точной копии процесса, сделавшего вызов (родительского процесса). Точнее, порожденный процесс наследует у родительского процесса следующие характеристики:

Окружение. Флаг "закрыть при выполнении вызова exec" [см. ]. Способы обработки сигналов (то есть SIG_DFL, SIG_IGN, SIG_HOLD, адреса функций обработки сигналов). Разрешение переустанавливать действующий идентификатор пользователя. Разрешение переустанавливать действующий идентификатор группы. Состояние профилирования (включено/выключено). Значение поправки к приоритету [см. ]. Все присоединенные разделяемые сегменты памяти [см. ]. Идентификатор группы процессов. Идентификатор группы терминала [см. ]. Текущий рабочий каталог. Корневой каталог. Маска режима создания файлов [см. ]. Ограничение на размер файла [см. ].

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

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

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

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

СМ. ТАКЖЕ

, , , , , , , , , , , , , .

ДИАГНОСТИКА

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



FORMAT(1M)


НАЗВАНИЕ

format - форматирование дискового тома

СИНТАКСИС

/etc/format/ бесструктурное_устройство

ОПИСАНИЕ

Форматирование дискового тома, заданного именем бесструктурного_устройства. Характеристики тома берутся из таблицы томов. Вся информация на томе теряется.

ПРИМЕР

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

/etc/format /dev/rdsk/fd



FORMATFLOP(1M)


НАЗВАНИЕ

formatflop - форматирование дискеты

СИНТАКСИС

formatflop

ОПИСАНИЕ

Утилита formatflop служит для форматирования дискеты. Утилита диалоговая, она запрашивает метки файловой системы и тома.

СМ. ТАКЖЕ

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



FPGETROUND(3C)


НАЗВАНИЕ

fpgetround, fpsetround, fpgetmask, fpsetmask, fpgetsticky, fpsetsticky - управление окружением выполнения операций с плавающей точкой (стандарт IEEE)

СИНТАКСИС

#include <ieeefp.h>

typedef enum fp_rnd { FP_RN = 0, /* округление до ближайшего */ FP_RP = 1, /* округление до большего */ FP_RM = 2, /* округление до меньшего */ FP_RZ = 3 /* округление до целого */ } fp_rnd;

fp_rnd fpsetround ( );

fp_rnd fpsetround (rnd_dir) fp_rnd rnd_dir;

#define fp_exept int #define FP_X_INV 0x10 /* некорректная операция */ #define FP_X_OFL 0x08 /* переполнение */ #define FP_X_UFL 0x04 /* потеря значимости */ #define FP_X_DZ 0x02 /* деление на нуль */ #define FP_X_IMP 0x01 /* потеря точности */

fp_exept fpgetmask ( );

fp_exept fpsetmask (mask); fp_exept mask;

fp_exept fpgetsticky ( );

fp_exept fpsetsticky (sticky); fp_exept sticky;

ОПИСАНИЕ

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

Функция fpgetround( ) возвращает текущий режим округления.

Функция fpsetround( ) устанавливает новый режим округления и возвращает предыдущий режим.

Функция fpgetmask( ) возвращает текущую маску для обработки исключительных ситуаций.

Функция fpsetmask( ) устанавливает новую маску и возвращает предыдущее значение маски.

Функция fpgetsticky( ) возвращает текущие значения бит навязчивости.

Функция fpsetsticky( ) устанавливает (или сбрасывает) биты навязчивости и возвращает предыдущие значения.

СМ. ТАКЖЕ

.

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

Функции fpsetsticky( ) и fpsetmask( ) изменяют все биты навязчивости или все биты маски соответственно.

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

ОГРАНИЧЕНИЯ

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

Аналогично, перед вызовом fpsetmask( ) необходимо сбросить взведенные биты маски.



FREAD(3S)


НАЗВАНИЕ

fread, fwrite - двоичный ввод/вывод

СИНТАКСИС

#include <stdio.h>

#include <sys/types.h>

int fread (ptr, size, nitems, stream) char *ptr; int nitems; size_t size; FILE *stream;

int fwrite (ptr, size, nitems, stream) char *ptr; int nitems; size_t size; FILE *stream;

ОПИСАНИЕ

Функция fread считывает nitems элементов данных из заданного потока ввода stream в область памяти, на начало которой указывает аргумент ptr. Элементом данных считается последовательность байт (не обязательно завершающаяся нулевым байтом) длины size. Функция fread прекращает считывание байт в случае достижения конца файла, обнаружения ошибки, а также если считаны nitems элементов. После выполнения функции fread текущей позицией в потоке становится байт, следующий за последним прочитанным; содержимое потока stream не изменяется.

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

Аргументом size, как правило, является sizeof(*ptr), где псевдофункция sizeof возвращает длину элемента данных, адресуемых указателем ptr. Если аргумент ptr не является указателем на символ, его следует преобразовать к типу (char *).

СМ. ТАКЖЕ

, , , , , , , , , .

ДИАГНОСТИКА

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



FREC(1M)


НАЗВАНИЕ

frec - извлечение файлов, сохраненных на ленте

СИНТАКСИС

/etc/frec [-p маршрут] [-f файл_запросов] магнитофон номер_описателя:имя ...

ОПИСАНИЕ

Утилита frec извлекает файлы, сохраненные на магнитной ленте (магнитофон задается как бесструктурное устройство, обычно /dev/mt). Предполагается, что сохранение выполнялось посредством программ или . Задаются номера_описателей файлов и имена, которые файлы получают после восстановления.

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

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

-f файл_запросов Указание файла, который содержит запросы на извлечение файлов. Формат строк этого файла следующий:

номер_описателя:имя

ПРИМЕРЫ

Извлечь файл с номером описателя 1216 и поместить его содержимое в файл f1 рабочего каталога:

/etc/frec /dev/mt 1216:f1

Извлечь файлы с описателями 14156, 1232, 3141 и по- местить их содержимое в файлы /usr/guest/a, /usr/ guest/b и /usr/tmp/a.c соответственно:

/etc/frec -p /usr/guest /dev/mt 014156:a 1232:b \ 3141:/usr/tmp/a.c

СМ. ТАКЖЕ

, , .

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

СЮРПРИЗЫ

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



FREXP(3C)


НАЗВАНИЕ

frexp, ldexp, modf - манипуляции над компонентами вещественных чисел

СИНТАКСИС

double frexp (value, eptr) double value; int *eptr;

double ldexp (value, exp) double value; int exp;

double modf (value, iptr) double value, *iptr;

ОПИСАНИЕ

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

x * 2^n

где мантисса (x) находится в диапазоне 0.5 |x| < 1.0, а порядок (n) являет собой целое число. Для аргумента value, заданного как вещественное число двойной точности, функция frexp возвращает значение мантиссы с двойной точностью и помещает значение порядка по адресу, задаваемому указателем eptr. В случае value, равного 0, функция frexp оба результата выдает нулевыми.

Функция ldexp возвращает величину (value * 2^exp).

Функция modf возвращает дробную часть аргумента value (со знаком), а целую часть (получаемую отбрасыванием дробной) помещает по адресу, задаваемому указателем iptr.

ДИАГНОСТИКА

Если при обращении к функции ldexp возникнет переполнение, то будет возвращено, в зависимости от знака value, значение +HUGE или -HUGE [см. ], а переменной errno будет присвоено значение ERANGE. Если же результирующее число, напротив, окажется слишком малым, чтобы его можно было представить, то функцией ldexp будет возвращено нулевое значение, а переменной errno будет присвоено значение ERANGE.



FROM(1)FreeBSD Reference Manual


ИМЯ

from - печатает имена тех, от кого пришла почта

СИНТАКСИС

from [-s sender] [-f file] [user]

ОПИСАНИЕ

From печатает все строки с заголовком from: из почтового ящика

ОПЦИИ

-f file Использовать файл file вместо почтового ящика пользователя, вызвавшего from. Если опция -f используется, аргумент user не может присутсвовать. Если имя файла присутсвует - читает со стандартного ввода. -s sender Печатается только почта от указанных адресатов в строке sender.

Если аргумент user присутсвует, то читается его почтовый ящик, а не почтовый ящик пользователя, вызвавшего from. (Только для суперпользователя).

ФАЙЛЫ

/var/mail/*

СМ. ТАКЖЕ

biff(1),

ИСТОРИЯ

Команда from появилась в 3.0BSD.



FS(4)


НАЗВАНИЕ

fs - формат тома, содержащего файловую систему

СИНТАКСИС

#include <sys/types.h> #include <sys/param.h> #include <sys/filsys.h>

ОПИСАНИЕ

На всех томах файловой системы хранится в стандартном формате определенная жизненно важная информация. Каждый том (блочное устройство) разделен на некоторое количество секторов, имеющих длину 1024 байт. Размер всех файлов кратен, а внутренних буферов равен килобайту. Рекомендуется пользоваться константой BUFSIZ, равной размеру сектора. Она определена во включаемом файле <stdio.h>. Необходимо помнить и о том, что утилиты , в целях совместимости работают с 512 байтными блоками. Еще большей осторожности требует бесструктурный ввод/вывод. Драйверы диска не поддерживают 512-байтные блоки, так что при использовании команды надо указывать размер буфера кратным килобайту. Правда, при нумерации блоков драйверы ввода/вывода по-прежнему считают их 512-байтными.

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

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

Суперблок имеет следующий формат:

struct filsys { ushort s_isize; /* Размер списка описателей файлов в блоках */ daddr_t s_fsize; /* Размер всего тома в блоках */ short s_nfree; /* Количество адресов в массиве s_free */ daddr_t s_free[NICFREE]; /* Список свободных блоков */ short s_ninode; /* Кол-во описателей фай- лов в масс. s_inode */ ino_t s_inode[NICINOD]; /* Список свободных описа- телей файлов */ char s_flock; /* Блокир. при опер. со списком своб. блоков */ char s_ilock; /* Блокир. при опер. со списком опис. файлов */ char s_fmod; /* Флаг модификации супер- блока */ char s_ronly; /* Флаг монтирования только на чтение */ time_t s_time; /* Время последнего обнов- ления суперблока */ short s_dinfo[4]; /* Информация об устройстве */ daddr_t s_tfree; /* Кол-во свободных блоков */ ino_t s_tinode; /* Кол-во свободных описа- телей файлов */ char s_fname[6]; /* Имя файловой системы */ char s_fpack[6]; /* Имя тома */ long s_fill[14]; /* Заполнитель, чтобы sizeof(filsys)==512 */ long s_state; /* Состояние файловой сис- темы */ long s_magic; /* Маг. число новой (вер- сии V.3) файл. сист. */ long s_type; /* Тип новой файловой сис- темы */ };


#define FsMAGIC 0xfd187e20 /* Значение s_magic */

#define Fs1b 1 /* Блок по 512 байт */ #define Fs2b 2 /* Блок по 1024 байта */

#define FsOKAY 0x7c269d38 /* s_state: нормальная */ #define FsACTIVE 0x5e72d81a /* s_state: активная */ #define FsBAD 0xcb096f43 /* s_state: плох.корень */ #define FsBADBLK 0xbadbc14b /* s_state: есть плохие блоки */

Поле s_type определяет тип файловой системы. В настоящее время поддерживаются два типа файловых систем: старая, с 512-байтными логическими блоками и новая, улучшенная, с 1024-байтными блоками. Поле s_magic используется для того, чтобы отличить старую 512-байтную систему от новой. Если значение этого поля не совпадает с магическим числом FsMAGIC, то тип файловой системы принимается равным Fs1b, то есть система считается старой; в противном случае используется значение s_type. Операционная система заботится о корректности преобразования номеров логических блоков в номера физических секторов.

Поле s_state определяет состояние файловой системы. Для успешно размонтированной, неповрежденной файловой системы s_state имеет значение FsOKAY. После того, как система была смонтирована с целью внесения изменений, состояние изменяется на FsACTIVE. По-особому обрабатывается корневая файловая система. Если во время загрузки ОС обнаруживается, что корневая файловая система повреждена, она монтируется, но отмечается признаком FsBAD. Позже, после того, как она будет размонтирована, будет установлено состояние FsOKAY.

Поле s_isize задает адрес первого блока данных после списка описателей файлов; сам список описателей начинается со второго блока. Таким образом, список описателей файлов имеет длину s_isize-2 блока. Значение s_fsize есть первый блок, который потенциально недоступен для размещения файлов. Эти два числа используются системой для выявления плохих номеров блоков; если неверный номер блока получается из списка свободных блоков или, наоборот, освобождается, то на системную консоль выводится диагностическое сообщение. Более того, список свободных блоков очищается, чтобы предотвратить дальнейшее получение номеров блоков из возможно поврежденного списка.



Список свободного пространства для каждого тома устроен следующим образом. Массив s_free содержит до 50 номеров свободных блоков s_free [0], ..., s_free [s_nfree - 1]. Блок с номером s_free [0] является следующим элементом списка свободного пространства. Нулевое слово (длинное целое) в этом блоке содержит количество (до 50) номеров свободных блоков, указанных в последующих 50 словах, причем первое слово одновременно служит ссылкой на следующий элемент списка свободного пространства с аналогичной структурой. Иными словами, каждый элемент списка свободного пространства располагается в начале свободного блока и устроен так же, как пара полей s_nfree и s_free, играющая роль заголовка списка.

Чтобы занять свободный блок, надо уменьшить значение s_nfree и выделить блок с номером s_free [s_nfree]. Если номер выделенного блока равен 0, это означает, что на томе нет свободных блоков, то есть имеет место ошибка. Если значение s_nfree стало нулевым, нужно прочитать выделенный блок, поместить его нулевое слово в поле s_nfree, а последующие 50 слов - в массив s_free.

При освобождении блока, если значение s_nfree равно 50, следует скопировать пару полей s_nfree и s_free в начало этого блока, записать блок и установить s_nfree равным 0. В любом случае, номер освобождаемого блока помещается в элемент массива s_free [s_nfree], после чего поле s_nfree увеличивается на 1.

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

Поле s_ninode хранит количество номеров свободных описателей файлов в массиве s_inode. Чтобы занять свободный описатель файла в случае, когда s_ninode больше 0, это поле следует уменьшить на 1 и выделить описатель с номером s_inode [s_ninode]. Если же значение s_ninode равно 0, нужно перебрать описатели файлов и номера свободных (не более 100) поместить в массив s_inode, после чего снова попытаться выделить описатель.

При освобождении описателя, если значение s_ninode меньше 100, номер описателя следует поместить в элемент массива s_inode [s_ninode] и увеличить поле s_ninode на 1. Если же значение s_ninode равно 100, не стоит заботиться о регистрации факта освобождения. Дело в том, что таблица номеров свободных описателей предназначена только для ускорения их поиска; В самом описателе есть признак, свободен он или занят.



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

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

Флаг s_ronly означает защиту от записи.

Поле s_time есть время последней модификации суперблока файловой системы. Оно измеряется количеством секунд, прошедших с 00:00:00 1 января 1970г. (по Гринвичу).

Поле s_fname есть имя файловой системы, а s_fpack - имя тома.

Номера описателей файлов начинаются с 1. Длина описателя составляет 64 байта. Описатель номер 1 в настоящее время не используется. Описатель номер 2 зарезервирован для корневого каталога файловой системы. Другие описатели не имеют предопределенного назначения. Каждый описатель соответствует одному файлу. Формат описателя файла см. в .

ФАЙЛЫ

/usr/include/sys/fs/*

СМ. ТАКЖЕ

, .

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









FSAVE(8)


НАЗВАНИЕ

fsave - резервное копирование файловых систем с контролем ошибок в неинтерактивном режиме.

СИНТАКСИС

fsave filesystem [dumpinfo] [mediainfo] [sitename]

ОПИСАНИЕ

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

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

Для всех подсказок введение h,H или ? осуществляет выдачу на экран краткой сводки всех возможных ответов.

Дамп файловой системы (резервное копирование)

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

Level dumplevel dump of filesystem filesistem, date media size: size feet [or Kb] media drive: drive This media will be saved for howlong, and is howvital.

M)ounted volume, P)ostpone, C)heck or F)ormat volumes, R)etension or H)elp:

Выведенные величины задают следующие инструкции: filesystem должна быть скопирована с помощью магнитной ленты длиной size футов (или size килобайт для емких дискет), установленной на драйве(дисководе) drive. Носители media будут храниться howlong ("1 год", "2 месяца" и т.д.), причем уровень резервного копирования dumplevel будет howvital ("критическим", "предупредительным" и т.д.).

Опции меню таковы:

mУстановлен (с правом записи) том запрошенного размера size, можно начинать резервное копирование (дамп). mnewsizeДоступны тома недостаточного размера, поэтому вместо них установлен большой том размера newsize. Если дамп выйдет за пределы одного тома, то последующие тома должны быть того же размера. pРезервное копирование откладывается (fsphoto автоматически повторит копирование этой файловой системы в следующий раз). cПовторная проверка на ошибки томов, используемых для резервного копирования файловой системы filesystem. Эта опция полезна, когда дамп таинственным образом срывается, и fsave начинает все сначала, но оператор не видит действительной причины (например, стример случайно остался в режиме "offline", или осталась незапертым задвижка дисковода гибких дисков) и хочет перепроверить носители. fФорматирование установленного в текущий момент носителя (главным образом эта опция опция полезна для дискет). rПеренатяжка ленты с помощью /usr/bin/tape.

<


/p>

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

Проверка форматирования

Проверка форматирования носителей "критического" уровня выполняется с помощью :

Check vital volumes for format errors M)ounted first volume, S)kip format check, or H)elp:

Опции меню таковы:

mПервый том уже (или еще) установлен, и dumpdir может начинать проверку его форматирования. sПроверка форматирования тома пропускается, и осуществляется проверка ошибок чтения (см. ниже). Проверка ошибок чтения

Все тома читаются с помощью restor(1), которая осуществляет контроль ошибок во время этого чтения. Если возникает ошибка, то дамп объявляется неудавшимся и начинается сначала.

Check vital volumes for read errors M)ounted which volume, E)rror on previos volume, D)one, S)kip checks, or H)elp:

Опции меню таковы:

mТом which ("первый" или "следующий") установлен в дисководе и готов к проверке на ошибки чтения. eНа последнем проверяемом томе возникла ошибка, и дамп следует повторить. dВсе тома проверены, ошибок не обнаружено, резервное копирование файловой системы было завершено успешно. sПропуск проверки на ошибки чтения для остальных томов. Каждый том должен быть проверен на ошибки чтения; restor запрашивает тома для проверки от первого до последнего. Тома, на которых обнаруживаются ошибки чтения, должны быть помечены, как "подозрительные" и сняты, а дамп повторен сначала.

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

Аргументы

fsave обычно запускается программой fsphoto, которая передает ей все необходимые аргументы, взятые из базы данных .

filesystem Файловая система, подлежащая резервному копированию. dumpinfo Набор разделенных пробелами строк, которые предоставляют некоторую необязательную информацию о данном резервном копировании:

dumplevel size savetime importance marker



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

dumplevel Уровень выполняемого дампа, задаваемый одной цифрой от 0 до 9 (передаваемой дампу) или буквы x (означающей, что дамп выполнять не надо). По умолчанию выполняется дамп нулевого уровня. size Объем промежуточных носителей, которые будут использованы (в футах для ленты и в килобайтах для дискет). size относится к первому из размеров, перечисленных в mediainfo. Это значение используется по умолчанию. savetime Время хранения резервной копии (например, "3 месяца"). По умолчанию - "1 год". importance Уровень важности данного резервного копирования? (Например, "критический" или "предупредительный"). Форматирование копий "критического" уровня проверяется программой dumpdir. По умолчанию задается "важный" уровень. marker Помещает на каждом томе метку "none"("никакой" - по умолчанию) или метку дополнительного типа (например, "a pink sticker" - розовая наклейка)

Типичный вид dumpinfo:

9 1200 "2 weeks" useful "a blue X"

определяет, что будет выполняться дамп уровня 9 на 1200-футовой ленте (или на 1200 килобайтовой дискете), который будет храниться 2 недели с меткой "голубой крест" (в дополнение к метке более содержательного типа). Эта резервная копия считается просто "полезной" (useful) и не будет проверяться с помощью dumpdir. mediainfo Набор разделенных пробелами строк, задающих некоторую необязательную информацию об используемом носителе:

drive d density sizes ... [format] drive k sizes ... [format]

drive Имя используемого для резервного копирования устройства. По умолчанию - /dev/rmt0. k sizes ... Если задано значение k, устройство drive предполагается дисководом гибких дисков, а список размеров sizes определяет емкости дискет, которые могут быть использованы (в килобайтах). d density sizes ... В противном случае, должно быть задано значение d. В этом случае drive считается магнитной лентой с плотностью записи density (битов на дюйм) и с одной из возможных емкостей sizes (в футах). format Используется команда форматирования ленты или дискеты так, как это описано.



Информация mediainfo, описывающая 9- дорожечную магнитную ленту, будет выглядеть так:

media /dev/rmt0 d 1600 2400 1200 600 media /dev/rmt2 d 800 1400 1200 600

определяя, что /dev/rmt0 - это магнитная лента с плотностью записи 1600 бит/дюйм емкостью 2400,1200 или 600 футов, а /dev/rmt2 - с плотностью записи 800 бит/дюйм.

Дискета может быть описана так:

media /dev/fd0 k 1024 format /dev/fd0

что означает, что /dev/fd0 - мегабайтная дискета (1024 килобайта), сформатированная командой:

format /dev/fd0

sitename Место выполнения резервного копирования (например, название компании или здания). Заметьте, что имя дескриптора из /etc/systemid автоматически помещается в область меток томов.

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

ФАЙЛЫ

/etc/systemid Имя машины. /etc/ddate Регистрация последнего резервного копирования каждой файловой системы. /dev/tty Всегда присутствующее символьное устройство.

СМ. ТАКЖЕ

, , , , restor(1), .

ДИАГНОСТИКА

Резервное копирование завершается успешно (код завершения 0), но ошибки генерируют соответствующее сообщение и статус выхода 1. fsave сообщает о неправильном вводе аргументов и выходит с кодом завершения 2.

Резервное копирование файловой системы filesystem откладывается, и fsave выходит с кодом завершения 3.









FSCK(1M)


НАЗВАНИЕ

fsck, dfsck - проверка целостности файловой системы и интерактивная коррекция ошибок

СИНТАКСИС

/etc/fsck [-y] [-n] [-s[число_блоков_на_цилиндре:промежуток]] [-S[число_блоков_на_цилиндре:промежуток]] [-t файл] [-q] [-D] [-f] [файловая_система ...]

/etc/dfsck [набор_опций_1] файловая_система_1 ... - [набор_опций_2] файловая_система_2 ...

ОПИСАНИЕ

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

Опциям утилиты fsck приписан следующий смысл:

-y Считать, что на все вопросы дается положительный ответ.

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

-s[число_блоков_на_цилиндре:промежуток] Игнорировать существующий список свободных блоков и создать новый список, перезаписав суперблок файловой системы. При этой операции файловая система должна быть размонтирована. Если размонтирование системы невозможно (например, для корневой системы), то необходимо убедиться, что к файловой системе нет обращений, а сразу после выполнения операции перезагрузить систему. Такая предосторожность необходима для того, чтобы старая, плохая копия суперблока, находящаяся в памяти, больше не использовалась и не была записана на диск.

Опция -s позволяет создать список свободных блоков, оптимальный с точки зрения времени доступа. Если аргументы опции не указаны, используются значения, заданные при создании файловой системы [см. ]. Если и при создании файловой системы они не были заданы, используется пара 400:7.

-S[число_блоков_на_цилиндре:промежуток] Условная реконструкция списка свободных блоков. Эта опция действует так же, как описанная выше опция -s, однако список свободных блоков реконструируется, только если не было обнаружено нарушений целостности файловой системы. При использовании опции -S считается, что на все вопросы, задаваемые fsck, дается отрицательный ответ. Эта опция полезна для принудительной реорганизации списка свободных блоков целостных файловых систем.

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

-q Молчаливый вариант fsck. Не печатаются сообщения о возможных ошибках в размере файлов. Именованные каналы, на которые нет ссылок, удаляются без всяких сообщений. Если требуется, счетчики в суперблоке автоматически исправляются, список свободных блоков восстанавливается.

-D Каталоги проверяются на наличие плохих блоков (используется после аварийных завершений системы).

-f Быстрая проверка. Проверяются блоки и размеры (1 фаза) и список свободных блоков (5 фаза). Если необходимо, список свободных блоков реконструируется (6 фаза).

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


Если файловая_система не указана, проверяются файловые системы из списка, хранящегося в файле /etc/checklist.

Выявляются следующие нарушения целостности файловой системы:

На блок имеется более одной ссылки из описателей файлов и/или списка свободных блоков. Блок, на который ссылается описатель файла или список свободных блоков, находится за пределами файловой системы. Некорректные счетчики числа ссылок. Проверка размеров:


некорректное число блоков;

размер каталога не кратен 16. Некорректный формат описателя файла Наличие неучтенных блоков. Проверка каталогов:


элемент каталога указывает на свободный описатель файла;

недопустимый номер описателя файла. Проверка суперблока:


более 65536 описателей файлов;

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

Непустые файлы, на которые нет ссылок, с согласия пользователя (а каталоги - обязательно) перемещаются в каталог lost+found. Если не указана опция -n, пустые файлы и каталоги удаляются. Каталог lost+found должен существовать, располагаться в корне проверяемой файловой системы и иметь свободные места для внесения новых элементов. Чтобы удовлетворить всем требованиям, надо перед выполнением fsck создать каталог /lost+found, записать в него несколько файлов, а потом удалить их.

Утилита dfsck позволяет одновременно проверять целостность двух групп файловых систем, расположенных на двух устройствах с независимым доступом. Набор_опций передается утилите fsck для обработки соответствующей группы файловых_систем. Группы разделяются символом -. Перед каждым сообщением dfsck печатает имя файловой системы, к которой сообщение относится. Свои ответы на вопрос утилиты dfsck пользователь должен начинать с 1 или 2, что означает номер группы, к которой относится ответ.

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

ФАЙЛЫ

/etc/checklist Список файловых систем, проверяемых по умолчанию.

СМ. ТАКЖЕ

checkfsys(1M), , , .

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

СЮРПРИЗЫ

В каталогах, для элементов . и .., не проверяется корректность номеров описателей файлов.










FSCK(8)


НАЗВАНИЕ

fsck - проверяет и восстанавливает файловые системы.

СИНТАКСИС

/bin/fsck [option] [filesystem]

ОПИСАНИЕ

fsck проверяет и восстанавливает в интерактивном режиме несогласующиеся места файловых систем XENIX. Если файловая система внутренне согласованна, то выдается сообщение о количестве файлов, количестве занятых и свободных блоков. Если же файловая система содержит внутренние противоречия, то оператор получает подсказки по согласованию перед каждой корректировкой. Следует отметить, что большинство корректировок приводит к какой-либо потере информации. Уровень и объем потерь может быть определен по диагностической выдаче. (Опытный оператор может снять противоречия вручную с помощью отладчика файловых систем .) По умолчанию во всех случаях согласующих корректировок ожидается ответ оператора "yes" (да) или "no" (нет). Если оператор не имеет разрешения на запись fsck активизирует по умолчанию действие опции -n.

fsck воспринимает следующие аргументы:

-yПредполагает ответ "yes" на все вопросы fsck. -nПредполагает ответ "no" на все вопросы fsck; открытие файловой системы для записи не допускается. -sb:cИгнорирует существующий список свободных блоков и (безусловно) создает новый, перезаписывая супер-блок файловой системы. В этот период файловая система должна быть демонтирована.

Опция -sb:c позволяет сформировать оптимальную организацию списка свободных блоков. Поддерживаются следующие варианты:

-s

-sБлок/цилиндр:Пропускаемые блоки (interleave-фактор фактор прослаивания, чередования считываемых и пропускаемых блоков).

Если b:c не задается, то используются величины, которые использовались во время создания файловой системы. Если они тоже не заданы, тогда по умолчанию устанавливаются некоторые разумные значения.

-SПерестраивает список свободных блоков по условию. Эта опция аналогична опции sb:c за исключением того, что список свободных блоков перестраивается только в том случае, когда в файловой системе противоречий не обнаружено. Использование опции -S принудительно определяет ответ "no" на все вопросы, задаваемые fsck. Эта опция полезна для принудительной реорганизации списка свободных блоков у неиспорченных файловых систем.
-t Если fsck не может получить достаточный объем памяти для хранения своих таблиц, она использует временный файл. При использовании опции -t в следующем аргументе задается имя временного файла, если это необходимо. Следите, чтобы между -t и этим именем был пробел, иначе fsck будет использовать в качестве этого файла всю файловую систему и затрет весь диск. Если во время инсталляции вы создали временную файловую систему, то тогда вы можете использовать в качестве имени этого файла /dev/scratch, при устовии, что временная файловая система - не больше корневой файловой системы. В отсутствие аргумента -t fsck выводит подсказку для ввода имени временного файла. Выбранный файл не должен находиться в проверяемой файловой системе, и если этот файл не является специальным или уже существующим, то по завершении работы fsck он удаляется. Если система занимает большой жесткий диск, то в другой файловой системе может не оказаться достаточного пространства для этого временного файла. В таких случаях при наличии дисковода гибких дисков используйте в качестве временного файла, к примеру, /dev/fd0 на чистой отформатированной дискете.
-qfsck в режиме без сообщений. На этапе 1 сообщения о проверке размеров не выводятся. Неадресуемые файлы fif05 выборочно удаляются. Если fsck потребует этого, значения в суперблоке автоматически фиксируются, а список свободных блоков сохраняется.
-DКаталоги сканируются в поисках плохих блоков. Опция полезна после системного сбоя.
-fБыстрая проверка. Проверяются блоки и размеры (этап 1) и список свободных блоков (этап 5). При необходимости список свободных блоков будет перестроен (этап 6).
-rrВосстанавливает корневую файловую систему. Требуемый аргумент filesystem должен относиться к корневой файловой системе и предпочтительно к устройству блочного типа (обычно /dev/root). При этом устанавливается опция -y и перебивается -n. Если требуются какие-либо изменения файловой системы, система автоматически разгружается для обеспечения целостности данной файловой системы.


-c Вызывает преобразование любой поддерживаемой файловой системы к типу текущей файловой системы. Пользователю предлагается подтвердить запрос на каждую файловую систему, требующию преобразования, если только не задана опция -y. Рекомендуется проверка с помощью этой опции каждой файловой системы в демонтированном состоянии, если она будет использоваться в текущей версии системы XENIX. Для модификации активной корневой файловой системы, последюю следует проверить следующим образом:


fsck -c -rr /dev/root

Если значение fylesystem не задано, fsck читает список устанавливаемых по умолчанию файловых систем в файле /etc/checklist.

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

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

Неправильное количество блоков. Отсутствует выравнивание размера каталога по модулю 16-ти байтов.

Неправильный формат индексного дескриптора. Проверка каталогов:

Файл указывает на незарезервированный индексный дескриптор. Номер индексного дескриптора за пределами допустимого диапазона.

Проверка суперблока:

Наличие более, чем 65536 индексных дескрипторов. На индексные дескрипторы приходится больше блоков, чем есть в файловой системе.

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

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

ФАЙЛЫ



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

/etc/default/boot Автоматическое управление загрузкой.

СМ. ТАКЖЕ

, , checklist(3), filesystem(3), init(5)

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

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

ПРЕДУПРЕЖДЕНИЕ

Файловые системы, созданные под управлением XENIX-86 версии 3.0, не поддерживаются системой XENIX System V, потому что организация слова в типе переменных long изменена. fsck способна проверять и восстанавливать файловые системы XENIX версии 3.0, если организация слова - правильная.

Для корневой файловой системы следует запускать "fsck -rr /dev/root". Для всех прочих файловых систем следует использовать "fsck /dev/??" на несмонтированном устройстве блочного типа.

ДИАГНОСТИКА

Этап инициализации

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

Общие ошибки

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

CAN NOT SEEK: BLK B (CONTINUE?) Попытка переместить заданный блок с номером B не удалась. Возникновение такой ошибки указывает на наличие серьезной проблемы (вероятно, аппаратной поломки), которая может потребовать дополнительной помощи. CAN NOT READ: BLK B (CONTINUE?) Попытка прочесть заданный блок с номером B не удалась. Возникновение такой ошибки указывает на наличие серьезной проблемы (вероятно, аппаратной поломки), которая может потребовать дополнительной помощи. CAN NOT WRITE: BLK B (CONTINUE?) Попытка записать в заданный блок с номером B не удалась. Возможно, что диск защищен от записи.



Значение ответов Yes/No

Подсказкаn(no)y(yes) CONTINUE?Прерывает программу.(Это - рекомендуемый ответ.) Попытка продолжения выполнения проверки файловой системы. Однако, часто проблема остается. Состояние ошибки не позволяет осуществить полную проверку файловой системы. Для перепроверки файловой системы следует запустить fsck повторно. Этап 1: Проверка блоков и размеров

На этом этапе проверяется список индексных дескрипторов.

Значение ответов Yes/No - Этап 1

Подсказкаn(no)y(yes) CONTINUE?Прерывает программу.(Это - рекомендуемый ответ.)Попытка продолжения выполнения программы. Эта ошибка означает, что полная проверка файловой системы невозможна. Для перепроверки файловой системы следует запустить fsck повторно. CLEAR?Состояние ошибки игнорируется. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причин ошибки.Индексный дескриптор I освобождается обнулением его содержимого. Это может повлечь ошибку UNALLOCATED (свободного состояния) на этапе 2 для каждой входной структуры каталога, указывающей на этот дескриптор.

Сообщения об ошибках на этапе 1

UNKNOWN FILE TYPE I=I (CLEAR?) Состояние слова индексного дескриптора I предполагает, что это дескриптор не является ни конвейером, ни специальным дескриптором символьного типа, ни регулярным дескриптором, ни дескриптором каталога. LINK COUNT TABLE OVERFLOW (CONTINUE?) Внутренняя таблица fsck, содержащая резервные дескрипторы с нулевым значением адресации звеньев, переполнена. B BAD I=I Индексный дескриптор I содержит блок с номером B, меньшим, чем номер первого блока данных файловой системы, или большим, чем последний блок этой файловой системы. Эта ошибка может вызвать состояние EXCESSIVE BAD BLKS на этапе 1, если индексный дескриптор I имеет слишком много блоков за пределами файловой системы. Это состояние вызывает ошибку BAD/DUP на этапах 2 и 4. EXCESSIVE BAD BLOCKS I=I (CONTINUE?) Индексный дескриптор I содержит больше допустимого (обычно 10) блоков с номерами меньше номера первого блока данных или больше номера последнего блока файловой системы. B DUP I=I Индексный дескриптор I содержит блок с номером B, принадлежащий другому дескриптору. Эта ошибка может повлечь состояние EXCESSIVE DUP BLKS на этапе 1, если дескриптор I содержит слишком много таких блоков. Это состояние вызывает аналогичную ошибку на этапе 1B и ошибку BAD/DUP на этапах 2 и 4. EXCESSIVE DUP BLKS I=I (CONTINUE?) Дескриптору I принадлежит больше допустимого (обычно 10) блоков, принадлежащих также другим дескрипторам. DUP TABLE OVERFLOW (CONTINUE?) Внутренняя таблица fsck, содержащая номера двойных блоков, переполнена. POSSIBLE FILE SIZE ERROR I=I Размер дескриптора I не соответствует действительному количеству используемых им блоков. Это - лишь предупреждение. Если используется опция -q, то это сообщение не выводится. DIRECTORY MISALIGNED I=I Размер каталога дескриптора I не кратен 16 байтам. Это - лишь предупреждение. Если используется опция -q, то это сообщение не выводится. PARTIALLY ALLOCATED INODE I=I (CLEAR?) Дескриптор I не является ни свободным, ни зарезервированным.



Этап 1B: Повторный поиск двойных блоков

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

B DUP I=I Дескриптор I содержит блок с номером B, на который указывает другой дескриптор. Эта ошибка вызывает состояние BAD/DUP на этапе 2. Индексные дескрипторы с перекрывающими блоками могут быть определены поиском этого состояния и состояния DUP на этапе 1.

Этап 2: Проверка наименований путей

На этом этапе удаляются испорченные индексные дескрипторы, выявленные на этапах 1 и 1B.

Значение ответов Yes/No - Этап 2
Подсказкаn(no)y(yes) FIX? Прерывает программу, так как fsck не способна продолжать работу. На этапе 2 ответ этот ответ на подсказку FIX? возвращает: Change the root i-node type to "directory." (Измените тип дескриптора на тип "каталог") Если блоки данных корневого дескриптора не являются блоками каталога, то генерируется огромное количество состояний ошибок.

Подсказкаn(no)y(yes) CONTINUE? Прерывает программу. Игнорирует состояние DUPS/DUP для корневого дескриптора и пытается продолжить выполнение проверки файловой системы. Ошибка в корневом дескрипторе может повлечь массу других ошибочных состояний.

REMOVE? Состояние ошибки игнорируется. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причин ошибки. Удаляет двойные и свободные блоки.

Сообщения об ошибках на этапе 2

ROOT INODE UNALLOCATED. TERMINATING Корневой индексный дескриптор (всегда дескриптор с номером 2) не имеет битов режима резевирования. Возникновение этой ошибки указывает на наличие серьезной проблемы. Программа останавливается. ROOT INODE NOT DIRECTORY (FIX?) Корневой индексный дескриптор (всегда дескриптор с номером 2) не является дескриптором каталога. DUPS/BAD IN ROOT INODE (CONTINUE?) В корневом дескрипторе (всегла дескриптор с номером 2) файловой системы на этапах 1 или 1B обнаружены двойные или дефектные блоки. I OUT OF RANGE I=I NAME=F (REMOVE?) Входная структура F католога содержит индексный дескриптор с номером I, выходящим за пределы списка дескрипторов. UNALLOCATED I=I OWNER=O MODE=M SIZE=S MTIME=T NAME=F (REMOVE?) Входная структура F католога содержит индексный дескриптор I без битов режима резервирования. Выводятся имя файла и имя его владельца, а также значения режима, размера, времени модификации этого файла. Если файловая система не смонтирована, и опция -n не задана, то данная входная структура удаляется автоматически при условии, что дескриптор, на который она указывает, имеет нулевой размер. DUP/BAD I=I OWNER=O MODE=M SIZE=S MTIME=T DIR=F (REMOVE?) На этапах 1 или 1B обнаружены двойные или дефектные блоки, связанные со входной структурой F дескриптора I каталога. Выводятся имя файла и имя его владельца, а также значения режима, размера, времени модификации этого файла. P/BAD I=I OWNER=O MODE=M SIZE=S MTIME=T FILE=F (REMOVE?) На этапах 1 или 1B обнаружены двойные или дефектные блоки, связанные со входной структурой F файлового дескриптора I. Выводятся имя файла и имя его владельца, а также значения режима, размера, времени модификации этого файла. BAD BLK B IN DIR I=I OWNER=O MODE=M SIZE=S MTIME=T Это сообщение появляется лишь в случае использования опции -D. Сбойный блок обнаружен в дескрипторе I каталога. Ищутся блоки каталога с ненулевыми фиктивными входными структурами, противоречивыми структурами "." и "..", а также с вкраплениями косых черт в полях имен. Это сообщение означает, что пользователю следует в последующем либо удалить дескриптор каталога, если блок полностью выглядит сбойным, или изменить (удалить) некорректный входные структуры этого каталога.



Этап 3: Контроль связности

На этом этапе выполняются операции, касающиеся связности каталога, исследовавшейся на этапе 2.

Значение ответов Yes/No - Этап 3
Подсказкаn(no)y(yes) RECONNECT? Игнорирует ошибку. На этапе 4 это влечет ошибку UNREF. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причины ошибки. Восстанавливает дескриптор I каталога в каталоге для потерянных файлов (обычно - lost+found) файловой системы. Если при соединении дескриптора I с каталогом lost+found имеются проблемы, то это может повлечь ошибку состояния lost+found. Если соединение было успешным, то это может повлечь сообщение типа CONNECTED.

Сообщения об ошибках на этапе 3

UNREF DIR I=I OWNER=O MODE=M SIZE=S MTIME=T (RECONNECT?) Дескриптор I каталога при проверке файловой системы не был связан со входной структурой каталога. Выводятся значения режима, размера, времени модификации дескриптора I и владелец O. Программа fsck воссоединяет непустой каталог принудительно. SORRY. NO lost+found DIRECTORY В корневом каталоге файловой системы отсутствует каталог lost+found; fsck игнорирует запрос на соединение каталога в lost+found. Это вызывает состояние ошибки UNREF на этапе 4. Возможно, имеется проблема с режимом доступа для lost+found. SORRY. NO SPACE IN lost+found DIRECTORY В каталоге lost+found корневого каталога файловой системы нет места для добавления еще одной входной структуры; fsck игнорирует запрос на соединение каталога в lost+found. Это вызывает состояние ошибки UNREF на этапе 4. Удалите из lost+found ненужные структуры или расширьте его (См. Процедуру 5.2). DIR I=I1 CONNECTED. PARENT WAS I=I2 Это - сообщение совещательного типа, указывающее на то, что дескриптор I1 каталога был успешно соединен с каталогом lost+found. Родительский дескриптор I2 дескриптора I1 замещается номером дескриптора каталога lost+found.

Этап 4: Проверка адресации

На этом этапе осуществляется проверка адресации между звеньями, подготовленная на этапах 2 и 3.



Значение ответов Yes/No - Этап 3
Подсказкаn(no)y(yes) RECONNECT? Игнорирует ошибку. На этапе 4 это влечет ошибку CLEAR. Восстанавливает дескриптор I каталога в каталоге для потерянных файлов (обычно lost+found) файловой системы. Если при соединении дескриптора I с каталогом lost+found имеются проблемы, то это может повлечь ошибку состояния lost+found.

CLEAR? Состояние ошибки игнорируется. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причин ошибки. Освобождает дескриптор посредством обнуления его содержимого.

ADJUST? Состояние ошибки игнорируется. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причин ошибки. Заменяет адресацию файлового индексного дескриптора I на Y.

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

Сообщения об ошибках на этапе 4

UNREF DIR I=I OWNER=O MODE=M SIZE=S MTIME=T (RECONNECT?) Дескриптор I каталога при проверке файловой системы не был связан со входной структурой каталога. Выводятся значения режима, размера, времени модификации дескриптора I, а также имя владельца. Если опция -n опущена, и файловая система не смонтирована, то пустые файлы чистятся автоматически. Непустые файлы не чистятся. SORRY. NO lost+found DIRECTORY В корневом каталоге файловой системы отсутствует каталог lost+found; fsck игнорирует запрос на соединение каталога в lost+found. Это вызывает состояние ошибки CLEAR на этапе 4. Возможно, имеется проблема с режимом доступа для lost+found. SORRY. NO SPACE IN lost+found DIRECTORY В каталоге lost+found корневого каталога файловой системы нет места для добавления еще одной входной структуры; fsck игнорирует запрос на соединение каталога в lost+found. Это вызывает состояние ошибки CLEAR на этапе 4. Проверьте размер и содержимое lost+found. (CLEAR) Только что упомянутый в сообщении UNREF дескриптор не может быть воссоединен. LINK COUNT FILE I=I OWNER=O MODE=M SIZE=S MTIME=T COUNT=X SHOULD BE Y (ADJUST?) Значение указателя дескриптора I, представляющего собой файл, равняется X, но должно быть равно Y. Выводятся значения режима, размера, времени модификации и владелец O. LINK COUNT DIR I=I OWNER=O MODE=M SIZE=S MTIME=T COUNT=X SHOULD BE Y (ADJUST?) Значение указателя дескриптора I, представляющего собой каталог, равняется X, но должно быть равно Y. Выводятся значения режима, размера, времени модификации дескриптора каталога и владелец O. LINK COUNT F I=I OWNER=O MODE=M SIZE=S MTIME=T COUNT=X SHOULD BE Y (ADJUST?) Значение указателя для имени F дескриптора I, равняется X, но должно быть равно Y. Выводятся значения режима, размера, времени модификации дескриптора, имя файла F и его владелец O. UNREF FILE I=I OWNER=O MODE=M SIZE=S MTIME=T (CLEAR?) Дескриптор I, представляющий собой файл, при проверке файловой системы не был связан со входной структурой каталога. Выводятся значения режима, размера, времени модификации дескриптора I и владелец O. Если опция -n опущена, и файловая система не смонтирована, то пустые файлы чистятся автоматически. Непустые файлы не чистятся. UNREF DIR I=I OWNER=O MODE=M SIZE=S MTIME=T (CLEAR?) Дескриптор I, представляющий собой каталог, при проверке файловой системы не был связан со входной структурой каталога. Выводятся значения режима, размера, времени модификации дескриптора I и владелец O. Если опция -n опущена, и файловая система не смонтирована, то пустые каталоги чистятся автоматически. Непустые каталоги не чистятся. BAD/DUP FILE I=I OWNER=O MODE=M SIZE=S MTIME=T (CLEAR?) На этапах 1 или 1B обнаружены двойные или дефектные блоки, связанные с файловым дескриптором I. Выводятся имя владельца и значения режима, размера, времени модификации дескриптора. BAD/DUP DIR I=I OWNER=O MODE=M SIZE=S MTIME=T (CLEAR?) На этапах 1 или 1B обнаружены двойные или дефектные блоки, связанные с дескриптором I каталога. Выводятся имя владельца и значения режима, размера, времени модификации дескриптора. FREE INODE COUNT WRONG IN SUPERBLK (FIX?) Действительные значения указателей свободных инодов не согласуются со значениями в суперблоке файловой системы. Если задана опция -q, значение указателя в суперблоке будет исправлено автоматически.



Этап 5: Проверка списка свободных блоков

Значение ответов Yes/No - Этап 5
Подсказкаn(no)y(yes) CONTINUE? Прерывает программу. Игнорирует остаток списка свободных блоков и продолжает выполнение fsck. Эта ошибка всегда вызывает состояние BAD BLKS IN FREE LIST впоследствии на этапе 5.

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

SALVAGE? Состояние ошибки игнорируется. Ответ NO допустим только в том случае, когда пользователь намерен предпринять другие меры для выяснения причин ошибки. Заменяет действующий список свободных блоков новым списком. Новый список будет оптимизирован по времени ожидания доворота диска в соответствии со спецификациями опций -s и -S.

Сообщения об ошибках на этапе 5

EXCESSIVE BAD BLKS IN FREE LIST (CONTINUE?) Список свободных блоков содержит больше допустимого (обычно 10) блоков с номерами меньше номера первого блока данных или больше номера последнего блока файловой системы. EXCESSIVE DUP BLKS IN FREE LIST (CONTINUE?) Список свободных блоков содержит больше допустимого (обычно 10) блоков, упомянутых индексными дескрипторами или более ранними частями этого списка. BAD FREEBLK COUNT Указатель свободных блоков в списке свободных блоков больше 50 или меньше 0. Эта ошибка всегда влечет состояние BAD FREE LIST позже на этапе 5. X BAD BLKS IN FREE LIST X блоков в списке свободных блоков имеют номера меньше номера первого блока данных или больше номера последнего блока файловой системы. Эта ошибка всегда влечет состояние BAD FREE LIST позже на этапе 5. X DUP BLKS IN FREE LIST В списке свободных блоков обнаружено X блоков, упомянутых индексными дескрипторами или в более ранних частях этого списка. Эта ошибка всегда влечет состояние BAD FREE LIST позже на этапе 5. X BLK(S) MISSING В списке свободных блоков обнаружено X блоков, неиспользующихся в файловой системе. Эта ошибка всегда влечет состояние BAD FREE LIST позже на этапе 5. FREE BLK COUNT WRONG IN SUPERBLK (FIX?) Действительное количество свободных блоков не согласуются со значениями в суперблоке файловой системы. BAD FREE LIST (SALVAGE?) Этому сообщению всегда предшествует одно или несколько сообщений на этапе 5. Если задана опция -q, то список свободных блоков сохраняется автоматически.



Этап 6: Сохранение списка свободных блоков

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

Сообщения об ошибках на этапе 6

DEFAULT FREE-BLOCK LIST SPACING ASSUMED Это - сообщение совещательного типа, указывающее на то, что количество пропускаемых блоков (величина щели) больше, чем количество блоков в цилиндре, или меньше 1, или, что количество блоков в цилиндре - больше 500. При этом устанавливаются значения: 7 пропускаемых блоков и 400 блоков в цилиндре.

Этап чистки

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

Сообщения на этапе чистки

X files blocks Z free Это информационное сообщение, указывающее на то, что проверенная файловая система содержит X файлов, используя Y блоков и оставив свободными Z блоков. ***** BOOT XENIX (NO SYNC!) ***** Это информационное сообщение указывает, что смонтированная файловая система или корневая файловая система модифицировалась программой fsck. Если систему XENIX немедленно не перезагрузить без использования sync, то работа, проделанная fsck, может быть сведена на нет с помощью встроенных копий таблиц, которые хранит система XENIX. Если в команде fsck была задана опция -b, и данная файловая система является корневой, то перезагрузка выполняется автоматически. ***** FILE SYSTEM WAS MODIFIED ***** Это информационное сообщение указывает, то текущая файловая система модифицировалась программой fsck.










FSCV(1M)


НАЗВАНИЕ

fscv - преобразование файловых систем между процессора- ми M68000 и VAX-11/780

СИНТАКСИС

/etc/fscv [-v] [-m] исходная_файловая_система [целевая_файловая_система]

ОПИСАНИЕ

Утилита fscv способна преобразовать исходную_файловую_систему из формата M68000 в формат VAX-11/780 и наоборот. Суперблок, список свободных блоков и описатели файлов преобразуются к требуемому выходному формату, который задается опцией командной строки:

-v Преобразовать файловую систему из формата M68000 в формат VAX. -m Преобразовать файловую систему из формата VAX в формат M68000.

Должна быть задана ровно одна из двух опций.

Утилита fscv может быть выполнена как на процессоре M68000, так и на процессоре VAX.

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

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

Непосредственно перед преобразованием необходимо проверить целостность исходной_файловой_системы [см. ]. Ни исходная, ни целевая файловые системы не должны быть смонтированы. Модификация любой из них во время работы утилиты fscv приведет к разрушению результата. Рекомендуется предварительно сделать копию исходной_файловой_системы, если преобразование выполняется на том же месте, поскольку аварийное завершение системы, ошибка ввода/вывода и т.д. приведут к разрушению информации. Заметим также, что если указана целевая_файловая_система, ее прежнее содержимое после работы утилиты fscv пропадет.

ПРИМЕРЫ

Скопировать и преобразовать файловую систему из фор- мата M68000 в формат VAX:

/etc/fscv -v /dev/rdsk/hd0s0 /dev/rdsk/hd0s1

Преобразовать на месте из формата VAX в формат M68000:

/etc/fscv -m /dev/rdsk/cntrlr_1s0

СЮРПРИЗЫ

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

СМ. ТАКЖЕ

.



FSDB(1M)


НАЗВАНИЕ

fsdb - отладчик файловых систем

СИНТАКСИС

/etc/fsdb файловая_система [-]

ОПИСАНИЕ

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

Файловая_система задается именем содержащего ее специального файла.

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

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

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

Отладчик fsdb распознает следуюшие символы:

# Абсолютный адрес. i Преобразование номера описателя файла в адрес описателя. b Преобразование в адрес блока. d Смещение элемента каталога. +, - Адресная арифметика. q Выход. >, < Сохранение/восстановление адреса = Числовое присваивание. =+ Присваивание с увеличением. =- Присваивание с уменьшением. =" Присваивание цепочки символов. O Включение/выключение контроля корректности адресов. p Общее средство печати. f Средство печати файлов. B Байтный режим. W Полусловный режим. D Словный режим (слово считается 32-битным). ! Вызов shell'а.


При печати выводимую информацию можно форматировать различными способами. До начала печати текущий адрес приводится к границе, определяемой режимом. В процессе печати текущий адрес увеличивается и в итоге становится равным адресу последнего напечатанного элемента. Вывод можно прервать, введя символ прерывания. Если за символом p идет число, то выводится указанное количество элементов. Производится проверка на выход за границу блока, так как логически последовательные блоки в общем случае физически не последовательны. Если после символа p задан 0, то выводятся все элементы до конца текущего блока. Доступны следующие опции печати:
i Печатать как описатели файлов. d Печатать как каталоги. o Печатать как восьмеричные слова. e Печатать как десятичные слова. c Печатать как символы. b Печатать как восьмеричные байты.

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

Точки, табуляции и пробелы можно использовать в качестве разделителей функций, что, впрочем, не обязательно. Строка с единственным символом перевода строки увеличит текущий адрес на размер выведенного последним элемента данных. Тем самым адрес устанавливается на следующий байт, полуслово, слово, элемент каталога или описатель файла, это позволяет перемещаться по однородным элементам файловой системы. Информация выводится в формате, соответствующем типу данных. Байты, полуслова и слова изображаются следующим образом: сначала идет восьмеричный адрес, а за ним значение в восьмеричном и десятичном виде. Окончания .B или .D добавляются соответственно к адресам байтных или словных величин. Каталоги выводятся так: сначала смещение элемента каталога, за ним десятичный номер описателя файла и символьное представление имени элемента. Описатели файлов выводятся с поименованными полями:
md Режим доступа. ln Число ссылок. uid Числовой идентификатор владельца. gid Числовой идентификатор группы. sz Размер файла в байтах. a# Номера блоков данных (0-12). at Время последнего доступа. mt Время последней модификации. ct Время последнего изменения описателя. maj Старший номер устройства. min Младший номер устройства. <



/p>

ПРИМЕРЫ



Вывести описатель файла с номером 3689. Описатель 3689 становится текущим:

3689i

Присвоить 4 полю числа ссылок текущего описателя файла:

ln=4

Увеличить на 1 поле числа ссылок:

ln=+1

Вывести в текстовом формате нулевой блок файла, ассоциированного с текущим описателем:

fc

Вывести первые 32 элемента корневого каталога данной файловой системы:

2i.fd

Сделать текущим описатель, ассоциированный с 5-м элементом каталога (нумерация с 0), найденным по предыдущей команде. Затем первый логический блок этого файла вывести в текстовом виде:

d5i.fc

Вывести суперблок данной файловой системы в восьмеричном виде:

512B.p0o

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

2i.a0b.d7=3

Поле имени в элементе каталога заменить на цепочку символов name. При использовании nm двойные кавычки не обязательны, если первый символ является буквой:

d7.nm="name"

Вывести третий блок файла, ассоциированного с текущим описателем, в формате элементов каталога:

a2b.p0d

СМ. ТАКЖЕ

.

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









FSDB(8)


НАЗВАНИЕ

fsdb - отладчик файловых систем.

СИНТАКСИС

/etc/fsdb special [-]

ОПИСАНИЕ

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

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

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

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

Символы, распознаваемые fsdb:

#абсолютный адрес iпреобразование индекса в адрес дескриптора bпреобразование к адресу блока dсмещение поля каталога +,-адресная арифметика qвыход >,<сохранение, восстановление адреса =численное присваивание =+присваивание со сложением =-присваивание с вычитанием ="присваивание символьной строки Oпереключатель проверки ошибок pобщие средства печати fсредство печати файлов Bбайт Wслово Dдвойное слово !выход в оболочку

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

iпечатать как индексный дескриптор dпечатать как каталог oпечатать в восьмиричном виде eпечатать десятичными словами cпечатать в символьном виде bпечатать восьмиричными байтами

<


/p>

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

Точки, табуляции и пробелы могут использоваться в качестве разграничителей, но не обязательны. Строка, содержащая лишь символ перевода на новую строку, увеличит текущий адрес на размер типа последнего напечатанного элемента. То есть адрес будет установлен на следующий байт, слово, двойное слово, запись каталога или дескриптор, позволяя пользователь осуществлять продвижение по части файловой системы. Информация печатается в соответствии с типом данных. Байты, слова и двойные слова выводятся вместе с восьмиричным адресом, за которым следует восьмиричное или десятичное значение. Для значений в байтовом представлении или в виде двойных слов к адресу добавляются .B и .D соответственно. Каталоги печатаются в виде смещения поля каталога, за которым следуют десятичный индекс и символьное представление имени. Индексные дескрипторы печатаются с метками полей, описывающих каждый элемент.

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

mdрежим lnуказатель цепи (link count) uidпользовательский идентификатор gidгрупповой идентификатор szразмер файла a#номера блоков данных (0 - 12) atвремя доступа mtвремя модификации majглавное (большее) число устройство minмалое ( меньшее) число устройства ПРИМЕРЫ

386i выдача индекса 386 в формате индексного дескриптора. При этом он становится текущим рабочим дескриптором. ln=4 изменение указателя цепи для рабочего индексного дескриптора на 4. ln=+1 увеличение этого указателя на 1. fc выдача в символьном ASCII виде нулевого блока файла, связанного с рабочим дескриптором. 2i.fd печать первых 32 записей каталога корневого дескриптора данной файловой системы. d5i.fc переустановка с текущего дескриптора на дескриптор, соответствующий пятой записи каталога (начиная с 0), найденной по приведенной выше команде. Первый логический блок файла после этого печатается в символьном виде. 512B.p0o печатает суперблок файловой системы в восьмиричном виде. 2i.a0b.d7=3 переустанавливает индекс седьмого поля каталога в корневом каталоге на 3. В этом примере демонстрируется также, как можно скомбинировать в одной командной строке несколько операций. d7.nm="name" переустанавливает поле имени в каталоге на заданную строку. Если первый символ - буква, то при использовании c nm кавычки необязательны. a2b.p0d печатает третий блок текущего индексного дескриптора в виде записей каталога.

СМ. ТАКЖЕ

, dir(3), filesystem(3).

FSEEK(3S)


НАЗВАНИЕ

fseek, rewind, ftell - установка текущей позиции потока

СИНТАКСИС

#include <stdio.h>

int fseek (stream, offset, ptrname) FILE *stream; long offset; int ptrname;

void rewind (stream) FILE *stream;

long ftell (stream) FILE *stream;

ОПИСАНИЕ

Функция fseek устанавливает позицию следующей операции ввода/вывода для потока stream. Новая позиция находится на расстоянии offset байт от начала, от текущей позиции или от байта, содержащего признак конца файла в зависимости от значения аргумента ptrname (0, 1 или 2 соответственно). Если значение offset отрицательно, то новая позиция будет расположена левее точки отсчета.

Действие функции rewind (stream) совпадает с действием функции fseek (stream, 0L, 0). Отличие только в том, что функция rewind не возвращает никакого значения.

Функции fseek и rewind аннулируют действие функции .

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

Функция ftell возвращает смещение текущей позиции относительно начала файла, ассоциированного с указанным потоком stream.

СМ. ТАКЖЕ

, , , , .

ДИАГНОСТИКА

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



Fsirand


НАЗВАНИЕ

fsirand - включение генерации случайных номеров инодов (индексов)

СИНТАКСИС

fsirand [-p] special

ОПИСАНИЕ

По этой команде устанавливается генерация случайных номеров инодов (индексов) для устройства special. Благодаря этому усиливается защита файловых систем, экспортируемых под управлением NFS.

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

Опции:

-pВывод сгенерированных номеров всех индексов, без внесения изменений в них.

СМ. ТАКЖЕ



FSNAME(5)XENIX System V (1 янвapя 1989)


НАЗВАНИЕ

fsname - вывoд или измeнeниe имeни фaйлoвoй cиcтeмы

СИНТАКСИС

fsname [-p][-s name]

ОПИСАНИЕ

Koмaндa /etc/fsname иcпoльзyeтcя для вывoдa или измeнeния имeни фaйлoвoй cиcтeмы. Иcпoльзyютcя cлeдyющиe флaги:

-pИcпoльзoвaниe имeни пaкeтa вмecтo имeни фaйлoвoй cиcтeмы. -s nameИзмeнeниe yкaзaннoгo пoля в cyпepблoкe.

Пo yмoлчaнию, вывoдитcя имя фaйлoвoй cиcтeмы.

СМ. ТАКЖЕ

, ustat(1),



FSPEC(4)


НАЗВАНИЕ

fspec - спецификация формата текстового файла

ОПИСАНИЕ

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

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

tразметка Задание табуляции в файле. Значением разметки может быть:

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

Стандартная табуляция задается как t-8 или t1,9,17,25, и т.д. Имена фиксированных способов табуляции перечислены в команде . sразмер Задание максимальной длины строки. Значение размера должно быть целым. Проверка длины строки выполняется после расстановки табуляций, но до установки полей. mполе Задание количества пробелов (полей) в начале и в конце каждой строки. Значение поле должно быть целым. d Строка, содержащая спецификацию формата, должна быть удалена из преобразованного файла. е Текущий формат преобразования действует лишь до тех пор, пока в файле не встретится другая спецификация формата.

Значения параметров по умолчанию - t-8 и m0. Если не задан параметр s, проверка длины строк не производится. Если первая строка файла не содержит спецификации формата, действуют значения по умолчанию. Пример строки, содержащей спецификацию формата:

*<:t5,10,15 s72:>*

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

СМ. ТАКЖЕ

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



FSPHOTO(8)


НАЗВАНИЕ

psphoto - выполняет периодическое полуавтоматическое резервное копирование.

СИНТАКСИС

psphoto [-i] schedule [drive]

ОПИСАНИЕ

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

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

Необязательный аргумент drive определяет устройство, используемое для резервного копирования (стример или дисковод); это устройство задается по умолчанию в файле schedule.

Резервное копирование может быть отложено (чрез fsave) или прервано. Полученные "неполные" копии автоматически дополняются при очередном запуске fsphoto. Пропущенные файловые системы не копируются, как если бы плановое резервное копирование не было отложено. При задании аргумента -i отложенные неполные копии игнорируются.

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

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

ФАЙЛЫ

/usr/lib/sysadmin/schedule База данных, описывающая какие файловые системы подлежат резервному копированию, когда и на каком уровне. /dev/tty Источник интерактивного ввода. /usr/lib/sysadmin/past Записи регистрации файловых систем, успешно скопированных в отложенные неполные резервные копии. /tmp/backup$$ Временный файл для регистрации успешно скопированных файловых систем.

СМ. ТАКЖЕ

, schedule(8ADM), ,

ДИАГНОСТИКА

fsphoto выдает сообщения при наличии в файле schedule синтаксических ошибок и выходит с кодом завершения 1.

fsphoto выдает сообщения о некорректных аргументах и выходит с кодом завершения 1.

Прерывание программы устанавливает код выхода 2.

ПРИМЕЧАНИЯ

Если явно задается аргумент drive, то следует использовать "первичный" тип устройства (/dev/r*).



FSPLIT(1)


НАЗВАНИЕ

fsplit - расщепление f77-, ratfor- или efl-файлов

СИНТАКСИС

fsplit [-f] [-r] [-e] [-s] файл ...

ОПИСАНИЕ

Команда fsplit разбивает заданные файлы на отдельные файлы, каждый из которых содержит по одной процедуре. Процедура - это подпрограмма данных, функция, главная программа или подпрограмма. Процедура X помещается в файл X.f, X.r или X.e в зависимости от опции, определяющей язык. Имеются следующие исключения: главная программа помещается в файл MAIN.[efr], а непоименованные подпрограммы данных - в файлы blockdataN.[efr], где N является целым числом, уникальным для каждого файла.

Допустимые опции:

-f (По умолчанию) Исходными являются f77-файлы. -r Исходными являются ratfor-файлы. -e Исходными являются efl-файлы. -s Сокращение исходных строк на языке f77 до 72 или меньшего числа символов с исключением хвостовых пробелов.

СМ. ТАКЖЕ

csplit(1), , , , .



FSSTAT(1M)


НАЗВАНИЕ

fsstat - выдача состояния файловой системы

СИНТАКСИС

/etc/fsstat файловая_система

ОПИСАНИЕ

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

СМ. ТАКЖЕ

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

ДИАГНОСТИКА

Команда fsstat возвращает следующие коды завершения:

0 Файловая система не смонтирована и находится в корректном состоянии. Корневая файловая система должна быть активна и находиться в корректном сос- тоянии. 1 Файловая система не смонтирована и требует провер- ки. 2 Файловая система смонтирована. 3 Команда завершена аварийно.



FSTAB(4)


НАЗВАНИЕ

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

ОПИСАНИЕ

Файл /etc/fstab содержит информацию о файловых системах для команд и . Строки файла /etc/fstab содержат следующие поля:

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

-d[r] - удаленный ресурс. (Необязательное поле.) Цепочка символов, задающая тип файловой системы. Это и последующие поля игнорируются.

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

ФАЙЛЫ

/etc/fstab

СМ. ТАКЖЕ

, , rmountall(1M) в Справочнике администратора.



FSTYP(1M)


НАЗВАНИЕ

fstyp - определение идентификатора файловой системы

СИНТАКСИС

/etc/fstyp файловая_система

ОПИСАНИЕ

Команда fstyp позволяет определить идентификатор (тип) смонтированной или размонтированной файловой_системы, используя эвристическую программу анализа. Файловая_система задается именем содержащего ее специального файла. Тип требуется для программы [иногда для ] при монтировании файловой системы.

Каталог /etc/fstyp.d содержит набор программ, каждая из которых эвристически проверяет соответствие типа файловой_системы некоторому распознаваемому ею типу. При успехе проверки программа выдает на стандартный вывод соответствующий идентификатор файловой системы и возвращает код завершения 0; в противном случае выдается сообщение об ошибке и возвращается ненулевой код. Команда fstyp выполняет программы из /etc/fstyp.d в алфавитном порядке, передавая файловую_систему как аргумент, до первой успешной проверки. Если удачи не было, fstyp выводит сообщение "Unknown_fstyp" - неизвестный тип.

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

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

СМ. ТАКЖЕ

.

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



FTP(1) FreeBSD Reference Manual


ИМЯ

ftp - протокол передачи файлов ARPANET

СИНТАКСИС

ftp [-v] [-d] [-i] [-n] [-U] [-p] [-g] [host]

ОПИСАНИЕ

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

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

РАБОТА С ftp.

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

Виды записи файла для передачи в ftp.

Программа ftp позволяет использовать два вида записи ASCII или двоичный. Используйте ASCII для текстовых файлов. Двоичный вид используется для двоичных данных, которые должны представлять собой непрерывную последовательность бит. Для связи между UNIX машинами в большинстве случаев может быть использован ASCII код(он задается по умолчанию). Двоичный вид может быть использован для некоторых специальных файлов, например программные объектные модули, если вы используете машины с операционной системой отличной от UNIX.

Условия присвоения имени файлу в ftp.

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


"Ѓ ls -ls"

Символ (Ѓ) может быть внутри и вне кавычек.

Вызов ftp.

Чтобы вызвать ftp из оболочки UNIX, введите команду ftp. Когда команда это выполнено,на вашем экране появится промпт этой команды. Он выглядит следующим образом:

ftp>

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

$ ftp admin

Машинное имя устанавливается вашим системным администратором. До использования ftp вы можете проверить разрешено ли это имя для вас, распечатав файл /etc/hosts. Когда вы пишете имя машины во время вызова ftp, программа устанавливает машинную связь с этой машиной и разрешает вам передачу файлов. Это эквивалентно использованию команды ftp open для установления связи с машиной, которую вы назвали. Вы можете также вызвать ftp без имени машины, например:

$ ftp

Если вы не установили имя машины при вызове ftp, вы должны открыть связь с этой машиной в ftp. Это делается используя ftp open команду до того как вы начали передавать файлы. Для более детальной информации по этому вопросу смотри раздел "Описание ftp команд" дальше в этой главе.

Опции ftp.

Дополнительно при вызове ftp, вы можете задать некоторые опции этой команды. Эти опции помещаются после названия команды ftp, но до имени машины, если оно указывается. Каждая опция состоит из дефиса (-) и одной буквы, например: -v. Каждая опция имеет соответствующую команду того же имени, которая может быть использована внутри ftp. Вам следует различать использование опций и соответствующих ftp команд. Для детальной информации по ftp командам смотри раздел "Описание ftp команд".
-v Заставляет ftp работать в многословном режиме. В этом режиме сообщения ftp, посланные удаленной машиной в ftp появляются на экране вашего дисплея. Кроме того, если вы используете этот режим после завершения передачи каждого файла появляется статистическое сообщение об этом. Этот режим устанавливается по умолчанию, если ftp выполняется интеррактивно. Если ftp выполняется в командном режиме, многословный режим выключен, тогда его включает опция -v. Вы можете включить этот режим внутри ftp с помощью команды ftp verbose. -d Заставляет ftp работать в режиме отладки. В этом режиме сообщения ftp, посланные ftp в удаленную машину, отображаются на экране вашего дисплея. Если вы не используете эту опцию, информация не отображается. Вы можете также вызвать этот режим в ftp, используя команду ftp debug. -i Эта опция означает неинтерактивный промпт. -n Предотвращает использование ftp авторегистрации, во время связи с удаленной машиной. Когда установлен режим авторегистрации, ftp идентифицирует вас автоматически на удаленной машине и регистрирует вас на этой машине.(Смотри раздел"Использование файла .netrc файла для автоматической регистрации" далле в этом разделе.) Если вы используете -n опцию для отключения автоматической регистрации, вы должны будете использовать команду ftp user, чтобы вручную зарегистрироваться на удаленной машине. -g Является причиной лишения имен файлов UNIX их расширений, таких как универсальное (*). Если вы не используете эту опцию, ftp расширяет имена файлов с помощью универсального расширения в списке файлов. Вместо этой опции можно использовать команду ftp glob.



Ниже даны примеры использования ftp опций:

$ ftp -v -d admin

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

$ ftp -v -d

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

$ ftp -n -g admin

Вышеприведенная команда вызывает ftp c отменой авторегистрации и универсального расширения, и заставляет открыть связь с удаленной машиной admin.

$ ftp -n -d

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

Использование файла .netrc для автоматической регистрации.

Вы можете создать файл по имени .netrc в вашем домашнем директории в качестве дополнительного удобства. Этот файл содержит строки-элементы регистрационных данных для каждой машины, которая вам нужна для автоматической связи. Смотрите netrc(2) для полной информации по этому файлу. Когда вы вызываете ftp, указывая машину, т.е. когда вы одновременно с вызовом открываете связь с машиной, ftp читает файл .netrc. Если есть строка-элемент для этой машины, то ftp автоматически соединяет вашу машину с этой удаленной машиной. Это произойдет без вашего имени и пароля, если вы ввели пароль в этот файл. Если вы открыли связь в многословном режиме, то вы увидите как происходят транзакции. Формат файла состоит из отдельных полей, представленных ключевыми полями:

machine имя login имя password пароль

где machine,login,password это ключевые слова, за которыми следуют символьные данные, необходимые для регистрации:
machine Имя узла. login Пользовательское имя для регистрации. password Пароль пользователя на данном узле.(Пароль пишется в нормальной незашифрованной форме текста). Если вы включили ваш пароль в файл .netrc, то вы должны читать/писать файл, получив разрешение, чтобы предотвратить открытие вашего пароля. В противном случае ftp не позволит вам использовать файл. Файловые разрешения должны быть установлены от 400 до 600 для .netrc файла, который включает пароль. Для дополнительной информации по файловым разрешениям смотри документацию по chmod(C).(В записи своего пароля в файл есть определенный риск. Вы должны взвесить все условия безопасности.) Спросите своего администратора обо всех особенностях до использования этого файла.



Если вы не введете пароль в файл, ftp спросит вас о нем. Пример записи:

machine admin login guido password open

где: admin - имя узла, guido - пользователь, который регистрируется в машине admin, open - пароль пользователя guido.

Ограничение для ftp команд.

В дополнение к командам, которые используют стандартный протокольные функции ftp, TCP/IP предоставляет несколько команд, которые используют функции опций ftp. Такие команды следует использовать только для связи с машинами, работающими в UNIX или UNIX совместимых системах. Команды, чье использование будет описано позже в этой главе, имеют определенные ограничения. Когда происходит коммуникация с удаленной машиной, которая не использует UNIX, вам следует спросить системного администратора поддерживается ли ftp в этой машине до ее использования. Некоторые ftp поддерживают не все опции команд. Программа ftp может предоставить список поддерживаемых команд. Для получения такой информации нужно использовать команду ftp remotehelp после установления связи с удаленной машиной.

Описание команд ftp.

Когда на экране появляется промпт ftp, вы можете вводить одну из команд, описанных ниже в этом разделе. После выполнения команды снова появится промпт ftp. В зависимости от того ккакой режми установлен режим многословный или отладочный могут появится дополнительные сообщения. После каждой команды нужно нажимать Return. Выполнение команды не начнется пока вы не нажмете Return. Если вы сделали ошибку при наборе команды, вы можете использовать системную команду построчного редактирования erase(BKSP) или команду символьного редактирования kill(Cancel).

Вам нет необходимости вводить имя команды полностью, можно вводить определенное количество символов, достаточное для идентификации. В большинстве случаев это один или два символа от названия команды ftp.
! Эта команда задерживает ftp и вызывает командный язык (shell) на локальной машине. Любой(ые) символ(ы) после восклицательного знака воспринимаются и выполняются как shell команды. Затем можно вернуться в ftp, выйдя из shell. Все ftp опции и связанные удаленные машины возвращаются в тоже самое состояние, которое было до появления этой команды. Если команда shell напечатана в той же строке, где и !, то выполняется только эта команда. После выполнения команды программа ftp возвращается в командный режим. append Команда append заставляет ftp добавлять содержимое локального файла в конец файла удаленной машины, скоторой вы соединены в данный момент. Когда вы вызываете эту команду, вы можете указать какой файл к какому добавить, например: ftp> append имя локального файла имя файла удаленной машины

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

ftp> append (local-file) имя локального файла (remote-file) имя файла удаленной машины

Эту команду можно использовать только с теми машинами, что используют UNIX систему или с UNIX совместимыми машинами. ascii Эта команда побуждает ftp преобразовывать файлы в ASCII код. (По умолчанию код всегда ASCII). bell Эта команда приводит к тому, что на вашем терминале появляется сигнал после завершения передачи каждого файла. Чтобы прекратить подачу сигнала, нужно снова набрать эту команду ftp. binary Эта команда побуждает ftp передавать файл в двоичном коде. bye По этой команде осуществляется выход из ftp. Эта команда закрывает все открытые связи. cd По этой команде имя директория на удаленной машине заменяется на новое. Вы можете записать новое имя, когда вызываете команду, как показано в примере: ftp > cd /usr/bin

В противном случае вы можете использовать только имя команды ftp, тогда машина запросит имя нового директория, например:

ftp> cd (remote-directory) /usr/bin

close По этой команде закрывается текущая связь. debug Эта команда включает и выключает многословный режим. Если режим включается, то об этом появляется сообщение на вашем дисплее, при выключении сообщений нет. delete По этой команде удаляется файл в удаленной машине, к которой вы подключены в данный момент. Вы можете указать имя файла, который нужно удалить, при вызове ftp команды: ftp> delete имя файла для удаления Если вам больше нравится, то вы можете не указывать имя при вызове команды ftp. Тогда машина вас запросит об имени, например:

ftp> delete (remote-file) имя файла для удаления

dir Эта команда выдаст вам детальный список директория на удаленной машине, к которой вы подключены.(Сравните с опцией ls, данной ниже). Вы можете задать имя директория, который нужно распечатать, при вызове команды ftp. Например: ftp> dir /usr/bin

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

ftp> dir /usr/bin printfile

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

ftp> dir . printfile

где "." означает текущий директорий. form Эта команда выводит на экран формат файла, который используется. Обычно поддерживается непечатный формат. get Эта команда копирует файл из удаленной машины, к которой вы в данный момент подсоединены. Этот файл копируется в вашу машину (Используйте команду mget для копирования нескольких файлов одновременно). Когда вы вызываете эту команду, вы можете указать имя файла на удаленной машине и имя в вашей машине, в который вы скопируете файл. Например: ftp> get имя файла удаленной машины имя файла вашей машины

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

ftp> get имя удаленной машины

Вы можете записать только команду ftp get. Тогда программа ftp запросит вас об имени файла,например:

ftp> get (remote-file) имя файла удаленной машины (local-file) имя файла вашей машины

glob Эта команда заставляет ftp запрещать расширение имен файлов UNIX, такое универсальное, как '* '. Эта команда служит и для запрещения и для разрешения расширения таким образом что, если задать ее повторно, то расширение вновь разрешено. После разрешения расширения расширения ftp ко всем именам файлов добавит расширение при выводе списка файлов. hash Эта команда побуждает ftp выдавать на экране символ '# ' после каждого блока данных, который посылается удаленной машиной. Размер блоков данных может быть различным в зависимости от версии программного обеспечения. Для того, чтобы увидеть текущее значение, с командой ftp используйте многословный режим. Эта команда включает и выключает выдачу символа '#' на экран ее при повторном наборе. help Эта команда выдает на экран информацию о работе ftp. Если после help задать имя команды, то появится информация об этой команде. Если набрать просто help, то появится информация обо всех командах ftp. lcd Эта команда изменяет рабочий директорий, используемый ftp, на вашей машине. Вы можете задать имя директория, который вам нужен как рабочий, например: ftp> lcd /ysr/deb

Если вы не задали имя директория, то будет использоваться ваш домашний директорий. ls Эта команда распечатывает абревиатурный список содержания директория удаленной машины, с которой вы связаны. Вы связаны в данный момент. Вы можете задать имя директория, который вы хотите распечатать. Например: ftp> ls /usr/bin

Если вы не задали имя, будет распечатан текущий директорий. Можно задать, чтобы результаты выполнения команды были помещены в файл до появления их на дисплее. Это делается ftp, если указать имя файла на вашей машине куда следует поместить листинг директория, например:

ftp> ls /usr/bin printfile

Имя директория нужно задать до вывода файла (здесь printfile). Например, если вы хотите распечатать текущий директорий в файл с именем printfile:

ftp> ls . printfile

где "." ставится, чтобы подчеркнуть, что директорий текущий. mdelete Эта команда удаляет список файлов на удаленной машине, с которой вы связаны в данный момент. Вы можете задать имена файлов для удаления при вызове команды. Например: ftp> mdelete имя 1файла удаленной машины имя 2файла...

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

ftp> mdelete (remote-files) имя 1файла 2файла...

mdir По этой команде выдается список листинг директория удаленной машины и результат помещается в файл вашей машины. Вы можете задать список файлов удаленной машины и имя файла вашей машины, куда поместить результат при вызове команды. Например: ftp> mdir имя 1файла удаленной машины... printfile

(Заметьте, что последее имя это имя файла вашей машины printfile). Возможно просто использовать имя команды. Тогда программа ftp запросит у вас имя файлов, например:

ftp> mdir (remote-files) имя 1файла удаленной машины...printfile local-file printfile?y

mget Эта команда копирования одного или более файлов с удаленной машины, к которой вы подключены в данный момент на вашу машину. Файлы после копирования будут иметь теже имена. Вы можете указать список файлов для копирования: ftp> mget имя 1файла удаленной машины имя 2файла...

Если вы не задали имена файлов при вызове команды, программа ftp запросит вас о них:

ftp> mget (remote-files) имя 1файла удаленной машины имя 2файла ...

mkdir Эта команда создает директорий на удаленной машине, к которой вы в данный момент подключаетесь. Вы можете задать им директория при вызове команды, например: ftp> mkdir /u/mydir

Если вы не задали имя, ftp запросит вас о нем, например:

ftp> mkdir (directory-name) имя директория

Эта команда поддерживается не всегда. mls Эта команда получает абревиатурный список группы файлов текущего директория на удаленной машине и помещает результат в файл на вашей машине. Вы можете задать список файлов удаленной машины и файл вашей машины, куда поместить результат при вызове команды, например: ftp> mls имя 1файла удаленной машины ...printfile

Вы можете не указывать имена при вызове команды, и тогда прграмма запросит вас о них:

ftp> mls (remote-files) имя 1файла удаленной машины...printfile local-file printfile?y

mput Эта команда копирует один или более файлов с вашей машины в удаленную машину, с которой вы связаны в данный момент. На удаленной машине файлы будут иметь теже имена. Вы можете задать список фалов при вызове команды,например: ftp> mput 1файл вашей машины 2файл вашей машины...

Если вы не указали имена, программа ftp вас об этом запросит:

ftp> mput (local-files) имя 1файла вашей машины имя 2файла...

nmap Используйте эту команду для установки и отмены механизма преобразования имен файлов. Эта команда полезна при связи с UNIX несовместимыми машинами и в которых используется другой способ именования файлов. Переименовывание файлов локальной машины производится с помощью get и mget команд, а удаленной машины с помощью put и mput команд. Команда mput комплексная. ntrans Используйте эту команду для включения и выключения механизма трансляции символов имени файла. Эта команда полезна при связи с UNIX несовместимой удаленной машиной, где применяется другой способ именования файлов. Трансляция имен файлов локальной машины производится с помощью get и mget команд, а удаленной машины с помощью put и mput команд. Команда mtrans комплексная. open Эта команда устанавливает связь с удаленной машиной, которая предполагается для передачи файлов. При вызове команды вы можете указать имя машины, например: ftp> open admin

Если имя не указано, программа запросит его:

ftp> open (to) имя машины

Если вы указали имя машины при вызове команды, вы можете также указать номер порта на удаленной машине. Если указан порт, то ftp откроет связь через этот порт, если он предпочтительнее того, что задается по умолчанию. Изменения порта делаются в том случае, если вас об этом поросят или это задается системным администратором. Если порт не задан, то программа его не запрашивает. prompt Эта команда предотвращает ваш запрос к ftp о разрешении на переход между файлами в многофайловых командах, таких как mget. Эта команда подключается и отключается при повторном наборе. put Эта команда перемещает файл из вашей машины в удаленную машину, к которой вы в данный момент подключены.(Для передачи нескольких файлов одновременно используйте команду mput). Вы можете задать имя файла вашей машины и имя файла удаленной машины при вызове команды ftp,пример: ftp> put имя вашего файла имя файла удаленной машины

или

ftp> put имя вашего файла

5-15 Инструкция по настройке
Если вы не указали имя файлов(а), то программа вас о них запросит, например:

ftp> put (local-file) имя вашего файла (remote-file) имя файла удаленной машины

Если вы не укажете имя файла удаленной машины, то команда put создаст файл на удаленной машине под тем же именем, что и на вашей машине. pwd Эта команда вынуждает ftp печатать имя текущего рабочего директория на удаленной машине, с которой вы связаны в данный момент. quit Команда аналогична команде bye, о которой говорилось выше. quote Команда заставляет ftp посылать параметры, которые вы вводите в машину, посылать к удаленной машине для выполнения. Параметры это ftp команды и другие параметры. Те команды, что ftp поддерживает, могут быть отображены на экране с помощью команды remotehelp. Вы можете ввести эту команду при вызове программы ftp, например: ftp> quote NLST

Если вы указали только имя команды, ftp спросит вас о командной строке, которую нужно использовать, например:

ftp> quote (command-line to send) NLST

Эту команду следует использовать только по совету вашего системного администратора. recv Эта команда аналогична команде get, описанной выше. remotehelp Эта команда запрашивает помощь ftp на удаленной машине, с которой вы связаны в данный момент. Эта информация сообщает о том какие команды поддерживает удаленная машина. rename Эта команда переиновывает файл на удаленной машине, с которой вы связаны в текущий момент. При вызове команды вы можете использовать имена файлов, напрмер: ftp> rename имя 1файла имя 2файла

Если вы использовали только имя команды при вызове программы, то машина запросит имена файлов:

ftp> rename (from-name) имя 1файла (to-name) имя 2файла

mdir Эта команда удаляет директорий на удаленной машине, с которой вы связаны в данный момент. Вы можете задать имя директория, который следует удалить, при вызове команды, например: ftp> rmdir /u/mydir

или вы можете не задавать имя при вызове команды, и машина запросит вас о нем:

ftp> rmdir (directory-name) /u/mydir

Эта команда не всегда поддерживается. send Эта команда аналогична команде put, описанной выше. sendport Эта команда заставляет ftp запрещать возможность задания порта локальной машины для данных удаленной машины. Эта команда может подключаться и отключаться ее повторным набором. При вызове ftp по умолчанию задается определенный порт. Эту команду следует использовать по совету вашего системного администратора. status Это команда заставляет ftp изображать свой текущий статус на вашем терминале. Статус включает режимы, которые выбраны командами bell,form,hash,glob,port,type. type Эта команда устанавливает в каком виде передается файл. Допустимы коды ASCII и двоичный. Эта команда аналогична командам ascii и binary. Если вы не указали тип при вызове команды, то устанавливается ASCII. trace Эта команда заставляет ftp разрешать пакетную трассировку. Эта команда включается и отключается ее повторным набором. Эту команду следует использовать только по совету вашего системного администратора. user Эта команда позволяет вам идентифицировать самого себя на удаленной машине при установлении связи. Эта авторегистра- ция разрешена с опцией -n при вызове ftp. В этом случае данная команда не нужна.(Смотри раздел "Использование файла .netrc для автоматической регистрации" ранее в этой главе). Если автоматическая регистрация запрещена, то используйте эту команду для собственной регистрации и идентификации на удаленной машине. Удаленной машине нужно сообщить три вида информации кто вы: регистрационное имя, пароль и имя ресурса. Имя пользователя требуется для всех машин, пароль и имя ресурса требуются только для некоторых систем. Ваш системный администратор должен сказать что требуется для ваших машин. Он же должен подсказать вам правильное имя, пароль и имя ресурса, который вы хотите использовать. Вы можете ввести всю эту информацию при вызове команды user, например: ftp> user mike cat myaccount

Вы можете не указывать всю эту информацию при вызове команды. Тогда программа вас о ней запросит, например:

ftp> user (usename) mike(имя пользователя) password: Account: myaccount(имя ресурса)

Заметьте, что эхо не отражает ваш пароль при его наборе для защиты вашей информации. Если вы не набрали пароль или имя ресурса, то запроса о них не будет. verbose Эта команда заставляет ftp запрещать многословный режим. Эта команда включается и выключается при повторном наборе. В многословном режиме ftp протокольные сообщения, посланные удаленной машиной появляются на вашем терминале. Кроме того, в этом режиме отображается статистика после передачи каждого файла. Если этот режим запрещен, то данная информация не изображается. ? Другое название команды help. <



/p>

Примеры работы ftp.

Этот раздел иллюстрирует как можно использовать ftp. Ниже даны три примера. В этих примерах используются три машины, локальная машина с именем HERE и удаленная машина с именем THERE.

Описание 1 примера.

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

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

Пользователь, используя команду ls, получает абревиатурный листинг директория /etc машины THERE. команда ftp выдает три файла в каталоге /etc. Команда get passwd затем копирует файл passwd с машины THERE в машину HERE. Файл по имени passwd создается в машине HERE, если было указано имя машины.

Команда put используется, чтобы скопировать файл по имени wall из текущего рабочего директория локальной машины(HERE) в директорий удаленной машины (THERE) /etc. Этот файл копируется стем же именем, т.к. свое имя не было указано. После окончания передачи, появляется листинг /etc, в котором уже четыре файла, включая wall, который был только что скопирован с машины HERE.

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

$ ftp THERE Connected to THERE 220 THERE FTP server (Version 4.160 #1) ready Name (THERE:stevea): Password (THERE:stevea): 331 Password required for stevea. 230 User stevea logged in. ftp> verbose Verbose mode off. ftp> cd /etc ftp> ls passwd volcopy whodo ftp> get paswd ftp>put wall ftp> ls passwd volcopy wall whodo ftp> bye $

Описание 2 примера.

Этот пример иллюстрирует экранные изображения, которые можно получить, используя несколько опций ftp. После вызова ftp c именем удаленной главной машины, пользователь вызывает команду, которая позволит вернуть режим отладки. После этого команда ftp выдает сообщения на экран, что свидетельствует о разрешении данной опции. Пользователь затем заменяет рабочий директорий на удаленной машине на /etc. Т.к. присутствуют отладочный и многословный режимы, на экране будут появляться сообщения о посылке команд к удаленной машине (-->



CWD/etc) и ответы, полученные с удаленной машины (250 CWD command successful - команда прошла успешно). Заметьте, что cd команда, которая имеет такуюже форму, как команда изменения директория в UNIX, посылается в виде CDW команды (изменение рабочего директория на удаленной машине). Эта команда применяется ftp вместо cd, чтобы она работала независимо от системной команды.

Следом за cd командой пользователь ставит pwd команду, чтобы подтвердить изменение рабочего директория. Команды ftp будут изображать на вашем экране сообщения, посылаемые между вашей (локальной) и удаленной машиной, а затем появится текущий рабочий директорий на удаленной машине. Затем пользователь набирает hash опцию, на что появляется сообщение, что данная опция разрешена. Команда get wall myfile приказывает ftp восстановить файл wall и поместить его в файл myfile в текущем рабочем директории на вашей машине. Команда ftp выдаст сообщения, посылаемые между локальной и удаленной машинами о начале передачи и затем печатает hash метку для каждого блока, полученной информации. После завершения передачи на экране появляется статистика, в которой время, потребовавшееся для передачи, и дата передачи файла. После получения файла пользователь закрывает связь командой close и выходит из ftp командой bye.

$ ftp THERE Connected to THERE 220 THERE FTP server (Version 4.160 #1) ready Name (THERE:stevea): Password (THERE:stevea): 331 Password required for stevea. ftp> debug Debugging on (debug = 1) ftp> cd /etc ---> CDW /etc 200 CDW command okay. ftp> pwd ---> PWD 251 ftp> hash Hash mark printing on (1024 bytes/hash mark). ftp> get wall mefile ---> PORT 3,20,0,2,4,51 200 PORT command okay. ---> RETR wall 150 Opening data connection for wall (3.20.0.2.1075)(24384bytes #######################. 226 Transfer complete. 24550 bytes received in 12.00 seconds (2 Kbytes/s) ftp> close ---> QUIT 221 Goodbye. ftp> bye $

СМ. ТАКЖЕ

ftpd(8)

ИСТОРИЯ

Команда ftp появилась в 4.2BSD.









Ftpcount(1)


ИМЯ

ftpcount - показывает текущее число пользователей для каждого класса.

СИНТАКСИС

ftpcount

ОПИСАНИЕ

Команда показывает текущее число пользователей (и ограничений) для каждого класса установленных в файле ftpaccess.

СМ. ТАКЖЕ

ftpwho(1)



Ftpwho(1)


ИМЯ

ftpwho - Показывает текущую информацию о процессе для каждого ftp пользователя.

СИНТАКСИС

ftpwho

ОПИСАНИЕ

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

СМ. ТАКЖЕ



FTW(3C)


НАЗВАНИЕ

ftw - обход дерева файлов

СИНТАКСИС

#include <ftw.h>

int ftw (path, fn, depth) char *path; int (*fn) ( ); int depth;

ОПИСАНИЕ

Функция ftw рекурсивно обходит иерархию каталогов, имеющую своим корнем каталог с маршрутным именем, на которое указывает аргумент path. Для каждого объекта иерархии ftw вызывает функцию fn, передавая ей три аргумента: указатель на цепочку символов, ограниченную нулевым байтом и содержащую имя объекта; указатель на структуру stat [см. ], содержащую информацию об объекте; тип объекта (целое число). Возможны следующие значения типа объекта, описанные во включаемом файле :

FTW_F Обычный файл. FTW_D Каталог. FTW_DNR Каталог, недоступный на чтение. FTW_NS объект, для которого stat не может выполниться успешно.

Если тип объекта есть FTW_DNR, подкаталоги этого каталога не просматриваются. Если тип есть FTW_NS, то структура stat будет содержать мусор. Примером объекта, который вызовет передачу fn типа FTW_NS, является файл в каталоге, доступном на чтение, но недоступном для поиска.

Функция ftw обрабатывает каталог перед обработкой его элементов.

Обход завершится тогда, когда или будет обойдено все дерево, или функция fn возвратит ненулевое значение, или возникнет ошибка при работе самой функции ftw (например, ошибка ввода/вывода). Если дерево обойдено полностью, ftw возвращает 0. Если fn возвратит ненулевое значение, то ftw прекратит обход и выдаст это значение. Если будет обнаружена ошибка при работе самой функции ftw, то она возвратит -1 и соответствующим образом установит значение переменной errno.

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

СМ. ТАКЖЕ

, .

СЮРПРИЗЫ

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

ОГРАНИЧЕНИЯ

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



FUSAGE(1M)


НАЗВАНИЕ

fusage - статистика доступа к дискам

СИНТАКСИС

fusage [[файловая_система] | [открытый_ресурс] | [специальное_блочное_устройство] [...]]

ОПИСАНИЕ

Fusage без опций сообщает обем в килобайтах дискового ввода / вывода как для всех локальных смонтированных файловых систем, так и для открытых, т.е. обявленных доступными для удаленных ЭВМ ресурсов системы Разделения Удаленных Файлов. В последнем случае данные группируются по абонентам. Fusage с аргументами выдает данные об указанной файловой_системе, открытом_ресурсе или специальном_блочном_устройстве.

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

СМ. ТАКЖЕ

adv(1M), , .

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



FUSER(1M)


НАЗВАНИЕ

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

СИНТАКСИС

/etc/fuser [-k] [-u] файл ... [-] [[-k] [-u] файл ...]

ОПИСАНИЕ

Команда fuser выдает идентификаторы процессов, использующих указанные файлы. За идентификатором следует однобуквенный код со следующими значениями: если файл является текущим каталогом процесса, код равен c; если файл является надкаталогом текущего, код равен p (выдается, только если файл используется системой); если файл является корневым каталогом процесса, код равен r. Для блочного специального устройства с монтированной файловой системой перечисляются все процессы, использующие файлы на данном устройстве.

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

-u Выдать за идентификатором входное имя пользователя (в скобках). -k Послать каждому процессу сигнал SIGKILL. Так как эта опция предполагает уничтожение многих процессов, сообщения об уничтожении могут запаздывать [см. ].

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

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

Команда fuser может быть выполнена любым пользователем, имеющим доступ на чтение к /dev/kmem и /dev/mem. Уничтожать процессы может только суперпользователь.

ФАЙЛЫ

/unix Список системных имен. /dev/kmem Виртуальная память ядра. /dev/mem Физическая память.

СМ. ТАКЖЕ

.

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

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



FWTMP(1M)


НАЗВАНИЕ

fwtmp, wtmpfix - манипулирование записями о начале/конце сеансов

СИНТАКСИС

/usr/lib/acct/fwtmp [-ic] /usr/lib/acct/wtmpfix [файл ...]

ОПИСАНИЕ

Утилита fwtmp читает со стандартного ввода (обычно назначенного на файл /etc/wtmp) двоичные записи, имеющие структуру utmp [см. ], и помещает на стандартный вывод их отформатированные текстовые образы. Текстовый вид полезен для редактирования плохих записей и вообще для поддержания информации о сеансах в нужном состоянии.

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

Утилита wtmpfix анализирует данные, поступающие со стандартного ввода или из файлов, имеющих тот же формат, что и /etc/wtmp, корректирует содержащиеся в них сведения о дате/времени, чтобы устранить противоречия, и записывает результаты на стандартный вывод. Если в качестве имени файла задан -, данные читаются со стандартного ввода. Противоречия могут возникнуть после изменения системного времени командой , и если их не устранить, нормальная работа утилиты acctcon1 [см. ] не гарантируется.

Каждый раз при изменении системного времени в файл /etc/wtmp помещаются две записи. Первая запись содержит старое значение времени, цепочку символов "old time" в поле "имя устройства" и флаг OLD_TIME в поле "тип элемента" [см. ]. Вторая запись определяет новое значение времени, помеченное цепочкой символов "new time" и флагом NEW_TIME. Утилита wtmpfix использует эти записи для приведения в соответствие парных сведений о дате/времени.

В дополнение к корректировке сведений о дате/времени утилита wtmpfix проверяет допустимость входных имен пользователей. Считается, что имя должно содержать только буквы, цифры, знаки $ и пробелы. При обнаружении недопустимого имени оно заменяется на INVALID, а в стандартный протокол выдается сообщение об ошибке. Таким образом, утилита wtmpfix уменьшает вероятность отказа утилиты acctcon1 при обработке записей о начале/ конце сеансов работы пользователей в системе.

ФАЙЛЫ

/etc/wtmp /usr/include/utmp.h

СМ. ТАКЖЕ

, .

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

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



Man pages на русском


НАЗВАНИЕ

getc, getchar, fgetc, getw - считывание символа или слова из потока

СИНТАКСИС

#include <stdio.h>

int getc (stream) FILE *stream;

int getchar ( )

int fgetc (stream) FILE *stream;

int getw (stream) FILE *stream;

ОПИСАНИЕ

Макрос getc выдает в виде целого числа следующий символ (байт) из указанного потока ввода stream и перемещает текущую позицию (если она определена) на один символ вперед. Макрос getchar эквивалентен getc (stdin).

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

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

СМ. ТАКЖЕ

, , , , , , , .

ДИАГНОСТИКА

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

ОГРАНИЧЕНИЕ

Реализация макроса getc такова, что значение аргумента stream вычисляется несколько раз. Поэтому, например, обращение getc(*f++) бессмысленно. В подобных случаях следует пользоваться функцией fgetc.



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. Структура описана во включаемом файле :

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 на русском


НАЗВАНИЕ

gets, fgets - чтение цепочки символов из потока

СИНТАКСИС

#include <stdio.h>

char *gets (s) char *s;

char *fgets (s, n, stream) char *s; int n; FILE *stream;

ОПИСАНИЕ

Функция gets читает символы из стандартного потока ввода stdin в область памяти, на которую указывает аргумент s. Чтение производится до тех пор, пока не встретится перевод строки или конец файла. Символ перевода строки отбрасывается, а прочитанная цепочка ограничивается нулевым байтом.

Функция fgets считывает (n-1) символов из потока ввода stream в область памяти, на которую указывает аргумент s. Чтение производится до тех пор, пока не встретится перевод строки (в отличие от gets он не отбрасывается) или конец файла. Прочитанная цепочка символов ограничивается нулевым байтом.

СМ. ТАКЖЕ

, , , , , .

ДИАГНОСТИКА

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


, .

ДИАГНОСТИКА

Функции malloc, realloc и calloc возвращают пустой указатель NULL, если нет достаточного количества памяти или если обнаруживается нарушение структуры блоков (обычная причина такого нарушения - запись в память вне выделенных границ). В подобной ситуации не гарантируется сохранение содержимого блока, на который указывает аргумент ptr.

ПРИМЕЧАНИЯ

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









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 игнорируется. Символ, обозначающий тип преобразования.



PUTC(3S)


НАЗВАНИЕ

putc, putchar, fputc, putw - запись в поток символа или машинного слова

СИНТАКСИС

#include <stdio.h>

int putc (c, stream) char c; FILE *stream;

int putchar (c) char c;

int fputc (c, stream) char c; FILE *stream;

int putw (w, stream) int w; FILE *stream;

ОПИСАНИЕ

Макрос putc записывает символ c в поток вывода stream (в позицию, задаваемую указателем файла, если он определен). Макрос putchar (c) определяется как putc (c, stdout).

Функция fputc выполняет те же действия, что и макрос putc; она работает медленнее, чем putc, но занимает меньше пространства на каждое использование. Кроме того, функцию можно передавать в качестве аргумента.

Функция putw выводит машинное слово w (значение типа int) в поток вывода stream (в позицию, задаваемую указателем файла, если он определен). Размер слова машинно-зависим. Для данной системы он составляет 32 бита. Функция putw не требует и не выполняет выравнивание по границе слова в выходном файле.

СМ. ТАКЖЕ

, , , , , , , .

ДИАГНОСТИКА

В случае успеха описанные функции (кроме putw) возвращают выводимое значение. Функция putw возвращает ferror (stream). При неудаче они возвращают константу EOF. Ошибка возникает, если файл stream не открыт на запись или, если файл вывода не может расти. Так как EOF - допустимое целое значение, для распознавания ошибок putw нужно пользоваться функцией .

ОГРАНИЧЕНИЯ

Поскольку putc - макрос, аргумент stream вычисляется многократно, что существенно при наличии побочных эффектов. В частности, вызов putc (c, *f++) ведет себя нежелательным образом. В таких случаях следует использовать fputc.

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



PUTS(3S)


НАЗВАНИЕ

puts, fputs - запись цепочки символов в поток

СИНТАКСИС

#include <stdio.h>

int puts (s) char *s;

int fputs (s, stream) char *s; FILE *stream;

ОПИСАНИЕ

Функция puts записывает ограниченную нулевым байтом цепочку символов, заданную указателем s, в поток стандартного вывода stdout. За цепочкой добавляется символ перевода строки.

Функция fputs выводит ограниченную нулевым байтом цепочку символов, заданную указателем s, в поток вывода stream. Перевод строки не добавляется.

Ни одна из этих функций не выводит ограничивающий цепочку нулевой байт.

СМ. ТАКЖЕ

, , , , , .

ДИАГНОСТИКА

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



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 при исчерпании потока ввода, или число успешно введенных и преобразованных величин.

СЮРПРИЗЫ

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









STDIPC(3C)


НАЗВАНИЕ

stdipc: ftok - стандартный пакет для обмена сообщениями между процессами

СИНТАКСИС

#include <sys/types.h>

#include <sys/ipc.h>

key_t ftok (path, id) char *path; char id;

ОПИСАНИЕ

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

Функция ftok возвращает ключ, сформированный по заданным значениям path и id и готовый для использования в последующих системных вызовах msgget, semget и shmget. Аргумент path должен быть указателем на маршрутное имя существующего файла, доступного данному процессу. Аргумент id должен задавать символ, однозначно идентифицирующий проект. Заметим, что функция ftok возвращает одинаковые ключи для разных ссылок на один и тот же файл, если задается одно и то же значение id, и разные ключи, если задаются одинаковые имена файлов, но разные значения id.

СМ. ТАКЖЕ

, , , .

ДИАГНОСТИКА

Функция ftok возвращает значение (key_t) -1, если файл с заданным маршрутным именем path не существует или этот файл не доступен процессу.

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

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



UNIX2DOS(1)


ИМЯ

dos2unix - преобразование форматов файлов

СИНТАКСИС

dos2unix [-?hz] [infile [outfile ]]

ОПИСАНИЕ

Команда dos2unix служит для преобразования форматов текстовых файлов MSDOS к UNIX формату. Известно, что форматы текстовых файлов в DOS и в UNIX немного отличаются: в DOS все строки заканчиваются парой символов CR и LF (возврат каретки и перевод строки), а UNIX использует только символ LF (перевод строки), справедливо полагая, что второй символ совершенно излишен. В командной строке аргумент infile служит для определения DOS - файла, а аргумент outfile используется для задания имени ничем не отличающегося по содержанию текстового файла, но уже в UNIX формате.

-z служит для записи символа конца файла EOF. -?, -h используются для выдачи на печать списка доступных опций.

СМ. ТАКЖЕ

unix2dos



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


ИМЯ

xlist, fxlist - выдaeт cпиcoк имeн выпoлняeмыx фaйлoв

СИНТАКСИС

#include <a.out.h>

int xlist(filename,xl) char *filename; struct xlist xl[];

#include <a.out.h>

#include <stdio.h>

int fxlist(fp,xl) FILE *fp; struct xlist xl[];

ОПИСАНИЕ

Fxlist в oтличиe oт xlist, тpeбyeт вмecтo имeни фaйлa yкaзaтeль нa oткpытый фaйл.

Xlist aнaлизиpyeт cпиcoк имeн зaдaннoгo выпoлняeмoгo фaйлa и ocyщecтвляeт выбopкy cпиcкa знaчeний. Cтpyктypa cпиcкa имeн xl являeтcя мaccивoм cтpyктyp xlist, coдepжaщиx имя, тип, знaчeниe и нoмep ceгмeнтa (ecли тaкoвoй ecть). Этoт cпиcoк зaвepшaeтcя либo yкaзaтeлeм нa нyлeвoe имя, либo нyлeвым yкaзaтeлeм. Ocyщecтвляeтcя пoиcк кaждoгo имeни в cпиcкe имeн фaйлa. Ecли имя нaйдeнo, eгo тип и знaчeниe пoмeщaютcя в cлeдyющиe двa пoля. Ecли cyщecтвyeт нoмep ceгмeнтa, oн пoмeщaeтcя в тpeтьe пoлe. Ecли имя нe нaйдeнo, oбa пoля oбнyляютcя. Oпиcaниe cтpyктypы xlist пpивeдeнo в oпиcaнии a.out(F).

Pacпoзнaютcя фopмaты фaйлoв a.out и x.out, a тaкжe фopмaт ceгмeнтoв x.out и пepeмeщaeмый фopмaт ceгмeнтoв 8086.

Ecли тaблицa cимвoлoв пpeдcтaвлeнa в фopмaтe a.out и, ecли в xlist имя зaнимaeт бoлee 8 бaйт, в cpaвнeнии yчacтвyют пepвыe 8 cимвoлoв. Bo вcex ocтaльныx cлyчaяx длины cpaвнивaeмыx имeн дoлжны coвпaдaть.

Ecли oбнapyжeны двa имeни в cпиcкe имeн фaйлa, кoтopыe coвпaдaют c имeнeм, yкaзaнным в xlist, выдaeтcя тип и знaчeниe пocлeднeгo нaйдeннoгo имeни.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

Xlist вoзвpaщaeт -1 и oбнyляeт вce пoля, ecли фaйл нe читaeтcя, или фaйл нe являeтcя oбьeктным фaйлoм, или имeeт нeвepный cпиcoк имeн. B ocтaльныx cлyчaяx xlist вoзвpaщaeт 0. Этo нe oзнaчaeт, чтo вce yкaзaнныe имeнa нaйдeны.