Man pages на русском

         

ACCEPT(1M)


НАЗВАНИЕ

accept, reject - разрешение или запрет запросов на пе- чать

СИНТАКСИС

/usr/lib/accept адресат ... /usr/lib/reject [-r [причина]] адресат ...

ОПИСАНИЕ

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

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

-r[причина]

Связывает причину с запрещением вывода. Эта причина относится ко всем принтерам, перечисленным до следующей опции -r. Причина сообщается командой lp, когда пользователь направляет запрос адресату, а также по команде . Если опция -r не задана или задана без указания причины, то действует подразумеваемая причина.

ФАЙЛЫ

/usr/spool/lp/*

СМ. ТАКЖЕ

, lpshed(1M).

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



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



HALTSYS(ADM)


НАЗВАНИЕ

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

СИНТАКСИС

/etc/haltsys /etc/reboot

ОПИСАНИЕ

Утилита haltsys выполняет системный вызов uadmin() (см. ) для прекращения дискового ввода/вывода, очистки файловых систем и остановки процессора. haltsys вступает в действие сразу же, поэтому пользовательские процессы должны быть прерваны заранее. Для нормальной разгрузки системы рекомендуется программа shutdown(ADM), так как она предупреждает пользователей, прерывает процессы и затем вызывает haltsys. Если вы не можете запустить shutdown, например, из-за какой-либо системной проблемы, используйте haltsys непосредственно.

Команда reboot выполняет ту же функцию, что и haltsys, за исключением того, что после всего система автоматически перезагружается.

Только привилегированный пользователь может выполнять haltsys или reboot.

ПРИМЕЧАНИЯ

haltsys паркует головки жесткого диска.

СМ. ТАКЖЕ

shutdn(2), ,



MALLOC(3C)


НАЗВАНИЕ

malloc, free, realloc, calloc - управление памятью

СИНТАКСИС

char *malloc (size) unsigned size;

void free (ptr) char *ptr;

char *realloc (ptr, size) char *ptr; unsigned size;

char *calloc (nelem, elsize) unsigned nelem, elsize;

ОПИСАНИЕ

Функции malloc и free предоставляют простой универсальный механизм выделения и освобождения памяти. Функция malloc возвращает указатель на блок памяти размером не менее size байт, который можно использовать в произвольных целях.

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

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

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

Функция realloc изменяет размер блока, на который указывает аргумент ptr, до величины в size байт и возвращает указатель на (возможно перемещенный) блок. Часть содержимого блока до наименьшего из нового и старого размеров не изменяется. Если блок размером size байт не удается разместить на прежнем месте, то вызывается malloc для выделения блока нужного размера, после чего данные из старого блока перемещаются на новое место.

Аргумент ptr функции realloc может указывать и на блок, освобожденный после последнего обращения к функциям malloc, realloc или calloc. Зная стратегию выделения памяти, последовательные вызовы функций malloc, free и realloc можно использовать для уплотнения памяти.

Функция calloc выделяет пространство для массива из nelem элементов, каждый размером elsize байт, и заполняет массив нулями.

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

СМ. ТАКЖЕ


, .

ДИАГНОСТИКА

Функции malloc, realloc и calloc возвращают пустой указатель NULL, если нет достаточного количества памяти или если обнаруживается нарушение структуры блоков (обычная причина такого нарушения - запись в память вне выделенных границ). В подобной ситуации не гарантируется сохранение содержимого блока, на который указывает аргумент ptr.

ПРИМЕЧАНИЯ

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









RAMDISK(HW)


НАЗВАНИЕ

ramdisk - блочно-ориентированное устройство памяти (псевдодиск).

ОПИСАНИЕ

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

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

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

Следующие четыре бита определяют размер этого псевдодиска. Размер ramdisk должен быть кратен 2 и должен быть не меньше 16K. Поскольку имеется 4 бита, то может быть 16 различных размеров, начиная с 16K и удваивая это значение при каждом единичном увеличении указателя размера. При этом будет получаться 16K, 32K, 64K и т.д.

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

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

Поскольку полный набор восьми псевдодисков поглотил бы 256 индексных дескрипторов, то при инсталляции системы создается только один ramdisk размеров 16K (/dev/ram00). Администратор системы может проанализировать существующий файл этого устройства, чтобы определить главное (большее) число устройства для создания других потребовавшихся псевдодисков. Все эти устройства будут иметь одинаковое главное число устройства.


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

Структура малого числа устройства ОписаниеДолговечностьРазмер (см. cлед. таб.)Номер псевдодискаМалое число устройства 16K (#1)
(Временное)000000011 16K (#1)
(Постоянное)10010000129 64K (#0)
(Временное)0000000016 512K (#7)
(Постоянное)101011111 Содержимое поля размера и соответствующий размер псевдодиска приведены в следующей таблице:
Биты размераРазмер устройства 0 0 0 016K 0 0 0 132K 0 0 1 064K 0 0 1 1128K 0 1 0 0256K 0 1 0 1512K 0 1 1 01M 0 1 1 12M 1 0 0 04M 1 0 0 18M 1 0 1 016M 1 0 1 132M 1 1 0 064M 1 1 0 1128M 1 1 1 0256M 1 1 1 1512M Для создания устройства ramdisk выполните следующие действия:

Создание дескриптора устройства


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

mknod device_name b_or_c major_device_number minor_device_number

где b_or_c - "b" или "c". "b" предназначается для блочных устройств, его вам и нужно задать. Главным числом всегда будет 31. Малое число определяется по приведенной выше таблице. Малое число это сумма значений из трех колонок.

Долговечность:

постоянное устройство - 128, временное - 0.

Размер:

16K = 0 124K = 24 1M = 48 8M = 72 32K = 8 256K = 32 2M = 56 16M = 80 64K = 16 512K = 40 4M = 64 32M = 88

Номер псевдодиска: 0 - 7. Примечание: Доступно только 8 устройств. Два устройства с различными размерами не могут иметь одинаковый номер.

Например, при создании постоянного псевдодиска размером 64K можно выбрать малое число устройства в пределах от 144 до 151. Если номер диска будет 1, то соответствующая команда примет вид:

mknod /dev/ram64 b 31 145

Создание файловой системы


Следующая команда создает на псевдодиске файловую систему:

mkfs device_name size_of_file_in_Bsize_blocks

В данном примере команда для создания файловой системы размером 64K будет выглядеть так:

mkfs /dev/ram64 64



Монтировка файловой системы


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

mount device_name mount_point

Команда монтировки 64-килобайтового псевдодиска на /mnt будет:

mount /dev/ram64 /mnt

Для создания файловой системы на временном псевдодиске файл устройства нужно открыть между командами mkfs и mount. Иначе псевдодиск будет создан при запуске команды mkfs и отключен по ее завершении. А когда псевдодиск смонтирован, он быдет открыт, пока его не демонтируют.

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

( /etc/mkfs /dev/ram40 512 /etc/mount /dev/ram40 /mnt ) < /dev/ram40

ПРИМЕЧАНИЯ

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

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

ФАЙЛЫ

/dev/ram00

СМ. ТАКЖЕ

mkfs(8), mount(8), mknod(1)









RAND(3C)


НАЗВАНИЕ

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

СИНТАКСИС

int rand ( )

void srand (seed) unsigned seed;

ОПИСАНИЕ

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

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

ПРИМЕЧАНИЯ

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

СМ. ТАКЖЕ

.



RANDOM(1)


ИМЯ

random - Генерирует случайное число.

СИНТАКСИС

random [-s] [ scale ]

ОПИСАНИЕ

Команда random генерирует случайное число на стандартный вывод и возвращает число в качестве выходной величины. По умолчанию это число равно либо 0, либо 1 (т.е. шкала "scale" - это 1 по умолчанию). Если задан аргумент scale, представляющий собой число от 1 до 255, то диапазон случайного числа будет от 0 до scale. Если величина scale превышает 255, то печатается сообщение об ошибке.

Если задана опция -s ("silent" - тишина), случайное число возвращается как код завершения, но не выводится на стандартное устройство вывода. Если возникает ошибка, то команда random возвращает нулевой код завершения.

СМ. ТАКЖЕ

rand(2)

ЗАМЕЧАНИЯ

Эта команда не выполняет вычисления с плавающей точкой.

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



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


ИМЯ

ranlib - пocтpoeниe oглaвлeниe библиoтeки

СИНТАКСИС

ranlib archive ...

ОПИСАНИЕ

Koмaндa ranlib cтpoит для yкaзaнныx библиoтeк oбъeктныx фaйлoв archive oглaвлeниe, дoбaвляя в нaчaлo библиoтeки фaйл c имeнeм __.SYMDEF. B нeм пepeчиcлeны вce внeшниe имeнa из oбъeктныx фaйлoв, cocтaвляющиx библиoтeкy.

Oглaвлeниe дaeт вoзмoжнocть кoмпoнoвщикy выбиpaть вce нeoбxoдимыe фaйлы из библиoтeки, нeзaвиcимo oт пopядкa иx pacпoлoжeния. Kpoмe тoгo, кoмпoнoвкa из библиoтeки c oглaвлeниeм пpoиcxoдит быcтpee.

Koмaндa ranlib иcпoльзyeт кoмaндy для пepecтpoйки библиoтeки, пoэтoмy нa диcкe дoлжнo быть дocтaтoчнo cвoбoднoгo мecтa для вpeмeнныx фaйлoв.

СМ. ТАКЖЕ

, , ,

ПPИМEЧAНИE

Пpи кoмпoнoвкe ld пpoвepяeт вpeмя мoдификaции библиoтeки и вpeмя coздaния библиoтeки и в cлyчae, ecли пepвoe вpeмя бoльшe втopoгo, выдaeт пpeдyпpeждeниe и нe иcпoльзyeт oглaвлeниe. Taкoe мoжeт пpoизoйти и в cлyчae пpocтoгo кoпиpoвaния библиoтeки.



RATFOR(1)


НАЗВАНИЕ

ratfor - препроцессор для рационального диалекта Фортрана

СИНТАКСИС

ratfor [-h] [-C] [-6символ] [файл ..]

ОПИСАНИЕ

Команда ratfor преобразует рациональный диалект Фортрана в обычный, иррациональный Фортран. Ratfor предоставляет управляющие конструкции, по существу идентичные соответствующим конструкциям языка C:

Группировка операторов:

{ оператор; оператор; оператор }

Ветвление:

if (условие) оператор [ else оператор ] switch (целое значение) { case целое: оператор ... [ default: ] оператор }

Циклы:

while (условие) оператор for (выражение; условие; выражение) оператор do пределы оператор repeat оператор [ until (условие) ] break next

и некоторый синтаксический сахар, который облегчает чтение и написание программ:

Свободный формат исходного текста: несколько операторов на одной строке; один оператор на нескольких строках. Комментарии: # - это комментарий. Трансляция операций сравнения и логических операций: >, >=, & и т.д. преобразуются в .GT., .GE., .AND. и т.д. Возврат выражения в качестве результата функции: return (выражение) Макроопределения: define имя замена Вставка файлов: include файл

Допустимые опции:

-h Текстовые константы в кавычках преобразуются в холлеритовские константы вида 27H. -C Комментарии аккуратно форматируются и вставляются в выходной файл. -6символ

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

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

СМ. ТАКЖЕ

, .



RC0(1M)


НАЗВАНИЕ

rc0 - процедура остановки системы

СИНТАКСИС

/etc/rc0

ОПИСАНИЕ

Процедура /etc/rc0 вызывается при изменениях уровня выполнения системы, предполагающих ее деактивацию перед выключением.

Вообще говоря, имеется три уровня, требующих выполнения процедуры rc0: уровень 0 (остановка) уровень 5 (передача управления программам в ПЗУ) уровень 6 (перезагрузка). Например, строка файла /etc/inittab может выглядеть так:

r0:0:wait:/etc/rc0 1> /dev/console 0>&1

Некоторые из действий, производимых процедурой rc0, выполняются файлами из каталога /etc/shutdown.d (что является атавизмом) и файлами, начинающимися с буквы K, из каталога /etc/rc0.d. Эти файлы выполняются в алфавитном порядке [подробнее см. пункт ФАЙЛЫ в ], деактивируя соответствующие системные службы. Таким образом, способ остановки определяется комбинацией команд процедуры rc0 и файлов из каталога /etc/rc0.d.

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

Прекращение работы системных служб и демонов

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

Если в систему добавляются новые службы, требующие аккуратного завершения при остановке системы, в каталог /etc/rc0.d следует добавить соответствующие файлы.

Завершение процессов

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

Уничтожение процессов

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

В результате предшествующих действий активными остаются лишь специальные системные процессы 0 и 1, а также процесс, связанный с /etc/rc0.

Размонтирование всех файловых систем

Остается смонтированной только корневая (/) файловая система.

Дальнейшие действия определяются уровнем выполнения (0, 5 или 6) и содержимым файла /etc/inittab. Если, как в случае уровня 0, в файле не определены дополнительные действия, операционная система ничего не делает и нет возможности получить ее отклик. Все, что можно сделать - это либо выключить питание, либо вызвать аппаратный монитор.

Процедура rc0 может быть выполнена только суперпользователем.

СМ. ТАКЖЕ

, , , .

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

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



RC2(1M)


НАЗВАНИЕ

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

СИНТАКСИС

/etc/rc2

ОПИСАНИЕ

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

Процедура rc2 вызывает файлы из каталога /etc/rc.d, а также файлы (начинающиеся с буквы S) из каталога /etc/ rc2.d. Эти файлы выполняются командным интерпретатором в алфавитном порядке, определяемом кодом ASCII (подробности см. ниже в пункте ФАЙЛЫ). При добавлении новых функций, требующих инициализации при переходе в многопользовательский режим, соответствующие файлы должны быть занесены в каталог /etc/rc2.d.

Обычно процедура rc2 и вызываемые ею файлы выполняют следующую последовательность действий:

Удаляются все файлы из каталогов /tmp и /usr/tmp. Инициализируются все порты и запускаются соответствующие программы. Запускается демон регулярных действий /etc/cron. Удаляются временные файлы и файлы-замки из каталога /usr/spool/locks.

Процедура rc2 может быть выполнена только суперпользователем.

ПРИМЕРЫ

Ниже представлены примеры процедур из каталога /etc/ rc2.d. Имена файлов начинаются с префикса Sn, где n числа, определяющие порядок выполнения файлов.

S03MOUNTFILESYS # Монтирование файловых систем cd / /etc/mountall /etc/fstab

S04RMTMPFILES # Очистка каталога /tmp rm -rf /tmp mkdir /tmp chmod 777 /tmp chgrp sys /tmp chown sys /tmp

S70uucp # Удаление временных файлов системы uucp. rm -rf /usr/spool/locks/*

ФАЙЛЫ

Файлы в каталоге /etc/rc2.d должны начинаться с S или K, за которыми следует номер и далее остаток имени. При выходе на уровень выполнения 2 файлы вида S* выполняются с опцией start, файлы К* - с опцией stop. Файлы, начинающиеся с других символов, игнорируются. Последнее свойство можно использовать для временного выключения файлов без их удаления.

Файлы каталогов /etc/rc.d и /etc/rc2.d выполняются в алфавитном порядке, определяемом кодом ASCII.

СМ. ТАКЖЕ

.



RCMD(1)


ИМЯ

rcmd - посылает команды на удаленные UNIX-машины.

СИНТАКСИС

rcmd [-n] [-l user]

ОПИСАНИЕ

Команда rcmd подзволяет вам посылать команды к удаленным UNIX-совместимым машинам и получать результат их работы назад. Вам нет необходимости регистрироваться на удаленной машине, чтобы использовать rcmd. Эта команда полезна для создания дистрибутивных shell программ. Чтобы использовать rcmd, вы должны иметь эквивалент машины-адресата.(Эквиваленты пользователя описаны в главе 2). Машина-адресат это машина, на которой вы хотите выполнить команду. Эта команда может быть использована только с удаленными машинами, которые используют UNIX или UNIX-совместимую операционную систему. Команда rcmd передает свой стандартый ввод и вывод удаленно выполняемым командам и возвращает в исходную систему все, что является результатом работы удаленной команды, т.е. стандартный вывод и файл ошибок. Для прямого доступа вас должен быть файл /usr/hosts.

Вызов rcmd.

Команда rcmd взята из командного языка UNIX. Вы должны установить имя машины и одну или более команд для выполнения. Например:

# rcmd имя машины команда(ы)

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

# имя машины команда(ы)

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

Опции rcmd.

Существует две опции, которые вы можете специфицировать при вызове rcmd. Эти опции следующие:

-l пользователь Обычно, команда, которую вы специфицируете, выполняеися на удаленной машине под вашим пользовательским именем. Эта опция позволяет вам выполнять команду под другим пользовательским именем. Например:

# rcmd имя машины -l tom команда

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

-n Эта опция защищает rcmd от посылки стандартного ввода в удаленную команду и вас от считывания стандартного ввода. Это делается с помощью /dev/null. Например:


# rcmd имя машины -n -l tom команда

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

Пример сеанса использования rcmd.

Следующий пример показывает как rcmd используется для выполнения команды на удаленной машине, называемой admin. Вывод располагается в файле на локальной машине посредством считывания стандартного вывода. В этом примере стандартный вывод направляется в файл /tmp/admin.who.

# rcmd admin who > /tmp/admin.who

Дистанционная печать.

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

$ cat temp1 Ѓ rcmd systemx lp










RCP(1)


ИМЯ

rcp - Копирует файлы на удаленных машинах

СИНТАКСИС

rcp [ options ] [srcmachine:]srcfile [destmachine:]destfile

ОПИСАНИЕ

Команда rcp копирует файлы между системами в сети Micnet. Эта команда копирует файл srcmachine:srcfile в файл destmachine:destfile, где srcmachine и destmachine - это необязательные имена систем в сети, а srcfile и destfile - пути файлов. Если имя машины не задано, то назначается имя текущей системы. Если вместо srcfile задан знак -, то команда rcp использует в качестве источника стандартный файл ввода. Каталоги, поименованные на машине-получателе должны иметь разрешение на запись, а каталоги, поименованные на удаленной машине-источнике, должны иметь разрешение на чтение.

ОПЦИИ

-m Посылает по почте и сообщает о завершении команды, независимо от того, есть ли ошибка, или нет.

-u [machine:]user

Любая почта идет к поименованному пользователю (user) на машину machine. По умолчанию аргумент machine это машина, на которой команда rcp завершается, либо на которой была обнаружена ошибка. Если для пользователя на такой машине существует псевдоним в системных файлах псевдонимов, то почта будет пересылаться в соответствующий почтовый ящик(ки). Т.к. системные файлы псевдонимов обычно идентичны по всей сети, то любая машина, заданная в аргументе machine, в большинстве случаев не принимается во внимание механизмом обработки псевдонимов. Для того, чтобы избежать назначение псевдонимов, аргумент user следует отделить по меньшей мере двумя символами "\" (по меньшей мере четырьмя, если в качестве user задается команда интерпретатора shell).

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

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


Такая строка должна быть в файле /etc/default/micnet на системах в этой сети:

rcp=/usr/bin/rcp

Либо такие строки должны быть в таком файле:

executeall execpath=PATH=path

где path должен содержать /usr/bin.

ПРИМЕР

rcp -m machine1:/etc/mnttab /tmp/vtape

СМ. ТАКЖЕ

, micnet(3), ,

ДИАГНОСТИКА

Если возникает ошибка, почта отсылается данному пользователю.

ЗАМЕЧАНИЯ

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

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









RCS(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rcs - изменение внутренних атрибутов архивного файла

СИНТАКСИС

rcs флаги имя-файла ...

ОПИСАНИЕ

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

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

ФЛАГИ

-i

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

-alogins

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

-Aoldfile

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

-e[logins]

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

-b[rev]

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

-cstring

Устанавливает префикс для комментариев. При первоначальной регистрации файла без инициализации командой ci или с инициализацией командой rcs -i без этого флага, RCS определяет способ задания комментариев по расширению имени рабочего файла.

флаг сохранен исключительно для совместимости с предыдущими версиями, поскольку при включении истории изменений в рабочий файл по ключевому слову $Log$ , RCS вставляет префикс, заданный этим ключевым словом, при востребовании из архива (см. ). Однако, старые версии RCS используют в таком случае префикс, заданный данным флагом. Следовательно, если Вы планируете использовать и старые и новые версии, позаботьтесь о соответствии префикса в строке с $Log$ и префикса для комментариев.

-ksubst


Устанавливает правила подстановки ключевых символов. Возможные правила subst описаны в . Явное задание флага -k в командах co, rcsdiff и rcsmerge подавит заданное по умолчанию значение. Используйте rcs -kv с осторожностью, поскольку -kv несовместно с co -l. Для восстановления обычных правил подстановки, используйте rcs -kkv .

-l[rev]

Бронирует для пользователя последнюю версию из тех, чей номер меньше или равен rev . Если rev задает номер ветви, то последнюю версию на этой ветви из тех, чей номер меньше или равен rev . Если rev опущен, то бронируется последняя версия ветви, используемой по умолчанию. Бронирование необходимо для предотвращения накладывающихся друг на друга изменений вносимых разными пользователями. Правило отмены бронирования, в случае, если кто-то забронировал файл до Вас такое же, как и в случае rcs -u (см. ниже).

-u[rev]

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

-L

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

-U

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

-mrev:msg



Заменить регистрационную запись для версии rev строкой msg .

-M

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

-nname[:[rev]]

Связать символическое имя name с ветвью или версией rev . Удалить символическое имя name , если отсутствуют и rev и двоеточие; в ином случае, если имя name связано с другой версией, выдать сообщение об ошибке. Если rev -- символический номер, то подстановка номера в rev осуществляется до связывания c name . Если rev является номером ветви, оканчивающимся точкой, то связывается последняя версия ветви, двоеточие без номера версии означает последнюю версию на ветви, используемой по умолчанию, обычно на главной. Например,

rcs -nname: RCS/*

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

rcs -nname:$ RCS/*

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

-Nname[:[rev]]

Действует так же, как и -n, но безусловно отменяет старое значение name, если таковое было задано.

-orange

Удалить из архива версии из промежутка range. Если range состоит из одной версии, удалить эту версию, если range является номером ветви, то удалить последнюю версию данной ветви. Если range имеет вид rev1:rev2 то удалить все версии начиная с rev1 и кончая rev2 включительно, на одной ветвиЖ :rev означает промежуток от начала соответствующей ветви до rev включительно; rev: означает промежуток от rev до конца соответствующей ветви включительно. Ни одна из удаляемых версий не должна быть забронирована или служить началом побочной ветви.

-q

Не печатать никаких сообщений.

-I

Задать диалоговый режим, даже если ввод осуществляется не с терминала.

-sstate[:rev]

Придать версии rev статус state . Если rev задает номер ветви, то последней версии на этой ветви из тех, чей номер меньше или равен rev . Если rev опущен, то последней версии ветви, используемой по умолчанию. В качестве state можно использовать любой идентификатор. Рекомендуются к использованию: Exp (экспериментальная), Stab (стабильная), и Rel (выпуск). По умолчанию статус Exp.

-t[file]



Использовать содержимое файла file в качестве описания регистрируемого файла. Старое описание затирается. Ограничение: минус не может быть первым символом в имени file. Если имя файла не задано, подразумевается стандартный ввод, сообщение с которого должно оканчиваться символом конца файла, либо строкой, содержащей единственную точку. Выдается приглашение к вводу, если возможен диалог, см. -I. Описание требуется при флаге -i, даже если флаг -t не задан.

-t-string

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

-T

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

-V

Посылает номер версии RCS на стандартный вывод.

-Vn

Имитирует поведение версии n комплекса программ RCS . См. .

-xsuffixes

Задает суффикс, добавляемый к имени архивного файла. См. .

-zzone

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

Для совместимости с будущими версиями требуется явное задание хотя бы одного флага.

СОВМЕСТИМОСТЬ

Флаг -brev порождает архивные файлы, которые не могут быть правильно восприняты системой RCS версии 3 или более ранней.

Флаг -ksubst (кроме -kkv) порождает архивные файлы, которые не могут быть правильно восприняты системой RCS версии 4 или более ранней.

Для того, чтобы привести архив в вид, который может быть правильно восприняты системой RCS версии n , примените команду rcs -Vn .

Система RCS до версии 5.5 не поддерживала флаг -x и требовала суффикс ,v .

ФАЙЛЫ

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

ПЕРЕМЕННЫЕ СРЕДЫ



LOGNAMEИмя пользователя. В UNIX задано автоматически, в MS-DOS требуется задать явно командой

set LOGNAME=имя-пользователя

TZЧасовой пояс. В UNIX задан автоматически, в MS- DOS требуется задать явно командой set.

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

СООБЩЕНИЯ

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

СМ. ТАКЖЕ

, , , , , , , , rcsfile(5)

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

Copyright (C) Walter F. Tichy, Paul Eggert.

ПРОБЛЕМЫ

При системном сбое, например вызвавшем перезапуск, могут оставаться сигнальные файлы (см. ВРЕМЕННЫЕ ФАЙЛЫ И ЛИНКИ), которые содержат информацию о том, что в данное время идет работа с архивным файлом, что не даст его изменить. Положение легко исправить, удалив сигнальные файлы, имена которых обычно или начинаются с запятой, или заканчиваются на символ подчеркивания.

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

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









RCSCLEAN(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rcsclean - чистка каталога с рабочими файлами в системе отслеживания версий RCS

СИНТАКСИС

rcsclean [флаги] [имя-файла ... ]

ОПИСАНИЕ

Команда rcsclean удаляет из текущего каталога рабочие файлы, над которыми не ведется работа (которые не забронированы для внесения изменений никем). Команда rcsclean -u удаляет и отменяет бронирование тех файлов, которые не были изменены фактически.

Для каждого заданного файла, команда rcsclean сравнивает рабочий файл с забронированной версией архивного файла. Если они отличаются, то ничего не происходит. В противном случае, при наличии флага -u отменяется бронирование, и, если файл не является одновременно бронированным и открытым для записи (сочетание, характерное для востребования с целью внесения изменений), он удаляется. О всех своих действиях команда rcsclean посылает сообщения на стандартный вывод вызываемые rcs -u (о снятии брони) и rm -f (об удалении).

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

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

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

ФЛАГИ

-ksubst

Устанавливает правила подстановки ключевых символов при извлечении для сравнения. Возможные правила subst описаны в . Явное задание флага -k подавит заданное по умолчанию значение. -n[rev]

Не удалять файлы и не снимать бронь с версий, но сообщить о требуемых действиях. -q[rev]

Не печатать никаких сообщений. -r[rev]

Задает версию для сравнения с рабочим файлом. -T

Сохраняет дату и время последнего изменения рабочего файла даже если в нем была снята бронь и изменены значения ключевых символов. Такое поведение флага вводит в заблуждению команду и, потому необходима осторожность. Флаг -T позволяет избежать ненужных построений (компиляций), но она может подавить их и тогда, когда изменение идентификационных маркеров существено для результата построения. -u[rev]

Снять бронирование версии, если она не отличается от рабочего файла. -V

Посылает номер версии RCS на стандартный вывод. -Vn

Имитирует поведение версии n комплекса программ RCS . См. . -xsuffixes

Задает суффикс, добавляемый к имени архивного файла. См. . -zzone

Задает формат даты и часовой пояс при подстановке ключевых слов в маркеры. См. . <


/p>

ПРИМЕРЫ

rcsclean *.c *.h

Удалить все рабочие файлы с расширениями .c и .h , которые не были изменены со времени своего востребования.

rcsclean

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

ФАЙЛЫ

Команда rcs работает с файлами так же, как команда .

ПЕРЕМЕННЫЕ СРЕДЫ

RCSINIT Список флагов используемых со всеми командами системы отслеживания версий RCS. Не забудьте, что необходимы меры для того, чтобы пробелы между флагами не были обработаны командным интерпретатором преждевременно, защищайте их, например, кавычками. См. . Полезными опциями могут быть -q, -V, -x и -z .

СООБЩЕНИЯ

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

СМ. ТАКЖЕ

, , , , , , , , rcsfile(5)

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

ПРОБЛЕМЫ

Для старых версий UNIX требуется задание по крайней мере одного файла.









RCSDIFF(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rcsdiff - сравнение версий файла в системе отслеживания версий RCS

СИНТАКСИС

rcsdiff [ -ksubst ] [ -q ] [ -rrev1 [ -rrev2 ] ] [ -T ] [-V[n] ] [ -xsuffixes ] [ -zzone ] [ diff флаги] имя-файла ...

ОПИСАНИЕ

Команда rcsdiff вызывает команду для сравнения двух версий одного файла.

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

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

Флаг -ksubst Устанавливает правила подстановки ключевых символов при извлечении для сравнения. Возможные правила subst описаны в . Явное задание флага -k подавит заданное по умолчанию значение. Например, -kk -r1.1 -r1.2 игнорирует разницу связанную с разными значениями ключевых символов в версиях 1.1 to 1.2. Чтобы уменьшить выдачу и игнорировать различия вызванные подстановкой ключевых символов, по умолчанию задан флаг -kkvl , если: (1) задана хотя бы одна версия, (2) флаг -k не задан явно , (3) подстановка ключевых слов по умолчанию задана флагом -kkv и (4) атрибуты рабочего файла были созданы командой co -l .

Флаг -q подавляет выдачу сообщений. О флагах -T, -V, -x и -z см. .

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

ПРИМЕРЫ

Команда

rcsdiff f.c

сравнит рабочий файл с последней версией на главной ветви.

ПЕРЕМЕННЫЕ СРЕДЫ

RCSINIT

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

СООБЩЕНИЯ

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

СМ. ТАКЖЕ

, , , , , , ,

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

Copyright (C) Walter F. Tichy, Paul Eggert.



RCSFILE(5) ФОРМАТ ФАЙЛОВ


НАЗВАНИЕ

rcsfile - формат архивного файла в Системе Отслеживания Версий RCS .

ОПИСАНИЕ

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

Специальные строки ограничены с обеих сторон символами @. Если архивируемая или специальная строка сама содержит @, то этот символ удваивается. Специальная строка может содержать любые символы.

Мета-синтаксис формул, использованный ниже, придерживается следующих соглашений: Символ `|' разделяет два элемента, из которых нужно выбрать один. Символы `{' и `}' ограничивают необязательный элемент. Символы `{' и `}*' ограничивают элемент, который может быть повторен ноль или более раз. Символ `{' and '}+' ограничивают элемент, который должен быть повторен один или более раз.

rcstext ::= admin {delta}* desc {deltatext}*

admin ::= head {num}; { branch {num}; } access {id}*; symbols {sym : num}*; locks {id : num}*; {strict ;} { comment {string}; } { expand {string}; } { newphrase }*

delta ::= num date num; author id; state {id}; branches {num}*; next {num}; { newphrase }*

desc ::= desc string

deltatext ::= num log string { newphrase }* text string

num ::= {digit | .}+

digit ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

id ::= {num} idchar {idchar | num}*

sym ::= {digit}* idchar {idchar | digit}*

idchar ::= любой печатаемый символ, кроме special

special ::= $ | , | . | : | ; | @

string ::= @{любой символ, но @ удваиваются}*@

newphrase ::= id word* ;

word ::= id | num | string | :

Для идентификаторов имеет значение, прописная буква или строчная. Все ключевые слова набраны в нижнем регистре. Множества идентификаторов и ключевых слов могут пересекаться. Для большинства операционных систем в RCS используется стандарт ISO 8859/1 , где печатаемыми символами считаются коды 041-176 и 240-377 в восьмеричной записи, а пробелами -- 010-015 и 040 (что согласуется с КОИ-8 и кодировками IBM для OS2 и MS-Windows [code page 2041] и Mackintosh для славянских языков, но стандартная и альтернативная [code page 866] кодировки для MS-DOS приводят к двоичным файлам).

Даты после ключевого слова date имеют вид Y.mm.dd.hh.mm.ss, где Y -- год, mm -- месяц (01-12), dd день -- (01-31), hh -- час (00-23), mm -- минута (00-59), и ss секунда (00-60). Для обозначения дат с 1900 по 1999 Y представляет собой две последние цифры года; следующие года будут обозначаться четырьмя цифрами. Во внутреннем формате файла используются Григорианский Календарь и Всемирное Время.

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

Вершины, соответствующие delta образуют дерево. Вершины с номерами из двух чисел (напр., 2.3, 2.1, 1.3, и т.п.) образуют главную ветвь, и заданы обратными приращениями текста в убывающем порядке версий, начиная с последней версии главной ветви, записанной в архив целиком. Поле head в блоке admin указывает на вершину этой цепочки, т.е. на последнюю в лексикографическом смысле пару. Поле branch в блоке admin указывает на ветвь (или версию) используемую по умолчанию. Если это поле пусто, то используется последняя версия на главной ветви (старшая ветвь, выходящая из последней версии).

Вершины delta, чьи номера заданы 2n числами (n>=2) (напр., 3.1.1.1, 2.1.2.2, и т.п.) связаны следующим образом. Вершины с одинаковыми 2n-1 первыми номерами, упорядочены по последнему полю в возрастающем порядке и заданы прямыми приращениями, начиная с основания побочной ветви -- точке ветвления, заданной 2n-2 числами, общими для побочной ветви. Вершина соответствующая точке ветвления содержит упорядоченный по возрастанию список начальных вершин всех побочных ветвей, выходящих из нее.

Следующая диаграмма демонстрирует организацию информации в архиве.


Head | | v / \ --------- / \ / \ / \ | | / \ / \ / \ / \ | 2.1 | / \ / \ / \ / \ | | / \ / \ /1.2.1.3\ /1.3.1.1\ | | /1.2.2.2\ /1.2.2.1.1.1\ --------- --------- --------- --------- ------------- ^ ^ | ^ ^ | | | | | | | v | | / \ | --------- / \ | / \ | \ 1.3 / / \ | / \ ---------\ / / \----------- /1.2.1.1\ \ / /1.2.2.1\ --------- \ / --------- ^ | ^ | | | | v | | --------- | | \ 1.2 / | ----------------------\ /--------- \ / \ / | | v --------- \ 1.1 / \ / \ / \ /

СМ. ТАКЖЕ

, , , , , , , ,

Walter F. Tichy, RCS-- A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.










RCSFREEZE(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rcsfreeze - фиксация состояния проекта для последующего воспроизведения в системе отслеживания версий RCS

СИНТАКСИС

rcsfreeze [символическое-имя]

ОПИСАНИЕ

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

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

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

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

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

ФАЙЛЫ

RCS/.rcsfreeze.ver -- номер версии RCS/.rcsfreeze.log -- регистрационные записи в обратном порядке

АВТОР

Stephan v. Bechtolsheim

СМ. ТАКЖЕ

, , ,

ПРОБЛЕМЫ

rcsfreeze не проверяет, изменены ли и востребованы ли версии.

Соответствие имен рабочих и архивных файлов отличается от команд в системе отслеживания версий RCS

Проверка ошибок не развита.

rcsfreeze всего лишь пример командного файла иллюстрирующий применение RCS. Те же задачи решены гораздо серьезнее в пакете CVS.



RCSINTRO(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

обзор системы RCS - введение в Систему Отслеживания Версий

ОПИСАНИЕ

RCS (Revision Control System) представляет собой систему отслеживания версий изменяющихся текстовых или состоящих из строк двоичных файлов, как текст на русском языке ( о прочих -- см. флаг -kb команды co) файлов. RCS автоматизирует архивирование (не путать со сжатием!), востребование, регистрацию изменений, идентификацию и сравнение файлов, а также внесение изменений в документ, измененный другими за время вашей работы. RCS полезна для работы с часто изменяющимися документами, например, программами в процессе разработки, технической документацией, научными статьями, деловой перепиской, сборниками инструкций, и существенно облегчает работу с большими системами, в особенности, если изменения в документы вносят разные люди.

Взаимодействие с пользователем чрезвычайно просто. Новичку достаточно знать две команды: ci и co.

ci - сокращение от "check in" = "регистрация" (в том смысле, в каком понимается регистрация на самолет) - помещает содержимое рабочего файла в архивный файл, хранящий предыдущие его версии (точнее, изменения между версиями) и называемый также RCS-файлом.

co - сокращение от "check out" представляют собой не обратный процесс исключения, а получение копии некоторой версии из RCS-архива.

ФУНКЦИИ RCS

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

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

Хранить историю изменений. RCS делает это автоматически. Кроме самих изменений текста, вносятся также дата, имя (точнее, login name) автора, дата и время внесения изменений, и, также, краткие комментарии, описывающие суть внесенных изменений. Эта, своего рода, летопись, позволяет быстро понять, что происходило с документом без трудоемкого сравнения распечаток и опроса работавших с текстом сотрудников.

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

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

Объединять параллельные линии развития одного документа, предотвращая конфликты. RCS делает это производя "суммарное" изменение. Если же внесенные в две линии изменения затронули один и тот же фрагмент кода, RCS предупреждает пользователя о наложении изменений. Тот же механизм (см. флаг -j команды co) позволяет отменить изменение, внесенное на одном из предыдущих этапов, сохранив исправления, сделанные на последующих. Это же позволяет автоматически создавать локальные версии из новой главной и старой локальной. Управлять подразделением версий и конфигураций. В дополнение к тому, что возможно восстановление состояние отслеживаемой системы, существовавшее в любой заданный момент, соответственные версии всех файлов могут быть помечены одним и тем же ключевым символом. Версии может быть придан статус, обозначающий, что она является экспериментальной, стабильной, коммерческой, выпуском и др. Это позволяет просто и недвусмысленно описывать этапы развития большой системы, состоящей из многих документов.

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

Минимизировать необходимое для хранения место. Для новой версии RCS хранит только изменения (построчные). Удаление промежуточных версий позволит сэкономить лишь на строках, которые изменялись несколько раз.


ПЕРВЫЕ ШАГИ В РАБОТЕ С RCS

Предположим, Вы хотите отслеживать с помощью RCS изменения файла f.c . Создайте в том каталоге, где находится файл f.c , подкаталог RCS ,

mkdir RCS

а затем зарегистрируйте его:

ci f.c

Эта команда создаст в подкаталоге RCS некий архивный файл ( RCS/f.c,v , если операционная система поддерживает запятые в имени файла, и RCS/f.c , если -- нет), поместит в него f.c в качестве версии 1.1 и запросит у вас описание файла -- что он из себя представляет, зачем нужен и т.п. Эта запись будет относиться ко всем версиям. При регистрации (внесении) последующих изменений RCS запрашивает сообщение другого сорта -- регистрационную запись -- описание внесенного изменения, которое будет относиться к данной конкретной версии. Эти записи и составят историю изменений файла.

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

co f.c

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

co -l f.c

( -l -- "lock" = "запереть"). Теперь Вы можете редактировать f.c .

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

rcsdiff f.c

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

ci f.c

что придаст новой версии очередной порядковый номер.

При регистрации возможно сообщение об ошибке:

ci error: no lock set by your_name

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



rcs -l f.c

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

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

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

rcs -U f.c либо rcs -L f.c

В командах, упомянутых выше, можно указывать и архив и рабочий файл, а можно, только один из них. В последнем случае RCS сначала ищет архив в подкаталоге RCS , затем в том же каталоге, что и заданный рабочий файл; поиск же рабочего файла начинается с текущего каталога. Удобнее держать архивы в подкаталоге RCS и не загромождать каталог с рабочими файлами. (В версии, скомпилированной для MS-DOS, это необходимо из-за невозможности добавить архивный суффикс к имени рабочего файла.)

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

ci -l f.c или ci -u f.c

Обе формы регистрируют файл, не удаляя его и экономят, тем самым, одну операцию восстановления. Первый вариант не открывает файла для других, и удобен, если Вы продолжаете его, редактировать; второй удобен, если Вы закончили работу с файлом; но оба не изменят официального рабочего файла, если Вы регистрируете файл из третьего места (указав путь к обоим файлам или слинковав официальный рабочий каталог RCS в Ваш личный, где находится Ваша копия рабочего файла), и потребуется команда co в каталоге с официальным рабочим файлом, чтобы заменить его последней версией. При этом все идентификационные метки файла (см. ниже) обновляются.

Можно задать номер новой версии в качестве явного аргумента команды ci. Например, старые версии имели номера 1.1, 1.2, 1.3, и т.д., а Вы объявляете выпуск 2. Команда



ci -r2 f.c или ci -r2.1 f.c

присвоит новой версии номер 2.1. Начиная с данной версии, версии будут нумероваться 2.2, 2.3, и т.д. соответствующая форма команды co

co -r2 f.c или co -r2.1 f.c

востребует соответственно, либо последнюю из версий вида 2.x либо версию 2.1. Команда co со флагом -r без номера востребует последнюю версию главной ветви, т.е. лексикографически наибольший номер версии, состоящий из пары чисел. Для обозначения побочных ветвей и версий из них требуется набор большей длины. Если, например, вы хотите начать побочную ветвь вариантов от версии 1.3, наберите

ci -r1.3.1 f.c

Эта команда начнет ветвь 1 версии 1.3 и даст первой версии новой ветви номер 1.3.1.1. Для дополнительной информации о побочных ветвях см. в разделе формат файлов rcsfile(5).

АВТОМАТИЧЕСКАЯ ИДЕНТИФИКАЦИЯ

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

$Id$

RCS заменит этот маркер строкой вида

$Id: имя-файла версия дата время автор статус $

С такой отметкой на первой странице каждого модуля легко видеть номер версии рабочего файла. RCS автоматически обновляет такие идентификационные маркеры. Если требуется включить такой маркер в объектный код, присвойте его фиктивной строковой переменной. В C это делается так:

static char rcsid[] = "$Id$";

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

Другой маркер -- $Log$. Он заменяется историей изменения файла. О прочих маркерах см. .

ПРОБЛЕМЫ

При системном сбое, например вызвавшем перезапуск, могут оставаться сигнальные файлы (см. ВРЕМЕННЫЕ ФАЙЛЫ И ЛИНКИ), которые содержат информацию о том, что в данное время идет работа с архивным файлом, что не даст его изменить. Положение легко исправить, удалив сигнальные файлы, имена которых обычно или начинаются с запятой, или заканчиваются на символ подчеркивания.

СМ. ТАКЖЕ

, , , , , , ,

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

Copyright (C) Walter F. Tichy, Paul Eggert.










RCSMERGE(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rcsmerge - объединение изменений, сделанных в разных версиях файла в системе отслеживания версий RCS

СИНТАКСИС

rcsmerge [флаги] имя-файла ...

ОПИСАНИЕ

Команда rcsmerge производит объединение изменений, сделанных с разными версиями одного файла и помещает их в новый рабочий файл. С формальной точки зрения, над рабочим файлом совершаются изменения, ведущие от первой указанной в командной строке версии ко второй (см. флаг -j команды co ).

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

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

Команда rcsmerge сообщает о наложении изменений, сделанных с одними строками, разделяя накладывающиеся участки, как объяснено в .

ФЛАГИ

-AЕсли команда на вашем компьютере поддерживает флаг -A , то сообщения выдаются именно в этом стиле. В итоге, применение изменений ведущих от первой версии ко второй, к рабочему файлу, порождая при этом самую подробную информацию. Утилита diff3 из соответствующего пакета GNU этот флаг поддерживает, поэтому имеет смысл указать при построении RCS на вашем компьютере, что используется именно эта версия утилиты. -E, -eЭти флаги задают стиль сообщений о наложении изменений, менее подробный, чем -A. См. . По умолчанию используется -E. Флаг -e не порождает никаких предупреждений. -ksubstУстанавливает правила подстановки ключевых символов при извлечении для сравнения. Возможные правила subst описаны в . Явное задание флага -k подавит заданное по умолчанию значение. Например, -kk -r1.1 -r1.2 игнорирует разницу связанную с разными значениями ключевых символов в версиях 1.1 to 1.2. Если задан флаг -kb , команда rcsmerge не будет работать. -p[rev]Результат записывается не в рабочий файл, а в стандартный вывод. -q[rev]Все сообщения подавляются. Используется в фоновом режиме. -r[rev]Изменения отсчитывать от версии rev . Если rev не задан, то берется последняя версия ветви, используемой по умолчанию. -TПрисутствует исключительно для совместимости с другими командами RCS. -VПосылает номер версии RCS на стандартный вывод. -VnИмитирует поведение версии n комплекса программ RCS . См. . -xsuffixesЗадает суффикс, добавляемый к имени архивного файла. См. . -zzoneЗадает формат даты и часовой пояс при подстановке ключевых слов в маркеры. См. .


ПРИМЕРЫ

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

rcsmerge -p -r2.8 -r3.4 f.c > f.merged.c

и проверьте файл f.merged.c . Другой способ объединения изменений состоит в том, чтобы занести исправления к версии 2.8 в архивный файл как версию 2.8.1.1 и применить co -j :

ci -r2.8.1.1 f.c co -r3.4 -j2.8:2.8.1.1 f.c

В следующем примере в рабочем файле f.c , скажем, версии 3.4 , отменяются все изменения сделанные между версиями 2.4 и 2.8 этого файла:

rcsmerge -r2.8 -r2.4 f.c

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

ПЕРЕМЕННЫЕ СРЕДЫ

LOGNAME

Имя пользователя. В UNIX задано автоматически, в MS-DOS требуется задать явно командой

set LOGNAME=имя-пользователя

TZ

Часовой пояс. В UNIX задан автоматически, в MS-DOS требуется задать явно командой set.

RCSINIT

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

СООБЩЕНИЯ

Возвращает операционной системе 0 если нет накладок, 1 если есть небольшие проблемы, с которыми программа справляется по ее мнению, и 2 если накладки слишком серьезны для работы.

СМ. ТАКЖЕ

, , , , , , , , rcsfile(5)

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

Copyright (C) Walter F. Tichy, Paul Eggert.










RDCHK(3) NIX System V (21 июня 1987)


ИМЯ

rdchk - пpoвepяeт нaличиe дaнныx для чтeния

СИНТАКСИС

int rdchk (fdes) int fdes;

ОПИСАНИЕ

rdchk пpoвepяeт, бyдeт ли пpoцecc блoкиpoвaн, ecли oн пoпытaeтcя читaть фaйл c нoмepoм fdes. rdchk вoзвpaщaeт 1, ecли ecть дaнныe для чтeния или дocтигнyт кoнeц фaйлa (EOF). Oбычнo, rdchk иcпoльзyeтcя в тaкoм кoнтeкcтe:

if(rdchk(fildes)>0) read(fildes,buffer,nbytes);

СМ. ТАКЖЕ

read(3)

ДИАГНОСТИКА

rdchk вoзвpaщaeт -1, ecли oбнapyжeнa oшибкa EBADF, 0, ecли пpoцecc бyдeт блoкиpoвaн пocлe вызoвa read, и 1, ecли чтeниe вoзмoжнo. Oшибкa EBADF вoзникaeт, ecли вызoв rdchk пpимeнeн к ceмaфopнoмy фaйлy или yкaзaнный фaйл нe cyщecтвyeт.

ЗAМEЧAНИЯ

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



READ(2)


НАЗВАНИЕ

read - чтение из файла

СИНТАКСИС

int read (fildes, buf, nbyte) int fildes; char *buf; unsigned nbyte;

ОПИСАНИЕ

Аргумент fildes - это дескриптор файла, полученный после выполнения системных вызовов , , , или .

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

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

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

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

Чтение с псевдоустройств [см. ] может выполняться в трех различных режимах: байтном, режиме сообщений без сброса и режиме сообщений со сбросом. Стандартным является байтный режим. С помощью системного вызова ioctl режим может быть изменен (опция I_SRDOPT [см. ]) и опрошен (опция I_GRDOPT). В байтовом режиме системный вызов read выбирает данные из потока до тех пор, пока не получит nbyte байт или пока не выберет все данные потока. В этом режиме границы сообщений игнорируются.

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


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

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

При попытке чтения из пустого канала:

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

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

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

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

Если установлен флаг O_NDELAY, то возвращается значение -1, а переменной errno присваивается код ошибки EAGAIN. Если не установлен флаг O_NDELAY, то читающий процесс откладывается до тех пор, пока данные не появятся.

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



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

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

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

[EAGAIN] Установлены флаги учета блокировки файла и O_NDELAY, и требуемый сегмент файла заблокирован. [EAGAIN] Общее количество системной памяти, предоставленной для бесструктурного ввода/вывода, временно оказалось недостаточным. [EAGAIN] При установленном флаге O_NDELAY в потоке нет сообщений, ожидающих чтения. [EBADF] Аргумент fildes не является корректным дескриптором файла, открытого на чтение. [EBADMSG] Сообщение, считываемое из потока, не является сообщением с данными. [EDEADLK] Попытка ожидания чтения приводит к тупику. [EFAULT] Аргумент buf указывает за пределы отведенного процессу адресного пространства. [EINTR] Во время выполнения системного вызова перехвачен сигнал. [EINVAL] Попытка чтения из потока, который мультиплексируется. [ENOLCK] Нет свободного места в системной таблице блокировок. [ENOLINK] Аргумент fildes является дескриптором файла на удаленном компьютере, связи с которым в данный момент нет.

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

СМ. ТАКЖЕ

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

ДИАГНОСТИКА

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









RED(1)


НАЗВАНИЕ

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

СИНТАКСИС

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

ОПИСАНИЕ

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

СМ. ТАКЖЕ

.



REGCMP(1)


НАЗВАНИЕ

regcmp - компилятор регулярных выражений

СИНТАКСИС

regcmp [-] файл ...

ОПИСАНИЕ

Команда regcmp в большинстве случаев устраняет необходимость использования системного вызова из C-программ. Это уменьшает и время выполнения, и размер программы. Команда regcmp компилирует регулярные выражения, хранящиеся в файле, и помещает результат в файл.i. Если используется опция -, результат помещается в файл.c. Формат записей в файле - имя (C-переменная), за которой следует один или более пробелов, а затем регулярное выражение в двойных кавычках.

Результат regcmp - текст на C. Скомпилированные регулярные выражения представляются как векторы extern char. Сформированные .i-файлы могут быть включены в C программы, а .c-файлы могут быть откомпилированы и затем загружены. В C-программе, которая использует результат команды regcmp, функция regex (abc, line) сопоставляет цепочку символов line с регулярным выражением, именуемым abc. Диагностические сообщения говорят сами за себя.

ПРИМЕРЫ

name "([A-Za-z][A-Za-z0-9_]*)$0" abc "\({0,1}([2-9][01][1-9])$0\){0,1} *" "([2-9][0-9]{2})$1[ -]{0,1}" "([0-9]{4})$2"

СМ. ТАКЖЕ

.



REGCMP(3X)


НАЗВАНИЕ

regcmp, regex - компиляция и выполнение регулярного выражения

СИНТАКСИС

char *regcmp (string1 [, string2, ...], (char *) 0) char *string1, *string2, ...;

char *regex (re, subject [, ret0, ...]) char *re, *subject, *ret0, ...;

extern char *__loc1;

ОПИСАНИЕ

Функция regcmp компилирует регулярное выражение, состоящее из конкатенированных аргументов, и возвращает указатель на результат компиляции. Чтобы захватить пространство для результата, используется функция . Ответственность за освобождение ставшего ненужным пространства, которое было выделено при помощи malloc, возлагается на пользователя. Пустой указатель NULL, возвращенный в качестве результата regcmp, свидетельствует о некорректности аргументов. Чтобы, в общем случае, устранить необходимость вызова данной функции во время выполнения, написана команда .

Функция regex сопоставляет скомпилированный образец с цепочкой символов subject. Regex возвращает пустой указатель NULL в случае неудачи или указатель на символ, следующий после сопоставленного фрагмента, в случае успеха. Если нужно получить больше выходной информации, следует передать дополнительные аргументы. В глобальной переменной __loc1 возвращается указатель на позицию, где сопоставление началось. Функции regcmp и regex почти впрямую заимствованы из редактора ; синтаксис и семантика регулярных выражений изменены незначительно. Ниже перечислены допустимые символы и описана их трактовка.

[ ] * . ^

Эти символы сохраняют свой обычный для смысл.

$ Этот символ сопоставляется с концом цепочки символов; \n сопоставляется с символом перевода строки.

- Минус в квадратных скобках обозначает "от и до". Например, запись [a-z] эквивалентна [abcd...xyz]. Минус может встречаться сам по себе, только если он является первым или последним символом. Например, класс символов [ ]-] сопоставляется с символами ] и -.

+ Плюс, следующий за регулярным выражением, обозначает "один или более раз". Например, запись [0-9]+ эквивалентна [0-9][0-9]*.


{m} {m,} {m, u}

Целые значения, заключенные в фигурные скобки, указывают, сколько раз должно применяться предшествующее регулярное выражение. Минимальное число применений задается величиной m, максимальное величиной u, которая должно быть меньше, чем 256. Если указано только значение {m}, оно обозначает точное число применений регулярного выражения. Запись {m,} эквивалентна {m, бесконечность}. Операции + и * эквивалентны соответственно {1,} и {0,}.

( ... )$n

Значение регулярного выражения в скобках должно быть возвращено. Значение заносится в (n+1)-й аргумент после subject. В текущей версии допускается максимум 10 таких регулярных выражений. Данные присваивания выполняются безусловно.

( ... )

Круглые скобки используются для группировки. Оператор (например, *, +, { }) может работать с одним символом или с регулярным выражением, заключенным в скобки. Например, (a*(cb+)*)$0.

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

ПРИМЕРЫ



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

char *cursor, *newcursor, *ptr; ... newcursor = regex((ptr = regcmp("^\n", (char *)0)), cursor); free (ptr);

В следующем примере будет сопоставлена цепочка символов "Testing3" и возвращен адрес после последнего сопоставленного символа (адрес символа "4"). Цепочка "Testing3" будет скопирована в массив ret0.

char ret0 [9]; char *newcursor, *name; ... name = regcmp ("([A-Za-z][A-za-z0-9]{0,7})$0", (char *) 0); newcursor = regex (name, "012Testing345", ret0);

Предварительно скомпилированное регулярное выражение из файла file.i [см. ] будет применено к аргументу string:

#include "file.i" char *string, *newcursor; ... newcursor = regex (name, string);

ФАЙЛЫ

/usr/lib/libPW.a Библиотека, в которой хранятся описанные функции.

СМ. ТАКЖЕ

.

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

СЮРПРИЗЫ

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









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


ИМЯ

regexp - кoмпилиpyeт и pacпoзнaeт peгyляpныe выpaжeния

СИНТАКСИС

#define INIT <declarations>

#define GETC() <getc code>

#define PEEKC() <peekc code>

#define UNGETC(c) <ungetc code>

#define RETURN(pointer) <return code>

#define ERROR(val) <error code>

#include <regexp.h>

char *compile (instring, expbuf, endbuf, eof) char *instring, *expbuf, *endpbuf;

int step (string, expbuf) char *string, *expbuf;

ОПИСАНИЕ

Здecь oпиcывaютcя пpoгpaммы pacпoзнaвaния peгyляpныx выpaжeний oбщeгo видa в фopмe , oпpeдeлeнныx в /usr/include/regexp.h. Этoт фaйл иcпoльзyют пpoгpaммы , , , и дp. Для пoддepжaния coвмecтимocти peгyляpныx выpaжeний тoлькo этoт фaйл нyждaeтcя в мoдификaции.

Пpoгpaммы, иcпoльзyющиe этoт фaйл, дoлжны имeть cлeдyющиe 5 мaкpocoв, oпpeдeлeниe кoтopыx дoлжнo пpeдшecтвoвaть oпepaтopy #include <regexp.h>. Эти мaкpocы иcпoльзyютcя пpoгpaммoй compile.

GETC() Boзвpaщaeт знaчeниe cлeдyющeгo cимвoлa в peгyляpнoм выpaжeнии. Пocлeдyющиe вызoвы GETC() вoзвpaщaют cлeдyющиe cимвoлы peгyляpнoгo выpaжeния.

PEEKC() Boзвpaщaeт знaчeниe cлeдyющeгo cимвoлa в peгyляpнoм выpaжeнии. Пocлeдyющиe вызoвы PEEKC() вoзвpaщaют тoт жe cимвoл peгyляpнoгo выpaжeния (кoтopый coвпaдaeт c oчepeдным вoзвpaщaeмым GETC() cимвoлoм).

UNGETC(c) Пpивoдит к тoмy, чтo apгyмeнт c cтaнeт cимвoлoм, кoтopый вoзвpaтит oчepeднoй вызoв GETC() (и PEEKC()). He бoлee oднoгo cимвoлa мoжнo вepнyть и этo бyдeт тoт, чтo пpoчтeт oчepeднoй вызoв GETC(). Знaчeниe мaкpoca UNGETC(c) игнopиpyeтcя.

RETURN(pointer)

Этoт мaкpoc иcпoльзyeтcя для нopмaльнoгo выxoдa из пpoгpaммы compile. Укaзaтeль pointer yкaзывaeт cимвoл пocлe пocлeднeгo pacпoзнaннoгo cимвoлa peгyляpнoгo выpaжeния. Этo иcпoльзyeтcя пpoгpaммaми, yпpaвляющими pacпpeдeлeниeм пaмяти.

ERROR(val) Этoт мaкpoc иcпoльзyeтcя для aвapийнoгo выxoдa из пpoгpaммы compile. Apгyмeнт val ecть нoмep oшибки (cм. тaблицy нижe).



REGEXP(5)


НАЗВАНИЕ

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

СИНТАКСИС

#define INIT описания #define GETC( ) реализация_GETC #define PEEKC( ) реализация_PEEKC #define UNGETC(c) реализация_UNGETC #define RETURN(p) реализация_RETURN #define ERROR(v) реализация_ERROR

#include <regexp.h>

char *compile (instring, expbuf, endbuf, eof) char *instring, *expbuf, *endbuf; int eof;

int step (string, expbuf) char *string, *expbuf;

extern char *loc1, *loc2, *locs;

extern int circf, sed, nbra;

ОПИСАНИЕ

В данной статье описываются универсальные функции сопоставления регулярных выражений в форме , определенные во включаемом файле <regexp.h>. Этот исходный файл используется такими программами, как , , , и , которые выполняют сопоставление регулярных выражений. Тем самым обеспечивается согласованная трактовка регулярных выражений.

У этого файла неприятный интерфейс. Программы, которые включают данный файл, перед оператором #include <regexp.h> должны содержать определение пяти макросов, перечисленных ниже. Макросы используются функцией compile.

GETC( ) Возвращает значение следующего символа в регулярном выражении. Последовательные вызовы GETC будут возвращать последовательные символы регулярного выражения. PEEKC( ) Возвращает следующий символ в регулярном выражении. Последовательные вызовы PEEKC возвращают один и тот же символ (данный символ будет возвращен и при следующем вызове GETC). UNGETC(c) Обеспечивает, чтобы символ c был выдан при следующем вызове GETC (и PEEKC). Оговаривается, что не делается попыток вернуть подряд более одного символа, и этот символ является последним, прочитанным GETC. Значение макроса UNGETC игнорируется. RETURN(p) Данный макрос используется при нормальном завершении функции compile. Значение аргумента p - указатель на символ, следующий за последним символом скомпилированного регулярного выражения. Это полезно для программ, которые должны заниматься распределением памяти. ERROR(v) Аварийное завершение функции compile. Аргумент v - это код ошибки. Возврата из данного макроса быть не должно. Коды ошибок:

КодТолкование 11Верхняя граница диапазона слишком велика. 16Некорректное число. 25"\цифра" вне диапазона. 36Некорректный или отсутствующий разделитель. 41Нет запомненной цепочки символов для поиска. 42Не сбалансированы скобки \( и \). 43Слишком много открывающих скобок \(. 44В скобках \{ \} указано больше двух чисел. 45Фигурная скобка } ожидалась после \. 46В скобках \{ \} первое число больше второго. 49Не сбалансированы скобки [ и ]. 50Переполнение регулярного выражения.

<


/p>

Обращение к функции compile выглядит так:

compile (instring, expbuf, endbuf, eof)

Первый аргумент instring никогда не используется функцией compile явно, но бывает удобен для программ, которые передают различные указатели на входные символы. Иногда он используется в описаниях INIT (см. ниже). Программы, которые получают символы посредством вызовов функций или хранят их во внешнем массиве, могут передавать в качестве этого аргумента значение ((char *) 0).

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

Аргумент endbuf на единицу превосходит максимальную позицию, в которой может быть размещено регулярное выражение. Если скомпилированное выражение не умещается в (endbuf-expbuf) байт, выполняется вызов ERROR (50).

Аргумент eof - это символ, который отмечает конец регулярного выражения. Например, в этим символом обычно является /.

В каждой программе, которая включает файл <regexp.h>, должен быть оператор #define для имени INIT. Заданные в нем описания будут размещены в самом начале функции compile. Чаще всего макрос INIT служит для того, чтобы установить регистровую переменную на начало регулярного выражения с целью последующего использования в GETC, PEEKC и UNGETC. Кроме того, в INIT можно описать внешние переменные, используемые макросами GETC, PEEKC и UNGETC. См. ниже пример описаний, взятый из .

В файле <regexp.h> есть и другие функции, которые фактически выполняют сопоставление регулярных выражений; одна из них - функция step. Обращение к ней выглядит так:

step (string, expbuf)

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

Второй аргумент, expbuf, - скомпилированное регулярное выражение, полученное при помощи функции compile.

Функция step возвращает ненулевое значение, если данная цепочка сопоставляется с регулярным выражением, и 0 в противном случае. Если сопоставление имеет место, побочный эффект функции step заключается в установке двух внешних указателей. Переменная loc1, устанавливаемая функцией step, является указателем на первый сопоставленный символ. Переменная loc2, которая устанавливается функцией advance, указывает на символ, следующий за последним сопоставленным символом. Таким образом, если с регулярным выражением сопоставилась вся цепочка, то loc1 будет указывать на первый символ string, а loc2 - на нулевой байт в конце string.



Функция step использует внешнюю переменную circf. Compile присваивает этой переменной ненулевое значение, если регулярное выражение начинается с ^; в таком случае step будет пытаться выполнять сопоставление только с начала цепочки символов. Если до первой попытки сопоставления откомпилировано более одного регулярного выражения, следует сохранить для каждого скомпилированного выражения значение circf и восстанавливать значение этой переменной перед каждым вызовом step.

Функция advance вызывается из step с теми же аргументами, что и step. Задача функции step - передвигать указатель string на символ вперед и вызывать advance; step выполняется до тех пор, пока либо advance не возвратит ненулевое значение, что обозначает сопоставление, либо не будет достигнут конец string. Если хотят в любом случае ограничиться сопоставлением с начала цепочки string, step не вызывают, а просто используют advance.

Если функция advance встречает в регулярном выражении * или последовательность \{ \}, она, выполняя сопоставление, продвигает указатель на цепочку символов, насколько это возможно, и рекурсивно вызывает сама себя, пытаясь сопоставить остаток цепочки с остатком регулярного выражения. Если при этом сопоставление не выполнится, advance будет возвращаться вдоль цепочки, пока не обнаружит сопоставления либо не вернется к позиции в цепочке символов, с которой первоначально было сопоставлено * или \{ \}. Иногда желательно остановить этот возврат назад до того, как будет достигнуто начало цепочки. Если locs - внешний указатель на символ - в некоторый момент процесса возврата станет равен позиции в цепочке символов, advance прервет цикл возврата и завершится с результатом 0. Эта возможность используется программами и при выполнении глобальной подстановки (то есть не для первого вхождения, а для всей цепочки); например, при обработке выражений типа /y*//g не возникнет бесконечного цикла.

ПРИМЕР

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



#define INIT register char *sp = instring; #define GETC() (*sp++) #define PEEKC() (*sp) #define UNGETC(c) (--sp) #define RETURN(c) return; #define ERROR(c) regerr()

#include <regexp.h> ... (void) compile (*argv, expbuf, &expbuf[ESIZE], '\0'); ... if (step(linebuf, expbuf)) succeed();

СМ. ТАКЖЕ

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

R_PCRWORD Двухбайтное смещение относительно счетчика команд. R_PCRLONG Четырехбайтное смещение относительно счетчика команд.

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

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

СМ. ТАКЖЕ

a.out(4), .

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









REMOTE(1)


ИМЯ

remote

СИНТАКСИС

remote [ - ] [ -f file ] [ -m ] [-u user] machine command [ arguments ]

ОПИСАНИЕ

Команда remote - это ограниченное сетевое средство, которое позволяет выполнять команды XENIX в нескольких каналах. Команды в любой присоединенной системе могут выполняться из главной системы , использующей команду remote. Командная строка, состоящая из команд (аргумент command) и любых аргументов, разделенных пробелами, выполняется на удаленной машине (machine). Имя машины размещается в файле /etc/systemid. Заметим, что метасимволы не расшифровываются на удаленной машине, поэтому их не следует указывать в аргументах. Под действием необязательного ключа -m почта посылается пользователю, сообщая об успешном выполнении команды.

Доступны следующие опции:

- Знак тире означает, что в качестве стандартного ввода для команды command на удаленной машине (machine) используется стандартный файл ввода. Стандартный файл ввода расположен на местной главной ЭВМ, а не на удаленной машине. -ffile Использовать описанный в аргументе file файл в качестве стандартного файла ввода для команды на удаленной машине. Файл file существует на местной главной машине, а не на удаленной машине. -m По почте сообщается пользователю о завершении команды. По умолчанию почта сообщает только об ошибках. -u user Любая почта идет к пользователю с именем, указанным в аргументе user, на машину machine. По умолчанию machine - это машина , на которой обнаружена ошибка, либо на которой команда remote была завершена. Если для пользователя на такой машине существует псевдоним в системных файлах псевдонимов, то почта будет пересылаться в соответствующий почтовый ящик(ки). Т.к. системные файлы псевдонимов обычно идентичны по всей сети, то любая машина, заданная в аргументе machine, в большинстве случаев не принимается во внимание механизмом обработки псевдонимов. Для того, чтобы избежать назначение псевдонимов, аргумент user следует отделить по меньшей мере двумя символами "\" (по меньшей мере четырьмя, если в качестве user задается команда интерпретатора shell).

Для успешного использования команды remote прежде всего должна быть установлена сама сеть систем, и инициализированы соответствующие процедуры "демоны" с помощью команды . Также, для выполнения команды command с использованием команды remote на каждой удаленной машине к файлам /etc/default/micnet необходимо добавить точки входа.

ПРИМЕР

Следующая команда выполняет команду ls в каталоге /tmp машины machine1:

remote machine1 ls /tmp

СМ. ТАКЖЕ

, , , micnet(3)

ЗАМЕЧАНИЯ

Команда mail использует эквивалент команды remote для пересылки почты между машинами.



RENICE(1)


ИМЯ

renice - изменение приоритета выполняющихся процессов

СИНТАКСИС

renice priority pid... renice priority [-p pid... ] [-g pgid...] [-u username]

ОПИСАНИЕ

Команда renice используется для изменения приоритетов выполняющихся процессов. Новое значение приоритета задается числовой константой priority, которая может принимать значения в диапазоне от -20 до +20. Непривилегированные пользователи могут установить значение приоритета только в пределах 0-20, в то время как для системного администратора доступен весь диапазон. Наиболее типичными значениями являются следующие: 19 - процессы выполняются только в том случае, когда у процессора нет никакой спешной работы; 0 - базовый приоритет равноправных процессов, выполняющихся под управлением диспетчера; отрицательное значение - для выполнения наиболее спешных и безотлагательных работ.

СМ. ТАКЖЕ



RESTALL(1)


НАЗВАНИЕ

restall - восстановление файлов с магнитной ленты

СИНТАКСИС

restall [-r] [-t] [-f] [шаблон ...]

ОПИСАНИЕ

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

Утилита restall обрабатывает следующие опции:

-r Интерактивно запрашиваются имена, под которыми будут восстанавливаться файлы. Если в ответ ввести пустую строку, файл пропускается (не извлекается с ленты). -t На стандартный вывод выдается оглавление ленты. Восстановления файлов при этом не происходит, остальные аргументы командной строки игнорируются. -f Восстанавливаются все файлы, кроме указанных в шаблоне.

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

Просмотреть оглавление ленты и поместить его в некоторый файл (например, tmp)

restall -t > tmp

Отредактировать файл tmp, оставив в нем только имена требуемых файлов. Восстановить файлы командой

restall `cat tmp`

СМ. ТАКЖЕ

.

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



RESTORE(1)


ИМЯ

restore, restor - Подключает восстановитель инкрементной фай ловой системы.

СИНТАКСИС

restore key [ arguments ] restor key [ arguments ]

ОПИСАНИЕ

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

Ключ key описывает действия, которые должны быть выполнены. Key - это один из символов cC, rR, tT или xX произвольно комбинированный с опциями k и/или f, либо с F. Команда restor это та же самая команда, отличающаяся только написанием названия.

c,C Проверяет ленту дампа. Используется после того, как сделан дамп, для того, чтобы убедиться в отсутствии ошибок ввода-вывода или ошибок в контрольной сумме. С - это тоже самое, что и с, но С обеспечивает более высокий уровень качества проверки. f Использует первый аргумент (argument) в качестве имени архива (резервное устройство /dev/*) вместо принятого по умолчанию. F F - это номер первого файла на ленте для чтения. Все файлы вплоть до указанного пункта пропускаются. k Вслед за этой опцией необходимо указать размер резервного тома. Эта опция позволяет выполнять считывание многотомных дампов с таких носителей, как гибкие диски. r,R Архив считывается и загружается в файловую систему, описанную в аргументе argument. К этому надо отнестись серьезно. Если задан ключ R, то команда restore запрашивает, какой из архивов многотомной установки следует стартовать. Это позволяет прерывать и вновь стартовать команду restore (перед повторным стартом необходимо выполнить команду fsck). t Печатает дату написания архива и дату резервирования файловой системы. T Распечатывает полный листинг ленты дампа. По аналогии с опцией t. x Выделяется каждый файл из архива, поименованного аргументом (argument). В имени файла удаляются все монтировочные приставки; например, если /usr является смонтированной файловой системой, то в данном архиве файлу /usr/bin/lpr присваивается имя /bin/lpr.

Выделенный файл размещается в файле с численным именем, данным командой restore (фактически это номер узла).

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


Установите том 1 набора резервных архивов. Наберите на клавиатуре команду restore с соответствующим ключом и аргументами. Команда restore проверит каталог dumpdir, затем сообщит, найдены ли файлы, назначит данным файлам численное имя и в случае ленты прокрутит ее к началу данного архива. Далее команда запрашивает вас: "mount the desired tape volume" ("монтировать желаемый том ленты"). Наберите номер выбранного вами тома. При многотомном резерве рекомендуется порядок монтирования томов от последнего до первого. Команда restore проверяет, имеются ли в наличии любые из запрашиваемых файлов в смонтированном архиве ( или в последнем архиве, тогда принимается обратный порядок). Если вы работаете с однотомным резервом, или если количество восстанавливаемых файлов велико, то ответьте на запрос номером 1, и команда restore будет считывать архивы в последовательном порядке.

X То же, что и x, за исключением того, что файлы переносятся в исходное положение. Когда вы пользуетесь этой опцией, опустите начальный знак (/) в имени файла в командной строке restore. Опцию r следует использовать только для восстановления полного резервного архива в чистую файловую систему, или восстановления инкрементного резервного архива в специально созданную файловую систему. Не следует использовать эту команду для восстановления любого резервного архива в корневую файловую систему. Таким образом:

/etc/mkfs /dev/hd1 10000 restore r /dev/hd1

- это типичная последовательность для восстановления полного резерва. Повторная команда restore может быть выполнена для получения инкрементного резерва поверх предыдущего.

Аргумент backup, с последующими командами mkfs и restore, используется для изменения размера файловой системы.

ФАЙЛЫ

rst* Временные файлы /etc/default/restor Имя архивного устройства по умолчанию

Архивное устройство, назначенное по умолчанию, изменяется при установке системы.

ЗАМЕЧАНИЯ

Не возможно успешно восстановить полную активную корневую файловую систему.

Заметим также, что команда restore может быть не способна восстановить более, чем одну файловую систему с ленточных накопителей /dev/nrct0 и /dev/nrct2.

ДИАГНОСТИКА

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

СМ. ТАКЖЕ

, , fsсk(8), ,

REV(1) FreeBSD Reference Manual


ИМЯ

rev - переворачивает строки

СИНТАКСИС

rev [file]

ОПИСАНИЕ

Утилита rev копирует указанный файл на стандартный вывод, переворачивая каждую строку (первый символ становится последним...) Если файл не указан читается со стандартного ввода.



REX


НАЗВАНИЕ

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

СИНТАКСИС

#include <rpcsvc/rex.h>

ОПИСАНИЕ

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

Информация о RPC:


Код (номер) программы:

REXPROG подпрограммы xdr:

int xdr_rex_start(xdrs, start); XDR *xdrs; struct rex_start *start; int xdr_rex_result(xdrs, result); XDR *xdrs; struct rex_result *result; int xdr_rex_ttymode(xdrs, mode); XDR *xdrs; struct rex_ttymode *mode; int xdr_rex_ttysize(xdrs, size); XDR *xdrs; struct rex_ttysize *size; процессы:

REXPROC_START

Принимает структуру rex_start, запускает исполнение команды и возвращает структуру rex_result.

REXPROC_WAIT

Аргументов не имеет, ожидает завершения выполнения команды, возвращает структуру rex_result.

REXPROC_MODES

Принимает структуру rex_ttymode и пересылает режимы работы терминала.

REXPROC_WINCH

Принимает структуру ttysize и пересылает информацию о размерах окна. версии:

REXVERS_ORIG Первоначальная версия структуры:

struct B_sgttyb { char bsg_ispeed; /* скорость ввода */ char bsg_ospeed; /* скорость вывода */ char bsg_erase; /* символ стирания */ char bsg_kill; /* символ удаления */ short bsg_flags; }; struct tchars { char t_intrc; /* прерывание */ char t_quitc; /* выход */ char t_startc; /* запуск вывода */ char t_stopc; /* останов вывода */ char t_eofc; /* конец файла */ char t_brkc; /* разделитель ввода */ }; struct ltchars { char t_suspc; /* сигнал остановки процесса */ char t_dsuspc; /* отложенный сигнал остановки процесса */ char t_rprntc; /* повторный вывод строки */ char t_flushc; /* вывод потоком (ключи) */ char t_werasc; /* стирание слова */ char t_lnextc; /* следующий символ */ };

#define REX_INTERACTIVE 1 /* интерактивный режим */ struct rex_start { char **rst_cmd; /* список команд и аргумен- тов */ char *rst_host; /* имя рабочего каталога host'а */ char *rst_fsname; /* имя каталога файловой системы */ char *rst_dirwithin; /* каталог внутри файловой системы */ char **rst_env; /* список параметров выполне- ния */ ushort rst_port0; /* порт для stdin */ ushort rst_port1; /* порт для stdin */ ushort rst_port2; /* порт для stdin */ ulong rst_flags; /* опции - см. #define выше */ }; struct rex_result { int rlt_stat; /* целочисленный код состоя- ния */ char *rlt_message; /* строка сообщения */ }; struct rex_ttymode { struct B_sgttyb basic; /* флаги для терминала в UNIX версии Berkeley */ struct tchars more; /* прерывание, удаление и т.д. */ struct ltchars yetmore; /* специальные символы в Berkeley */ ulong andmore; /* режимы Berkeley */ }; struct ttysize { int ts_lines; /* количество строк на экране терминала */ int ts_cols; /* количество столбцов на экране терминала */ };

СМ. ТАКЖЕ



Rexd


НАЗВАНИЕ

rexd - сервер удаленного исполнения на базе RPC

СИНТАКСИС

/etc/rexd

ОПИСАНИЕ

Rexd является сервером RPC, обслуживающим выполнение удаленных программ. Если программы неинтерактивные, дескрипторы стандартных файлов привязываются непосредственно к TCP-соединениям. Интерактивные программы используют псевдотерминалы, подобные протоколам регистрации rlogin(1). Этот процесс может воспользоваться услугами NFS для монтирования тех файловых систем, которые указаны в запросе на удаленное исполнение.

ФАЙЛЫ

/dev/ttypn псевдотерминалы, используемые в интерактивном режиме /etc/passwd зарегистрированные пользователи /tmp/rexd.log регистрация ошибок и событий

СМ. ТАКЖЕ

, ,

ДИАГНОСТИКА

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

ЗАМЕЧАНИЯ

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



RLOG(1) КОМАНДЫ ПОЛЬЗОВАТЕЛЯ


НАЗВАНИЕ

rlog - история изменения и прочая информация об архивном файле

СИНТАКСИС

rlog [флаги] имя-файла ...

ОПИСАНИЕ

Команда rlog извлекает регистрационную информацию из архивного файла в системе отслеживания версий RCS.

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

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

-L

Пропустить архивные файлы, не содержащие зарезервированных версий, что эквивалентно совместному заданию -h, -l и -R.

-R

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

-h

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

-t


То же, что и -h, плюс описание файла.

-N

Не выдает символические имена.

-b

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

-ddates

Сообщает информацию о версиях, зарегистрированных в промежутке времени, определяемом параметром dates. Промежуток, заданный в форме d1<d2 или d2>d1 , определяет версии, зарегистрированные между моментами d1 и d2 исключительно. Промежуток, заданный в форме <d или d> , (соответственно, d< или >d) определяет версии, зарегистрированные строго до (соответственно, после) момента d . Если после знака неравенства добавлен знак равенства, то концы промежутка включаются в рассматриваемый интервал. Параметры d, d1 и d2 могут быть заданы почти в свободном формате, см. . Для того , чтобы символы < и > не были восприняты командным интерпретатором как символ перенаправления потоков ввода-вывода, а были переданы вызываемой программе как аргумент, защищайте их от интерпретации обратной косой чертой, или все выражение date -- кавычками. Если требуется объединить несколько разрозненных интервалов, разделителем служит двоеточие.

-l[lockers]

Сообщать информацию только о версиях, забронированных для внесения изменений. Если задан список lockers пользователей с запятыми в качестве разделителей, то версии, забронированные остальными, игнорируются. Например, rlog -L -R -lwft RCS/* сообщит о всех файлах, с которыми работает пользователь wft.

-r[revisions]

prints information about revisions given in the commaseparated list revisions of revisions and ranges. A range rev1:rev2 means revisions rev1 to rev2 on the same branch, :rev means revisions from the beginning of the branch up to and including rev, and rev: means revisions starting with rev to the end of the branch containing rev. An argument that is a branch means all revisions on that branch. A range of branches means all revisions on the branches in that range. A branch followed by a . means the latest revision in that branch. A bare -r with no revisions means the latest revision on the default branch, normally the trunk.

-sstates



prints information about revisions whose state attributes match one of the states given in the commaseparated list states.

-w[logins]

prints information about revisions checked in by users with login names appearing in the comma-separated list logins. If logins is omitted, the user's login is assumed.

-T

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

-V

Посылает номер версии RCS на стандартный вывод.

-Vn

Имитирует поведение версии n комплекса программ RCS . См. .

-xsuffixes

Задает суффикс, добавляемый к имени архивного файла. См. .

Команда rlog сообщает информацию только о версиях, удовлетворяющих одновременно всем условиям, заданным флагами -d, -l, -s и -w из тех, что удовлетворяют хотя бы одному из ограничений, наложенных флагами -b и -r.

-zzone

Задает формат даты при подстановке ключевых слов в маркеры и часовой пояс для флага -ddate . Параметр zone должен быть либо пуст, либо являться численным значением отклонения от Всемирного Времени (UTC) , либо специальной строкой LT , задающей использование местного времени. По умолчанию, и опущенный параметр zone , задают использование Всемирного Времени с использованием косой черты в качестве разделителя полей для даты (см. пример). В остальных случаях используется стандарт ISO 8601. Например, пусть текущее время 8 часов вечера, 11 января 1990, в Тихоокеанском часовом поясе США (что на 8 часов позже, чем в Гринвиче). Тогда для подстановок будет использовано
флаг формат времени -z 1990/01/12 04:00:00 (по умолчанию) -zLT 1990-01-11 20:00:00-08 -z+05:30 1990-01-12 09:30:00+05:30

Флаг -z влияет только на маркеры, и не меняет формата даты и времени в архивном файле, которые всегда задается во Всемирном Времени.

ПРИМЕРЫ

rlog -L -R RCS/* rlog -L -h RCS/* rlog -L -l RCS/* rlog RCS/*

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

ПЕРЕМЕННЫЕ СРЕДЫ



LOGNAME

Имя пользователя. В UNIX задано автоматически, в MS-DOS требуется задать явно командой

set LOGNAME=имя-пользователя

TZ

Часовой пояс. В UNIX задан автоматически, в MS- DOS требуется задать явно командой set.

RCSINIT

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

СООБЩЕНИЯ

Возвращает операционной системе 0 тогда и только тогда, когда все операции завершились успешно.

СМ. ТАКЖЕ

, , , , , , , rcsfile(5)

Walter F. Tichy, RCS--A System for Version Control, Software--Practice & Experience 15, 7 (July 1985), 637-654.

Copyright (C) Walter F. Tichy, Paul Eggert.

ПРОБЛЕМЫ

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









RM(1)


НАЗВАНИЕ

rm - удаление файлов или каталогов

СИНТАКСИС

rm [-f] [-i] файл ... rm -r [-f] [-i] каталог ... [файл ...]

ОПИСАНИЕ

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

Если нет права на запись в файл и стандартный ввод назначен на терминал, то выдается (в восьмеричном виде) режим доступа к файлу и запрашивается подтверждение; если оно начинается с буквы y, то файл удаляется, иначе - нет. Если стандартный ввод назначен не на терминал, команда rm ведет себя так же, как при наличии опции -f.

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

-f Команда не выдает сообщений, когда удаляемый файл не существует, не запрашивает подтверждения при удалении файлов, на запись в которые нет прав. Если нет права и на запись в каталог, файлы не удаляются. Сообщение об ошибке выдается лишь при попытке удалить каталог, на запись в который нет прав (см. опцию -r). -r Происходит рекурсивное удаление всех каталогов и подкаталогов, перечисленных в списке аргументов. Сначала каталоги опустошаются, затем удаляются. Подтверждение при удалении файлов, на запись в которые нет прав, не запрашивается, если задана опция -f или стандартный ввод не назначен на терминал и не задана опция -i.
При удалении непустых каталогов команда rm -r предпочтительнее команды , так как последняя способна удалить только пустой каталог. -i Перед удалением каждого файла запрашивается подтверждение. Опция -i устраняет действие опции -f; она действует даже тогда, когда стандартный ввод не назначен на терминал.

ПРИМЕРЫ

Опция -i часто используется совместно с -r. По команде:

rm -ir dirname

запрашивается подтверждение:

directory dirname: ?

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

СМ. ТАКЖЕ

.

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

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

0 Все файлы и каталоги были успешно удалены. 2 В противном случае.

ДИАГНОСТИКА

Смысл всех сообщений самоочевиден.

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

rm -r .*

приведет к выдаче сообщений об ошибках.



RMAIL(1)


НАЗВАНИЕ

rmail - посылка почты

СИНТАКСИС

rmail [-o] [-s] [-w] [-t] адресат ...

ОПИСАНИЕ

Команда rmail служит для посылки почты адресатам и предоставляет для этого в точности те же возможности, что и . Утилита использует rmail, а не mail, не рискуя получить что-либо в ответ.

СМ. ТАКЖЕ

.



RMDEL(1)


НАЗВАНИЕ

rmdel - удаление версии из SCCS-файла

СИНТАКСИС

rmdel -rс_идентификатор файл ...

ОПИСАНИЕ

Команда rmdel удаляет версию, заданную посредством с_идентификатора, из каждого указанного файла. Удаляемая версия должна быть самой новой (созданной позже других) на своей ветви в каждом SCCS-файле. Кроме того, указанный с_идентификатор не должен быть извлеченным для редактирования (то есть, если существует p-файл для соответствующего SCCS-файла [см. ], то указанный с_идентификатор должен в нем отсутствовать).

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

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

ФАЙЛЫ

x-файл [см. ] z-файл [см. ]

СМ. ТАКЖЕ

, , , .

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

ДИАГНОСТИКА

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



RMDIR(1)


НАЗВАНИЕ

rmdir - удаление каталогов

СИНТАКСИС

rmdir [-p] [-s] каталог ...

ОПИСАНИЕ

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

Для удаления каталогов нужно иметь те же права доступа, что и в случае удаления обычных файлов [см. ].

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

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

СМ. ТАКЖЕ

.

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

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

0 Все файлы и каталоги были успешно удалены. 2 В противном случае.



Rmtab


НАЗВАНИЕ

Таблица файловых систем, смонтированных на удалении

ОПИСАНИЕ

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

host_имя:каталог

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

ФАЙЛЫ

/etc/rmtab

СМ. ТАКЖЕ

, , ,

ЗАМЕЧАНИЯ

Хотя информация, содержащаяся в таблице rmtab, близка к истине, назвать ее точной на 100% пожалуй нельзя.



RMUSER(8)


НАЗВАНИЕ

rmuser - удаляет пользовательский бюджет из системы.

СИНТАКСИС

/etc/rmuser

ОПИСАНИЕ

rmuser удаляет пользователей из системы. Программа внаачале запрашивает имя пользователя; получив действительное имя пользователя, она удаляет соответствующую запись в файле паролей, почтовый ящик этого пользователя, его файл .profile и весь рабочий каталог. Она удаляет также соответствующую запись о группе пользователей в файле /etc/group, если данный пользователь был единственным членом этой группы и идентификатор группы был больше 50.

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

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

Имя пользователя является одним из "системных" пользовательских имен, таких как root, sys, sysinfo, cron или uucp. Все пользовательские идентификаторы, меньшие 200, считаются зарезервированными для системных нужд и не могут быть удалены с помощью rmuser. Аналогично, все идентификаторы групп, меньшие 50, не могут быть удалены с помощью rmuser. Почтовый ящик пользователя существует и не является пустым. Рабочий каталог пользователя содержит файлы, отличные от файла .profile.

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

ФАЙЛЫ

/etc/passwd /usr/spool/mail/username $HOME

СМ. ТАКЖЕ

,



Rpc


НАЗВАНИЕ

БД номеров программ RPC

СИНТАКСИС

/etc/rpc

ОПИСАНИЕ

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

имя сервера для программы rpc

номер программы rpc

псевдонимы

Элементы записи разделяются между собой любым количеством пробелов и/или символов табуляции. Символом "#" открываются комментарии; вся оставшаяся строка процедурами не интерпретируется.

Рассмотрим пример файла /etc/rpc:

# #rpc 87/12/02 3.9 RPCSRC # portmapper 100000 portmap sunrpc rstat_svc 100001 rstatd rstat rup perfmeter rusersd 100002 rusers nfs 100003 nfsprog mountd 100005 mount showmount walld 100008 rwall shutdown etherstatd 100010 etherstat rquotad 100011 rquotaprog quota rquota sprayd 100012 spray 3270_mapper 100013 rje_mapper 100014 selection_svc 100015 selnsvc database_svc 100016 rexd 100017 rex alis 100018 sched 100019 llockmgr 100020 nlockmgr 100021 x25.inr 100022 statmon 100023 status 100024 bootparam 100026 keyserv 100029 keyserver

ФАЙЛЫ

/etc/rpc

СМ. ТАКЖЕ



Rpcgen


НАЗВАНИЕ

rpcgen компилятор протокола RPC

СИНТАКСИС

rpcgen вх_файл rpcgen -h [-o вых_файл] [вх_файл] rpcgen -c [-o вых_файл] [вх_файл] rpcgen -m [-o вых_файл] [вх_файл] rpcgen -l [-o вых_файл] [вх_файл] rpcgen [-s транспорт]* [-o вых_файл] [вх_файл]

ОПИСАНИЕ

Rpcgen является средством создания Си-программы, реализующей протокол RPC. На вход компилятора поступает файл на языке RPCL (Язык удаленных процедурных вызовов). Как правило, компилятор из одного файла на входе (первый вариант) генерирует четыре выходных файла. Если входной файл имеет имя proto.x, генерируемые файлы именуются следующим образом: proto.h - файл заголовков, proto_xdr.c - процедуры XDR, proto_svc.c - разделы, имеющие отношение к серверу, а proto_clnt.c - к клиентам.

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

Все выходные файлы перед интерпретацией rpcgen проходят обработку Си-препроцессором cpp(CP), поэтому директивы cpp во входном файле rpcgen допустимы. Каждому типу выходного файла соответствует специальный символ cpp: RPC_HDR, RPC_XDR, RPC_SVC и RPC_CLNT.

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

Отдельные XDR-процедуры можно настраивать, не определяя их тип. При этом rpcgen будет предполагать существование процедуры с именем, состоящим из имени неопределенной структуры и приставки xdr_.

Настоятельно рекомендуем вам, прежде чем приступить к использованию утилиты rpcgen, прочитать главы, посвященные RPC и XDR, в "Руководстве программиста SCO NFS".

ОПЦИИ

-c Компиляция процедур XDR. -h Компиляция определений данных на Си (файл заголовков). -o вых_файл

Указание имени выходного файла. По умолчанию используется файл стандартного вывода (только для режимов -c, -h, -s). -l Получение разделов, имеющих отношение к клиенту. -s транспорт

Получение разделов, имеющих отношение к серверу, с использованием указанного транспортного протокола. Поддерживаемые типы транспортного протокола: udp и tcp. При использовании нескольких протоколов опция вызывается несколько раз. -m Получение разделов, имеющих отношение к серверу, без создания процедуры main(). Используется в том случае, если пользователь создает свою собственную процедуру main().


ИСПОЛЬЗОВАНИЕ

Краткое описание синтаксиса RPCL

Элементарные типы данных [unsigned] char [unsigned] short [unsigned] int [unsigned] long unsigned float double void bool Если не считать типа bool (булевы данные), во всем остальном RPCL подобен Си.

В выходном файле заголовков rpcgen преобразует определения bool в определения int (точнее говоря, в определения bool_t, которые операцией #define описаны как int). Кроме того, тип void может появиться только в определениях union и program. Для типов с приставкой unsigned допустимо использование аббревиатуры uchar, ushort, uint и ulong.

ОПРЕДЕЛЕНИЯ

В RPCL разрешены только три типа определений:

простое_определение

имя_типа идентификатор_объекта

Пример:

long a;

определение_с_указателем

имя_типа *идентификатор_объекта

Пример:

char *b;

векторное_определение

имя_типа идентификатор_объекта[размер]

("размер" может быть целой или символьной константой)
Пример:

opaque c[10];

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

Данные типа opaque описываются как вектор:

opaque идентификатор_объекта[размер]

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

Строки описываются особо, по типу векторного определения:

string идентификатор_объекта[максимальный_размер]

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

char *идентификатор_объекта

Описания типов

Rpcgen используется для генерации процедуры XDR и/или файла заголовков, описывающего типы данных из входного файла. Для каждого описываемого zetype утилита rpcgen создает соответствующую процедуру XDR, именуемую xdr_zetype и обязательную для создания RPC-программ.

Существуют шесть способов описания типа:



описание_типа: typedef перечислимый_тип-def структура-def массив_переменной_длины-def размеченное_объединение-def программа-def

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

Вложенность описаний типов в XDR не допускается. Например, следующая запись для rpcgen будет непонятна:

struct dontdoit { struct ididit { int oops; } sorry; enum ididitagain { OOPS, WHOOPS } iapologize; };

Оператор typedef в XDR выглядит следующим образом: typedef:

typedef имя_типа идентификатор_объекта ;

"Идентификатор объекта" является именем нового типа, в то время как "имя_типа" относится к исходному типу. Например:

typedef longa;

Синтаксис описания перечислимого типа:

перечислимый_тип-def: enum идентификатор_типа { список_типов }; список_типов: символьный_идентификатор [=присваивание] символьный_идентификатор [=присваивание], список_типов (в правой части оператора, после знака равенства может распо- лагаться целая или символьная константа)

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

Структуры:

структура-def: struct идентификатор_структуры { список_описаний }; список_описаний: описание; описание; список_описаний

Массивы переменной длины:

массив_переменной_длины-def: array идентификатор_массива { unsigned идентификатор_длины ; векторное_определение ; };

Описание массива переменной длины похоже на описание структуры. Пример:

array mp_int { unsigned len; short val[MAX_MP_LENGTH]; };

Эта запись преобразуется компилятором в:

struct mp_int { unsigned len; short *val; }; typedef struct mp_int mp_int;

Размеченное объединение:

размеченное_объединение-def: union идентификатор_объединения switch (описание_дискриминанта) { список_случаев [default: описание;] }; список_случаев: case идентификатор_случая : описание; case идентификатор_случая : описание; список_случаев описание_дискриминанта: описание



Описание объединения похоже на пересечение Си-объединения с Си-переключателем. Пример:

union net_object switch (net_kind kind) { case MACHINE: struct sockaddr_in sin; case USER: int uid; default: string whatisit; };

Эта запись преобразуется компилятором в:

struct net_object { net_kind kind; union { struct sockaddr_in sin; int uid; char *whatisit; } net_object; }; typedef struct net_object net_object;

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

Описания программ:

программа-def: program идентификатор_программы { список_версий }=номер_программы; список_версий: версия версия список_версий версия: version идентификатор_версии { список_процедур }=номер_версии; список_процедур: описание_процедуры описание_процедуры список_процедур описание_процедуры: имя_типа идентификатор_процедуры(имя_типа)=номер_процедуры;

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

program DATE_PROG { version DATE_VERS { date DATE_GET(timezone) = 1; void DATE_SET(date) = 2; /* время по Гринвичу */ } = 1; } = 100;

В файле заголовков эта запись будет иметь следующий вид:

#define DATE_PROG 100 #define DATE_VERS 1 #define DATE_GET 1 #define DATE_SET 2

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

Рассмотрим локальную процедуру реализации DATE_GET:

date * /* всегда возвращает указатель на результаты */ date_get_l(tz) timezone *tz; /* всегда получает указатель на аргументы */ { static date d; /* должна быть статической! */ /* * получение даты * и сохранение ее в d */ return(&d); }



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

Вывод правил компиляции заголовков

Правила преобразования суффиксов в при компиляции процедур XDR и заголовков (по условию файлы протоколов RPCL имеют расширение .x):

.SUFFIXES:.x .x.c: rpcgen -c $< -o $@ .x.h: rpcgen -h $< -o $@

Пример:

Рассмотрим программу example, в которой описываются данные трех типов:

const NFS_PORT = 2059; enum nfsstat { NFS_OK=0 }; struct gnumbers { long g_assets; long g_liabilities; };

Утилита rpcgen, вызванная без аргументов, создает файл заголовков example.h и файл XDR с именем example_xdr.c.

example.h #define NFS_PORT 2059 enum nfsstat { NFS_OK = 0, }; typedef enum nfsstat nfsstat; bool_t xdr_nfsstat(); struct gnumbers { long g_assets; long g_liabilities; }; typedef struct gnumbers gnumbers; bool_t xdr_gnumbers();

example_xdr.c #include <rpc/rpc.h>

#include "infile.h"

bool_t xdr_nfsstat (xdrs, objp) XDR *xdrs; nfsstat *objp; { if (!xdr_enum(xdrs, (enum_t *)objp)) { return (FALSE); } return (TRUE); }

bool_t xdr_numbers (xdrs, objp) XDR *xdrs; gnumbers *objp; { if (!xdr_long(xdrs, &objp->g_assets)) { return (FALSE); } if (!xdr_long(xdrs, &objp->g_liabilities)) { return (FALSE); } return (TRUE); }

СМ. ТАКЖЕ

"Руководство программиста SCO NFS"

ЗАМЕЧАНИЯ

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

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









Rpcinfo


НАЗВАНИЕ

rpcinfo - отчет о работе RPC

СИНТАКСИС

rpcinfo -p [host] rpcinfo -u host программа [версия] rpcinfo -t host программа [версия]

ОПИСАНИЕ

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

Опции:

-pОбратиться к преобразователю номеров портов на главную машину (host) и вывести список всех зарегистрированных RPC-программ. Если аргумент host не указан, используется имя, возвращаемое . -uВызвать процедуру 0 указанной программы на указанной host-машине с помощью UDP и сообщить о полученном ответе. -tВызвать процедуру 0 указанной программы на указанной host-машине с помощью TCP и сообщить о полученном ответе. -bПередать сообщение процедуре 0 указанной программы указанной версии с помощью UDP и сообщить о всех ответивших host-машинах.

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

Следует заметить, что номер версии требуется для опции -b.

ПРИМЕР

Чтобы получить информацию по всем услугам RPC, зарегистрированным на машине, введите команду:

rpcinfo -p имя_машины

ФАЙЛЫ

/etc/rpc имена для номеров RPC-программ

СМ. ТАКЖЕ

,



RSH(1)


НАЗВАНИЕ

rsh - интерпретатор ограниченного командного языка

СИНТАКСИС

rsh [-a] [-c цепочка_символов] [-e] [-f] [-h] [-i] [-k] [-n] [-r] [-s] [-v] [-x] [аргумент ...]

ОПИСАНИЕ

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

При работе в rsh пользователь может выполнять те же действия, что и при работе в sh, но нельзя:

Изменить каталог [см. ]. Изменить значение переменной PATH. Указать маршрутное имя файла или команды, содержащее символ /. Переназначить направление вывода (> и >>).

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

Rsh может быть запущен одним из следующих способов:

Файл /bin/rsh указан в последнем поле строки файла /etc/passwd, соответствующей какому-либо пользователю [см. ]. Переменная окружения SHELL существует и ее значение есть /bin/rsh. При запуске shell'а имя файла в аргументе 0 есть rsh. Shell запускается с опцией -r.

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

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

СМ. ТАКЖЕ

.



RUNACCT(1M)


НАЗВАНИЕ

runacct - ежедневная обработка статистики

СИНТАКСИС

/usr/lib/acct/runacct [ммдд [фаза]]

ОПИСАНИЕ

Утилита runacct является основной shell-процедурой ежедневной обработки статистики. Обычно она планируется для регулярного запуска cron'ом [см. ]. Процедура runacct подытоживает накопленную за день информации о сеансах, о процессах, об оплате и об использовании дискового пространства. Готовится также сводка об использовании команд. Наконец, отчет форматируется с помощью процедуры prdaily [см. ] и помещается в каталог сводной статистической информации /usr/adm/ acct/sum.

День, за который подводятся итоги, задается аргументом ммдд, где мм - номер месяца (01 - 12), а дд - номер дня в месяце (01 - 31).

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

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

Фазы выполняются в таком порядке:

SETUP

Перемещение текущей учетной информации в рабочие файлы.

WTMPFIX

Проверка целостности файла /etc/wtmp, при необходимости корректировка сведений о дате/времени.

CONNECT1

Получение записей о сеансах работы пользователей в системе.

CONNECT2

Преобразование записей о сеансах в сводный формат tacct [см. ].

PROCESS

Преобразование статистической информации о процессах в сводный формат tacct.

MERGE

Слияние записей о сеансах работы пользователей и о выполнении процессов.

FEES

Преобразование результатов процедуры chargefee [см. ] в сводный формат и слияние с данными, полученными в предыдущей фазе.

DISK


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

MERGETACCT

Слияние текущей информации из файла daytacct с данными из файла-отчета /usr/adm/acct/sum/tacct.

CMS

Получение сводки по использованию команд.

USEREXIT

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

CLEANUP

Форматирование итогового отчета, удаление временных файлов и выход.

В процедуре runacct предусмотрена защита файлов со статистической информацией от повреждений в случае обнаружения ошибок. Процедура фиксирует ход собственной работы в файле-журнале active (расположенном, как и другие рабочие файлы, в каталоге /usr/lib/acct/nite). При обнаружении какой-либо ошибки на устройство /dev/console выводится диагностическое сообщение, пользователям root и adm посылаются почтовые уведомления [см. ], а выполнение процедуры прекращается. Для защиты от одновременного запуска нескольких экземпляров процедуры runacct используются файлы-замки lock и lock1. Файл-замок lastdate предохраняет от двукратного подведения итогов за один и тот же день.

Прежде чем перезапустить runacct после неудачи, следует прежде всего выяснить характер ошибки (по диагностической записи в файле active), а затем ликвидировать некорректности в исходных файлах (таких как pacct и /etc/wtmp). Наконец, необходимо удалить файлы-замки lock, lock1 и lastdate.

ПРИМЕРЫ

Запуск runacct:

nohup runacct 2>/usr/adm/acct/nite/fd2log &

Перезапуск runacct:

nohup runacct 0602 2>>/usr/adm/acct/nite/fd2log &

Перезапуск runacct с определенной фазы:

nohup runacct 0602 CMS 2>>/usr/adm/acct/nite/fd2log &

ФАЙЛЫ

/etc/wtmp /usr/adm/pacct* /usr/adm/acct/nite/active /usr/adm/acct/nite/daytacct /usr/adm/acct/nite/lock /usr/adm/acct/nite/lock1 /usr/adm/acct/nite/lastdate /usr/adm/acct/nite/statefile /usr/adm/acct/nite/ptacct*.ммдд

СМ. ТАКЖЕ

, , , , , , , .

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

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

ДИАГНОСТИКА

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

СЮРПРИЗЫ

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

runacct ммдд WTMPFIX

В случае неудачного выполнения фазы PROCESS, необходимо удалить последний из файлов ptacct*, так как он неполон









RUNBIG(8)


НАЗВАНИЕ

runbig - запускает команду, которой может понадобиться больше памяти, чем полагается.

СИНТАКСИС

runbig command [arguments]

ОПИСАНИЕ

runbig запускает команды, которая может потребовать больше памяти, чем обычно доступно пользовательскому процессу. Когда runbig запускает заданную команду command, она пренебрегает устанавливаемым по умолчанию значением объема памяти, доступным пользовательскому процессу. Обычно команда command выполняется нормально, пока не выходит за пределы объема доступной пользовательскому процессу памяти. Тогда она блокируется в статической памяти и не подкачивается, пока не будет завершена или уменьшена до размеров доступной по умолчанию памяти.

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

СМ. ТАКЖЕ

,

ПРИМЕЧАНИЯ

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

runbig не оказывает влияния на системы, у которых объем памяти гораздо меньше размеров области свопинга на диске.



RWALL(1) FreeBSD Reference Manual


ИМЯ

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

СИНТАКСИС

rwall host [file]

ОПИСАНИЕ

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

ДИАГНОСТИКА

rwall: RPC: Program not registered

Демон rpc.rwalld(8) не был запущен на удаленной машине.

rwall: RPC: Timed out

Коммуникационная ошибка. Возможно демон rpc.rwalld(8) был терминирован на удаленной машине.

rwall: RPC: Port mapper failure - RPC: Timed out

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

СМ. ТАКЖЕ

, , rpc.rwalld(8)

ИСТОРИЯ

Команда rwall появилась в Sun-OS.

ПРИМЕЧАНИЯ

Опции сортировки не выполняются.



RWHO(1) FreeBSD Reference Manual


ИМЯ

rwho - кто работает на локальных машинах.

СИНТАКСИС

rwho [-a]

ОПИСАНИЕ

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

ФАЙЛЫ

/var/rwho/whod.* Информация о других машинах.

СМ. ТАКЖЕ

ruptime(1), rwhod(8)

ИСТОРИЯ

Команда rwho появилась в 4.3BSD.

ПРИМЕЧАНИЯ

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