Man pages на русском

         

BACKUP(1)


НАЗВАНИЕ

backup - Производит наращиваемое резервирование файловой системы.

СИНТАКСИС

backup [ key [arguments] filesystem ]

ОПИСАНИЕ

Команда backup копирует все файлы, измененные после определенной даты в date параметра filesystem. Параметр key задает дату и другие опции резервной копии backup и состоит из символов следующего множества 0123456789kfusd. Значения этих символов описаны ниже:

f

Помещает резервную копию в следующий файл argument вместо устройства по умолчанию.

u

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

0-9

Это число является "уровнем резервирования".Резервирует все файлы, измененные после последней даты, хранящейся в файле /etc/ddate, для одной и той же файловой системы на меньших уровнях. Если уровень не определяет никакой даты, то начало отсчета времени предполагается; так опция 0 вызывает резервирование всей файловой системы.

s

Для резервирования на магнитную ленту размер ленты указывается в футах. Число футов берется из следующего параметра argument. После того как будет достигнут указанный обьем, команда backup будет ждать смены катушки. Обьем, принимаемый по умолчанию - 2,300 футов.

d

Для резервирования на магнитную ленту плотность магнитной ленты, выраженная в битах на дюйм BPI берется из следующего параметра argument. Эта величина используется в вычислении обьема магнитной ленты,требуемого на запись. По умолчанию - 1600.

k

Эта опция используется при резервировании на устройство, имеющее блочную структуру, такое, как гибкий диск. Объем тома (в К-байтах) берется из следующего параметра argument. Если указан аргумент k, то аргументы s и d опускаются. По умолчанию используются s и d.

Если параметры не заданы, параметр key принимается равным 9u, а по умолчанию файловая система резервируется на устройство, принятое по умолчанию.

Первое резервирование должно быть полным резервированием с уровнем 0:






backup 0u

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

backup 9u

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

1 2 1 3 1 4 ...

где резервирование 1 используется через раз, резервирование 2каждый четвертый раз, резервирование 3 - каждый восьмой раз и т.д. Когда 9-ти уровневое инкрементное резервирование становится трудно поддающимся контролю из-за того, что заполнена лента или требуется слишком много гибких дисков, должно быть произведено резервирование уровня 1:

backup 1u

После этого экспоненциальные серии должны прогрессировать так,как будто они не прерывались.Эти 9-ти уровневые резервирования основываются на 1-уровневом резервировании, которое основывается на полном резервировании с уровнем 0. Эта прогрессия уровней резервирования может продолжаться столько, сколько требуется.

Файловая система, принимаемая по умолчанию, и устройство резервирования зависят от установок переменных DISK и TAPE соответственно, в файле /etc/default/backup.

ФАЙЛЫ

/etc/ddate

Записывают даты резервирования файловой системы/ уровня /etc/default/backup

Информация о резервировании, принимаемая по умолчанию

СМ. ТАКЖЕ

, default(1), , , , backup(3)

ДИАГНОСТИКА

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

ПРИМЕЧАНИЯ

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

Если принятый по умолчанию архивный носитель данных, указанный в /etc/default/backup или /etc/default/restor является носителем с блочной структурой (например, гибкий диск), тогда размер тома в Кбайтах должен быть указан в командной строке. Никакая сервисная работа не является правильной без этой информации. Например, используя в команде backup по умолчанию устройство (ниже), вводим следующее: backup k 360. По умолчанию устройством ввода для /etc/default/backup (лента=/dev/xxx) и /etc/default/restor (архив=/dev/xxx) является /dev/rfd02.



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

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

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

Вам не удастся резервирование более, чем одной файловой системы на ленточные устройства /dev/nrct0 и /dev/nrct2.Это происходит потому, что хотя команда backup может писать более одной файловой системы на устройства /dev/nrct0 или /dev/nrct2, restor может быть не в состоянии восстанавливать более одной файловой системы с этих устройств.









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


НАЗВАНИЕ

backup - Фopмaт дaмпa фaйлoвoй cиcтeмы

ОПИСАНИЕ

Koмaнды backup и restore иcпoльзyютcя для зaпиcи и чтeния дaмпa фaйлoвoй cиcтeмы c мaгнитнoй лeнты.

Лeнтa, coдepжaщaя кoпию, cocтoит из зaпиcи зaгoлoвкa, зaпиcи битoвoй мacки, гpyппы зaпиceй, oпиcывaющиx кaтaлoги фaйлoвoй cиcтeмы, гpyппы зaпиceй, oпиcывaющиx фaйлы фaйлoвoй cиcтeмы и зaпиcи, oпиcывaющeй втopyю битoвyю мacкy.

Зaпиcь зaгoлoвкa и пepвaя зaпиcь кaждoгo oпиcaния имeeт фopмaт, oпpeдeляeмый cтpyктypoй, включaeмoй:

#include <dumprestor.h>

Пoля cтpyктypы dumprestor oпиcaны нижe.

NTREC oпpeдeляeт кoличecтвo блoкoв, кaждый длинoй в 512 бaйт, в физичecкoй зaпиcи нa лeнтe. MLEN oпpeдeляeт кoличecтвo бит в cлoвe кapты бит. MSIZ oпpeдeляeт кoличecтвo cлoв кapты бит.

TS_entries иcпoльзyeтcя в пoлe c_type для oтpaжeния типa зaгoлoвкa. Tипы и иx знaчeния пpивeдeны нижe:

TS_TYPE Meткa тoмa. TS_INODE Дaлee cлeдyeт фaйл или кaтaлoг. Пoлe c_dinide являeтcя кoпиeй индecнoгo дecкpиптopa фaйлa диcкa и coдepжит биты, yкaзывaющиe тип фaйлa. TS_BITS Дaлee cлeдyeт мacкa бит.B этoй мacкe бит кaждый бит cooтвeтcтвyeт кaждoмy индeкcнoмy дecкpиптopy фaйлa кoпиpyeмыx фaйлoв. TS_ADDR Дoпoлнитeльный блoк фaйлa (TS_INODE). Cмoтpи oпиcaниe c_count нижe. TS_END Зaпиcь кoнцa нa лeнтe TS_CLRI Дaлee cлeдyeт мacкa бит. Этa мacкa бит coдepжaщaя пo oднoмy битy для вcex индeкcныx дecкpиптopoв фaйлoв, кoтopыe были пycты вo вpeмя кoпиpoвaния. MAGIC Bce блoки зaгoлoвкa имeют этo чиcлo в c_magic. CHECKSUM Koнтpoльнaя cyммa зaгoлoвкoв.

Cтpyктypa зaгoлoвкa имeeт cлeдyющиe пoля:

c_type Tип зaгoлoвкa. c_date Дaтa кoпиpoвaния. c_ddate Дaтa кoпиpoвaния фaйлoвoй cиcтeмы. c_volume Hoмep тoмa кoпии. c_tapea Teкyщий нoмep блoкa зaпиcи (длинa блoкa paвнa 512 бaйт). c_inumber Hoмep индeкcнoгo дecкpиптopa фaйлa, кoтopый кoпиpyeтcя, ecли тип зaгoлoвкa oпpeдeлeн кaк TS_INODE. c_magic Coдepжит вeличинy MAGIC, yпoминaвшyюcя вышe, yкopoчeннyю в cлyчae нeoбxoдимocти. c_checsum Coдepжит вeличинy, пoлyчeннyю в кaчecтвe кoнтpoльнoй cyммы блoкa. c_dinode Пpeдcтaвляeт coбoй кoпию индeкcнoгo дecкpиптopa фaйлa, пoявляющyюcя в фaйoлoвoй cиcтeмe. c_count Дaлee cлeдyeт cчeтчик cимвoлoв, oпиcывaющиx фaйл. Cимвoл являeтcя нyлeвым, ecли блoк, cooтвecтвyющий cимвoлy, oтcyтcтвyeт в фaйлoвoй cиcтeмe; в пpoтивнoм cлyчae cимвoл oтличeн oт нyля. Ecли блoк нe был пpeдcтaвлeн в фaйлoвoй cиcтeмe, блoк кoпиpyeтcя и в фaйлe имeeтcя paзpыв. Ecли нe cyщecтвyeт дocтaтoчнo мecтa в этoм блoкe, чтoбы oпиcaть вce блoки в фaйлe, блoки TS_ADDR бyдyт paзбpocaны пo фaйлy, и зaпиcaны пocлe пocлeднeгo yжe oпиcaннoгo блoкa. c_addr Этo мaccив cимвoлoв, кoтopыe иcпoльзyютcя кaк oпиcaнo вышe.

Kaждый тoм, иcключaя пocлeдний, зaкaнчивaeтcя мapкepoм лeнты (пoнимaeмым кaк кoнeц фaйлa). Пocлeдний тoм зaкaнчивaeтcя блoкoм TS_END и зaтeм мapкepoм лeнты.

Cтpyктypa idates oпиcывaeт тoчкy вxoдa в фaйл, гдe xpaнитcя пocлeдoвaтeльнocть кoпиpoвaния.

СМ. ТАКЖЕ

, ,



BACKUP(8)


НАЗВАНИЕ

backup - сохранение файловой системы, восстановление данных

ОПИСАНИЕ

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

Сохранение

Содержимое диска может быть сохранено в виде:

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

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

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

Сколько лент (дисков, дискет) необходимо иметь и на какую ленту выполнять очередное копирование?

Если у Вас много кассет с лентой, можно рекомендовать порядок копирования, совпадающий с порядком перекладывания дисков Ханойской башни: 1, 2, 1, 3, 1, 2, 1, 4, ..., то есть использовать ленту 1 для каждой второй копии, ленту 2 - для каждой четвертой, ленту 3 - для каждой восьмой и т.д. Если у Вас всего две кассеты, целесообразно пользоваться утилитой , контролирующей их чередование. В любом случае логическая копия предпочтительнее физической.

Для сохранения используются следующие утилиты:

dd Физическое копирование. cpio Логическое сохранение/восстановление файлов; часто используется совместно с командой . vsplit Расщепление/слияние на несколько (с нескольких) томов. saveto Shell-процедура, предоставляющая удобный интерфейс с вышеперечисленными утилитами. copall Еще одна shell-процедура для логического копирования, контролирует номер используемой ленты.

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

Восстановление


Как восстановить диск после серьезного повреждения?

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

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

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

cd /; dd if=/dev/mt bs=256k | cpio -idmvu

Проверьте, созданы ли каталоги /mnt, /tmp, /lost+found, в каком состоянии файлы /etc/checklist, /etc/fstab и, конечно, файл /unix.

Сохранение/восстановление с помощью ленты и диска в памяти

Более сложной является ситуация, когда нет возможности загрузить систему ни с диска, ни с дискеты. В этом случае нужно воспользоваться комбинацией лента/диск в памяти. В вариант системы, загружаемый с ленты, должен входить драйвер диска в памяти /usr/src/uts/io/rd.c; должно быть доступно не менее 2 Мб памяти.

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

Конфигурируется UNIX-ядро с такими характеристиками:

Корневой каталог и каналы на диске в памяти. Устройство для подкачки отсутствует. Значения параметров, влияющих на расход памяти (например, размер буферов) минимальны. В ядро входит драйвер диска в памяти; под диск зарезервирован 1 Мб памяти. Адрес диска в памяти должен быть согласован с адресом, используемым программой начальной загрузки. Память, отведенная для диска, исключается из таблицы распределения памяти, доступной ядру.



Создайте минимальный вариант системы [см. ] размером порядка 900 Кб на свободном логическом диске и скопируйте в корневой каталог полученной файловой системы сконфигурированное ядро. Выполните физическое копирование диска на ленту.

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

Когда (не дай бог!) крах наступил, восстанавливайтесь так:

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

СМ. ТАКЖЕ

, , , , .

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









BADTRK(8)


НАЗВАНИЕ

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

СИНТАКСИС

badtrk [-e] [-s qtdn] [-f /dev/rhd*]

ОПИСАНИЕ

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

ПРЕДУПРЕЖДЕНИЕ: Пользователь не должен задавать опцию -e, которая вызывается утилитой hdinit во время инсталляции для изменения объема пространства, выделенного под дефектные дорожки. Использование -e в другое время может перестроить жесткий диск, при этом значительная часть информации будет потеряна.

Для использования badtrk вы должны находиться в однопользовательском режиме. (См. .) Для обращения к активному разделу XENIX на первичном жестком диске введите:

badtrk -f /dev/rhd0a

Для обращения к активному разделу XENIX на вторичном жестком диске введите:

badtrk -f /dev/rhd1a

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

При выполнении badtrk вначале высвечивается главное меню:

1. Print Current Bad Track Table 2. Scan Disk (You may choose Read-Only or Destructive later) 3. Add Entries to Current Bad Track Table by Cylinder/Head Number 4. Add Entries to Current Bad Track Table by Sector Number 5. Delete Entries Individually From Current Bad Track Table 6. Delete All Entries From Bad Track Table

Enter your choice or 'q' to quit:

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

Таблица дефектных дорожек (опция '1') может выглядеть так:

Defective Tracks ------------------------------------------------ Cylinder Head Sector Number(s) ------------------------------------------------ 1. 190 3 12971-12987 ------------------------------------------------ Press <RETURN> to continue.

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


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

wd:ERROR: on fixed disk ctlr=0 dev=0/47 block=31434 cmd=00000020 status=00005180, sector=62899, cylinder/head=483/4

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

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

Если в этой таблице нет записей, и сканирование не выявило никаких дефектов, но ваш диск был поставлен с картой дефектов, то вам следует ввести указанные в этой карте дефекты в таблицу дефектных дорожек. Для добавления записей выберите опцию "3" или "4". (Смотрите следующий абзац.)

Для внесения дополнений в таблицу дефектных дорожек выберите опцию "3" или "4" в зависимости от формата карты дефектов, поставленной вместе с диском. Введите дефектные дорожки по одной на строку.

Когда вы будете удовлетворены содержанием указанной таблицы, выйдите из badtrk, нажав "q" в главном меню.

Если badtrk была вызвана с опцией -e (что должно происходить только при ее вызове посредством hdinit во время инсталляции системы XENIX), если вы выполняете повторную инсталляцию, и если у вас имеется допустимая таблица разделов диска, то перед появлением меню badtrk высветится следующее сообщение:

This device contains a valid division table. Additional (non-root) filesystem can be preserved across this reinstallation. If you wish to be able to preserve these file systems later, you must not change the current limit of the bad track table, which is n bad tracks. Do you wish to leave it unchanged? <y/n>:/s+1

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



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

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

Аргументы

-f name Открывает файл разделов name и считывает таблицу дефектных дорожек, связанную с этим разделом. По умолчанию используется /dev/rhd0a. -s options Вызывает badtrk в неинтерактивном режиме. Допустимыми опциями являются:
[q]uick (быстро) [t]horough(тщательно) [d]estructive(с разрушением) [n]on-destructive(без разрушения) Аргумент -f воспринимает две опции сразу. Выберите сканирование quick или thorough (быстрое или тщательное) и destructive или non-destructive (с разрушением или без разрушения).

ПРИМЕЧАНИЯ

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

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

ФАЙЛЫ

/etc/badtrk

BANNER(1)


НАЗВАНИЕ

banner - вывод плакатными буквами

СИНТАКСИС

banner -wn цепочка_символов ...

ОПИСАНИЕ

Команда banner выдает на экран увеличенные символы. Опция -w с параметром n задает размер символов. Символы состоят из значков #. Так команда banner -w30 S выведет на экран символ S:

#### ### ###### # ### ## # ### # # ### # # #### # # #### ## ########## #### ######



BCOPY(1M)


НАЗВАНИЕ

bcopy - интерактивное копирование блоков

СИНТАКСИС

/etc/bcopy

ОПИСАНИЕ

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

Задаются следующие вопросы:

to: В ответ нужно указать имя файла, куда будет производиться копирование. offset: Указывается номер начального блока, куда будет производиться копирование. from: Указывается имя файла, откуда будет производиться копирование. offset: Указывается номер начального блока, откуда будет производиться копирование. count: Указывается количество копируемых блоков.

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

from:

повторяется, обеспечивая таким образом возможность дозаписи блоков по адресу to+offset+count. Если в качестве ответа нажать клавишу возврата каретки, то все начинается сначала.

Два последовательных нажатия на клавишу возврата каретки завершает работу команды bcopy.

СМ. ТАКЖЕ
, .


НАЗВАНИЕ

bcopy - интерактивное копирование блоков

СИНТАКСИС

/etc/bcopy

ОПИСАНИЕ

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

Задаются следующие вопросы:

to: В ответ нужно указать имя файла, куда будет производиться копирование. offset: Указывается номер начального блока, куда будет производиться копирование. from: Указывается имя файла, откуда будет производиться копирование. offset: Указывается номер начального блока, откуда будет производиться копирование. count: Указывается количество копируемых блоков.

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

from:

повторяется, обеспечивая таким образом возможность дозаписи блоков по адресу to+offset+count. Если в качестве ответа нажать клавишу возврата каретки, то все начинается сначала.

Два последовательных нажатия на клавишу возврата каретки завершает работу команды bcopy.

СМ. ТАКЖЕ
, .




НАЗВАНИЕ

bcopy - интерактивное копирование блоков

СИНТАКСИС

/etc/bcopy

ОПИСАНИЕ

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

Задаются следующие вопросы:

to: В ответ нужно указать имя файла, куда будет производиться копирование. offset: Указывается номер начального блока, куда будет производиться копирование. from: Указывается имя файла, откуда будет производиться копирование. offset: Указывается номер начального блока, откуда будет производиться копирование. count: Указывается количество копируемых блоков.

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

from:

повторяется, обеспечивая таким образом возможность дозаписи блоков по адресу to+offset+count. Если в качестве ответа нажать клавишу возврата каретки, то все начинается сначала.

Два последовательных нажатия на клавишу возврата каретки завершает работу команды bcopy.

СМ. ТАКЖЕ
, .



href="index.htm">Содержание раздела






BDIFF(1)


НАЗВАНИЕ

bdiff - сравнение больших файлов

СИНТАКСИС

bdiff файл1 файл2 [размер] [-s]

ОПИСАНИЕ

Команда bdiff используется тем же образом, что и , для идентификации в двух данных файлах тех строк, которые нужно изменить, чтобы сделать файлы одинаковыми. Назначение данной команды - обработка тех файлов, которые слишком велики для diff. Bdiff пропускает начала обоих файлов до места первого несовпадения, разрезает остаток каждого файла на сегменты указанного размера (в строках) и запускает diff для обработки соответствующих сегментов. По умолчанию размер равен 3500. Явное указание размера полезно в тех случаях, когда сегменты по 3500 строк слишком велики для diff, что может привести к ошибке. Если вместо файла1 или файла2 стоит -, будет использован стандартный ввод. Опция -s (от silent - безмолвный) служит для отключения выдачи диагностики при работе bdiff. Отметим, что возможные сообщения из diff при этом не подавляются. Если необходимо использовать обе опции, то задавать их надо в том порядке, как показано выше.

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

ФАЙЛЫ

/tmp/bd?????

СМ. ТАКЖЕ
, .

ДИАГНОСТИКА

Используйте для раз'яснений.



BESSEL(3M)


НАЗВАНИЕ

bessel: j0, j1, jn, y0, y1, yn - функции Бесселя

СИНТАКСИС

#include <math.h>

double j0 (x) double x;

double j1 (x) double x;

double jn (n, x) int n; double x;

double y0 (x) double x;

double y1 (x) double x;

double yn (n, x) int n; double x;

ОПИСАНИЕ

Функции j0 и j1 возвращают значения функций Бесселя первого рода, порядка 0 и 1 соответственно, для заданного аргумента x. Функция jn возвращает значение функции Бесселя первого рода, порядка n для заданного аргумента x.

Функции y0 и y1 возвращают значения функций Бесселя второго рода (или, иначе, функций Неймана), порядка 0 и 1, соответственно для заданного аргумента x. Функция yn возвращает значение функции Бесселя второго рода, порядка n для заданного аргумента x. Значение x должно быть положительным.

СМ. ТАКЖЕ

.

ДИАГНОСТИКА

При неположительных аргументах функции y0 и y1 возвращают значение -HUGE [см. ], а переменной errno присваивается значение EDOM. Кроме того, в стандартный протокол будет выдано сообщение о выходе за границы области определения.

При аргументах, слишком больших по абсолютной величине, функции j0, j1, y0 и y1 возвращают нулевое значение и переменной errno присваивается значение ERANGE. Кроме того, в стандартный протокол будет выдано сообщение о потере значимости.

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



BFS(1)


НАЗВАНИЕ

bfs - Просматривает большие файлы.

СИНТАКСИС

bfs [-] name

ОПИСАНИЕ

Команда bfs сходна с командой за исключением того, что она доступна только для чтения и обрабатывает гораздо большие файлы. Файлы могут быть до 1024К байт и 32К строк и иметь до 255 символов на строку. Команда bfs обычно более эффективна, чем команда ed для сканирования файла, т.к. файл не копируется в буфер. Она наиболее полезна для идентификации секций большого файла, где команда может быть использована для разделения этого файла на куски, удобные для редактирования.

Обычно, размер просматриваемого файла печатается, как размер любого файла, записанного командой W. Необязательный параметр тире (-) подавляет печать размеров. Ввод вызывается с помощью звездочки (*), когда набираются "P" и RETURN. "P" действует как переключатель, так, что запрос может быть выключен вводом других "P" и RETURN. Заметьте, что сообщения выдаются как реакция на ошибки только, если запрос включен.

Все адресные выражения,описанные по команде ed, обеспечиваются. Кроме того,регулярные выражения могут быть заключены между двумя символами, отличными от стандартных косой черты (/) и (?): знак больше(>) указывает на поиск, спускающийся вниз без циклического возврата, а знак меньше (< ) указывает на поиск, поднимающийся вверх без циклического возврата. Заметьте, что круглые скобки и фигурные скобки являются специальными и от них необходимо избавиться с помощью символа обратная косая черта (\). Так как команда bfs использует различные подпрограммы с регулярными выражениями сравнения из ed ,область действия регулярных выражений может быть гораздо шире Различия между командами ed и bfs перечислены ниже: + Регулярное выражение, за которым следует знак +,обозначает one or more times (один или более раз).Например, [0-9]+ эквивалентно [0-9][0-9]*. \{m\}\{m,\}\{m,u\} Целые значения, заключенные в \{\} показывают, какое число раз предыдущее регулярное выражение должно быть применено . m - минимальное число, а u - число, меньшее, чем 256, которое является максимальным. Если есть только m (например, \{m\}), это обозначает точное число раз, когда регулярное выражение должно быть применено.\{m\} аналогично \{m,infinity\}. Операции плюс (+) и звездочка (*) эквивалентны соответственно \{1,\} и \{0,\}. (...)$n Значение заключенного в скобки регулярного выражения должно возвращаться. Значение будет храниться в(n+l)том аргументе, следующем за подчиненным аргументом. Разрешается болше десяти заключенных в скобки регулярных выражений. regex выполняет их присваивания безусловно. (...) Круглые скобки используются для группировки. Оператор, например, *,+,\{\} может работать с единичными символами или регулярными выражениями, заключенными в круглые скобки. Например, \(a*)(cb+\)*\)$0.


Существует также незначительное отличие в именах меток: могут быть использованы только буквы от "a" до "z" и все 26 меток запоминаются.

e,g,v,k,p,q,w,=,! и нулевые команды работают как описано в команде ed, исключая то, что e не запоминает имена файлов, а g и v , когда не задан аргумент, возвращают на строку, расположенную за строкой, на которой вы находились. Команды такие, как ---, +++-,+++=,-12 и +4p допускаются. Заметьте, что команды 1,10p и 1,10 обе будут распечатывать первые 10 строк. Только команда f печатает имя файла, который просматривался; имя файла не запоминается.Команда w не зависит от отклонения, округления, уплотнения вывода (см команды xo,xt и xc ниже).Допустимы следующие дополнительные команды:

xffile Последующие команды берутся из файла с именем file. Когда достигается конец файла, приходит сигнал прерывания или происходит ошибка, чтение продолжается из файла, содержащего xf. Команды xf могут быть вложенными на глубину до 10. xo[file] Дальнейший вывод из p и пустых команд адресуется указанному файлу с именем file. Если file потерян, вывод адресуется к стандартному выводу. Заметьте, что каждое отклонение вызывает усечение или создание файла. :label Так ставится метка label в командном файле. Метка label завершается новой строкой, а пробелы между : и началом метки label игнорируются. Эта команда может также быть использована для вставки комментариев в командный файл, так как на метки нет необходимости ссылаться. (...)xb/regular expression/label Переход ( вверх или вниз ) делается на метку label, если за ней следует команда. Это не удается при одном из следующих условий:

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

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



xb/^/label

является безусловным переходом .

Команда xb разрешена только, если она читается не с терминала. Если она читается из канала, то возможен переход только вниз. xtnumber Вывод из p и пустых команд усекается максимум до number символов. Начальное значение = 255. xv[digit][spaces][value] Имя переменной является специфицированным параметром digit, следующим за xv. Команды Xv5100 или xv5 100 обе присваивают значение 100 переменной 5. Команда Xv61,100p присваивает значение 1,100p переменной 6. Для нахождения переменной по ссылке поставьте % перед именем переменной. Например, используя присваивания,приведенные выше, для переменных 5 и 6 имеем:

1,%5p 1,%5 %6

печатаются первые 100 строк.

g/%5/p

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

g/".*\%[cds]/p

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

Другая особенность команды xv состоит в том, что первая строка вывода из команды системы XENIX может храниться в переменной .

Единственным требованием является требование того, чтобы первым символом value был a!. Например,

xv5!cat junk !rm junk !echo"%5" xv6!expr%6+1

устанавливает текущую строку в переменной 5, печатает ее и увеличивает переменную 6 на единицу. Для того, чтобы избавиться от специального значения ! в качестве первого символа value, поставьте перед ним \. Например,

xv7\!date

помещает значение !date в переменную 7. xbzlabel

xbnlabel Эти две команды проверяют последний сохраненный return code (код возврата) из выполнения команды системой XENIX (!command) или ненулевое значение и делают переход к указанной метке. Два примера, приведенных ниже, отыскивают следующие пять строк, содержащих строку size:

xv55










BINDRESVPORT


НАЗВАНИЕ

bindresvport - Установить связь с гнездом

СИНТАКСИС

#include <sys/types.h>

#include <netinet/in.h>

bindresvport(sd,sin) int sd; struct sockaddr_in *sin;

ОПИСАНИЕ

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

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



BNO2FILE(1)


НАЗВАНИЕ

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

СИНТАКСИС

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

ОПИСАНИЕ

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

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

СМ. ТАКЖЕ
.



BOOT(8)


НАЗВАНИЕ

boot - процедура начальной загрузки

ОПИСАНИЕ

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

boot:

В ответ пользователь должен указать одну из альтернатив, завершив ввод символом возврата каретки CR (а не переводом строки):

пустая альтернатива - один символ CR

Выполняется стандартная загрузка.

? Программа выдает список известных устройств и снова ждет ввода.

[устройство:]маршрутное_имя [аргумент ...]

Задаются устройство и маршрутное имя файла с программой, которая будет загружена, например f:unix для загрузки с дискеты или t:unix в случае комбинации лента/диск в памяти. Трактовка аргументов зависит от загружаемой программы.

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

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

Для терминала устанавливаются следующие характеристики: скорость 9600 бод, 8 бит, без контроля четности.

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

Ядро ОС UNIX. Программа тестирования аппаратуры. Другая программа первоначальной загрузки, операционная система или что-либо еще.

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

[устройство:]маршрутное_имя [аргумент ...]

например

f:unix (0,0) (0,2) rd=1024

Аргументы передаются вызываемой программе в виде цепочки символов, интерпретация которой зависит от программы. Если это UNIX-ядро, то интерпретация выполняется в функции raminit файла ram.c и состоит в следующем. За маршрутным именем могут следовать два описателя логических дисков и описатель диска в памяти. Описатели логических дисков задаются в виде:

(старший_номер_уст-ва, младший_номер_уст-ва)

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

Описатель диска в памяти имеет вид

rd=размер_диска_в_килобайтах

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

СМ. ТАКЖЕ

.



BOOT(HW)


НАЗВАНИЕ

boot - программа загрузки системы UNIX.

ОПИСАНИЕ

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

Программа boot вызывается системой всякий раз, когда включается компьютер. Для перезапуска системы, минуя длительные процедуры разгрузки, используйте команду reboot, которая перезагружает систему после разгрузки, не ожидая ввода с клавиатуры. Для получения дополнительной информации смотрите haltsys(8).

При загрузке с дискеты эта процедура включает три этапа:

Коды ПЗУ загружают в память блок загрузки с нулевого сектора дискеты, который совпадает с нулевым сектором файловой системы. Загрузочный блок загружает файл /boot из файловой системы дискеты. Файл /boot выполняется и выдает подсказку для пользователя.

При загрузке с жесткого диска эта процедура включает пять этапов:

Коды ПЗУ загружают в память блок главного загрузчика с нулевого сектора жесткого диска. Блок главного загрузчика загружает после этого загрузочный блок разделов (boot0) из нулевого сектора активного раздела (см. fdisk(8)). Затем, предполагая, что активным разделом является раздел системы UNIX, загружаются коды boot1, располагающиеся после первого килобайта в активном разделе версии 2.2 инсталляции UNIX или старше. Если на диске инсталлирована более ранняя версия UNIX, то предполагается, что коды boot1 начинаются в активном разделе после третьего килобайта. Коды boot1 занимают на диске 20 физически последовательных блока размером 1K. boot1 загружает /boot из файловой системы UNIX. /boot выполняется и выдает подсказку для пользователя.

Файлы /boot и /kernel могут находиться на дорожках, отмеченных программой badtrk(8). Главный загрузчик (masterboot), boot0 и boot1 не могут располагаться на дефектных дорожках.


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

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

UNIX System V

Boot :

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

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

xx(m,o)filename

или

xx(m)filename

где:

xx - имя устройства ('hd' - для жесткого диска и 'fd' - для дискеты)

m - малое (меньшее) число устройства (40 - для корневой файловой системы на жестком диске)

o - смещение в разделе (обычно 0). Это значение задавать не обязательно.

filename - стандартное полное имя. Может начинаться с косой черты, если программа находится не в корневом каталоге.

Все числа задаются в десятичном виде. Малые (меньшие) числа устройств смотрите на страницах документации hd(HW) и fd(HW). Задавать смещение не обязательно. Местоположение подлежащей загрузке программы задается в первую очередь и обязано присутствовать, если в командной строке или в /etc/default/boot задаются прочие загрузочные опции.

Если вы хотите ввести в процедуру загрузки паузу и ожидание нажатия <RETURN> перед выполнением загружаемой программы, введите в командную строку слово "prompt". Например, если вы введете "prompt" и нажмете <RETURN>, то boot выдаст следующее сообщение и будет ждать нажатия этой клавиши снова:

Loaded, press <RETURN>

Данная подсказка может быть заменена на другую строку, например:

prompt="change diskettes now"

При этом boot загрузит с дискеты xenix, выведет сообщение "change diskettes now" и будет ждать нажатия <RETURN>. Между словом prompt, знаком "=" и строкой подсказки не должно быть никаких символов, хотя сама эта строка может содержать пробелы. Когда вы нажимаете <RETURN>, xenix начинает свою работу. "Prompt" может быть включено как в командной строке, так и в файле /etc/default/boot. Если подсказка не задана, то boot выполняет загруженную программу, не останавливаясь.



Если вы только что загрузили программу boot с дистрибутивной дискеты, нажмите просто <RETURN> и boot установить значения параметров по умолчанию.

Для загрузки системы UNIX с жесткого диска введите:

hd(40,0)unix

Для запуска загрузочной строки, используемой по умолчанию и задаваемой в файле /etc/default/boot, нажмите <RETURN>, когда система высветит загрузочную подсказку, и boot возьмет значения, заданные структурой DEFBOOTSTR в этом файле.

Если за короткое время не было введено ничего и в файле /etc/default/boot корневой файловой системы LOADUNIX=YES, то boot по истечении заданного времени поведет себя, как если бы была нажата клавиша <RETURN>, за исключением того случая, когда в загрузочной строке включено "auto". (Если кроме задания LOADUNIX=YES задано еще и TIMEOUT=n, то boot будет ждать истечения n секунд.) boot выполняет загрузочную процедуру, и программе init(5) передается аргумент -a без "prompt".

Рекомендуется устанавливать на жестком диске систему DOS, до установки системы UNIX. (См. dos(1)). При установленной системе DOS вы можете загрузить ее с подсказки "Boot" системы UNIX, введя слово "dos".

Во время инсталляции системы XENIX на жесткий диск записывается подходящий главный загрузчик (masterboot). Если задается нестандартный жесткий диск, то его параметры хранятся и активизируются в этом главном загрузчике.

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

Программа boot передает загрузочную строку, введенную на загрузочную подсказку, ядру системы, исключая при этом строку "prompt".

Ядро читает эту загрузочную строку и определяет, какие периферийные устройства отвечают за корневую файловую систему, конвейер и свопинг. Если эти устройства не заданы ни в файле /etc/default/boot, ни в командной строке, то по умолчанию используются устройства, включенные в ядро при его компоновке.

Добавочные аргументы в командной строке, которые могут изменить эти действия и имеют вид:

dev=xx(m,o)

или

dev=xx(M)



где:

dev - Нужное системное устройство (root[dev], pipe[dev] или swap[dev])

xx, m, o - те же, что и для загрузочного устройства.

Если задана какая-либо комбинация root, pipe и swap, то эти системные устройства будут относиться к указанным устройствам, если же системные устройства не будут заданы, то по умолчанию будут использоваться установки включенные в ядро при его компоновке. Установка одного устройства не влияет на установки по умолчанию других устройств.

Выбор системной консоли

Вы можете выбрать системную консоль во время загрузки, введя команду systty=x на загрузочную подсказку или вставив ключевое слово SYSTTY=x в файл /etc/default/boot. Буква x представляет собой либо число, либо строку.

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

sio Последовательный порт COM1 scrn Адаптер дисплея

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

systty=sio

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

boot читает файл /etc/default/boot и ищет в нем ключевые слова SYSTTY=x, где x - число, определяющее системную консоль.

1 означает последовательный адаптер порта COM1. 0 означает адаптер дисплея.

Если SYSTTY не найдено или файл /etc/default/boot не читается, то boot проверяет адаптер дисплея и назначает его в качестве системной консоли.

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

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

SYSTTY=1

Назначение псевдонимов

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



key=file [root=xx9m0 pipe=xx(m) swap=xx(M) prompt[="string"]]

Во всех случаях спецификация устройства может иметь формат dev=xx(m,o), где o - смещение.

Например, если вы имеете корневую файловую систему на втором жестком диске и хотите использовать ее, но при этом хотите загрузиться с помощью файла xenix, расположенного на первом жестком диске, введите в файл /etc/default/boot следующую строку:

disk2=hd(40,0)unix root=hd(104,0) prompt="Using second disk"

При очередной загрузке системы с первого жесткого диска введите на загрузочную подсказку "disk2". Тогда xenix будет загружаться с первого жесткого диска, и когда вы увидите сообщение "Using second disk", нажмите <RETURN>. После этого xenix загрузится и будет работать с корневой файловой системой на втором жестком диске. Обратите внимание, что вам нужно отредактировать файл /etc/default/boot в корневой файловой системе на устройстве, откуда будет считываться boot, в данном случае - на первом жестком диске.

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

hd(104)unix root=hd(104) pipe=hd(104) swap=hd(105)

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

fixperm -c -dHD1 /etc/perms/inst

Загрузочные опции

Загрузочные опции могут быть изменены с помощью ключевых слов в файле /etc/default/boot. Программа boot распознает следующие ключевые слова:
LOADUNIX=YESЕсли задано YES, то boot автоматически загружает систему UNIX по истечении времени, определяемого параметром TIMEOUT. По умолчанию устанавливается задержка на 60 секунд. DEFBOOTSTR=stringCтрока string служит в качестве загрузочной строки, используемой по умолчанию в отсутствие ввода из командной строки. Между DEFBOOTSTR, знаком "=" и строкой string не должно быть пробелов. SYSTTY=xЕсли x=1, то в качестве системной консоли устанавливается последовательный адаптер порта COM1. Если x=0, в качестве системной консоли выбирается главный адаптер дисплея. RONLYROOT=NOБудет ли корневая файловая система монтироваться в статусе "только для чтения". Данный параметр должен устанавливаться в "yes" только во время инсталляции. FSCKFIX=YES или NOБудет ли fsck(8) исправлять какие-либо ошибки в корневой файловой системе сама. Если устанавливается значение YES, то fsck(8) запускается в отношении корневой файловой системы с аргументом -rr. MULTIUSER=YES или NOВызывает ли init(8) sulogin или переходит в многопользовательский режим. PANICBOOT=YES или NOПерезагружается ли система после реакции на сбой panic(). Эта переменная считывается программой init из файла /etc/default/boot. TIMEOUT=nn - количество секунд ожидания ввода при загрузке (если LOADUNIX=YES). <



/p>

ДИАГНОСТИКА

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

IO ERR Ошибка при потке чтения главным загрузчиком блока загрузки разделов активной операционной системы. BAD TBL Указатель загрузочных разделов хотя бы одной из операционных систем в таблице разделов содержит нераспознаваемый код. NO OS Неустранимая ошибка, мешающая выполнению загрузчика операционной системы активного раздела.

Когда boot высвечивает сообщения об ошибках, пользователь возвращается к подсказке "Boot". Далее приводится список самых распространенных сообщений и их значение:

bad magic number

Данный файл не является выполняемой программой. can't open <pathname>

Заданное полное имя не соответствует существующему файлу или известному устройству. Stage 1 boot failure

Загрузчик не может найти или прочитать файл boot. Вы должны перезапустить компьютер и обеспечить доступ к диску с файлом boot в корневом каталоге. not a directory

Заданная область устройства не содержит действительную файловую систему UNIX. zero length directory

Найденная файловая система содержит каталог нулевого объема. Наиболее часто это случается, когда в заданной области располагается файловая система версий, более ранних, чем версия System V UNIX (с неправильным или несовместимым форматом слов). fload:read(x)=y

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

ФАЙЛЫ

/boot /etc/default/boot /etc/masterboot /etc/hdboot0 /etc/hdboot1

СМ. ТАКЖЕ

autoboot(8), badtrk(8), fd(HW), fdisk(8), haltsys(8), hd(HW), init(5), sulogin(5)

ПРИМЕЧАНИЯ

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

Программа boot не может быть использована для загрузки программ, которые не были скомпонованы для самостоятельного выполнения. Для создания самостоятельных программ нужно использовать опцию -A компоновщика системы UNIX (ld(1)) и специальные самостоятельные библиотеки.

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

Параметр RONLYROOT должен быть установлен на значение "yes" только на период инсталляции. Если эта установка действует во время повседневных операций, то она не даст вам изменять корневую файловую систему. В этом случае вам придется загрузиться с дискеты, отредактировать файл /etc/default/boot и перезагрузиться.









BRC(1M)


НАЗВАНИЕ

brc, bcheckrc - процедуры инициализации системы

СИНТАКСИС

/etc/brc /etc/bcheckrc

ОПИСАНИЕ

Эти процедуры, написанные на языке shell, выполняются процессом при каждой загрузке системы в соответствии со схемой, хранящейся в файле /etc/inittab.

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

Затем brc очищает таблицу смонтированных файловых систем, /etc/mnttab, и помещает в нее строку о монтировании корневой файловой системы.

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

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

СМ. ТАКЖЕ
, , , .

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



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


ИМЯ

brkctl - paзмeщaeт дaнныe в yдaлeннoм ceгмeнтe

СИНТАКСИС

#include <sys/brk.h>

char far *brkctl (command, increment, ptr) int command; long increment; char far *ptr;

ОПИСАНИЕ

Cиcтeмный вызoв brkctl выдeляeт или ocвoбoждaeт пaмять в дoпoлнитeльныx ceгмeнтax дaнныx в cлyчae мaлoй или cpeднeй мoдeли pacпpeдeлeния пaмяти. Для тoгo, чтoбы кoмпилятop Cи мoг иcпoльзoвaть вoзвpaщaeмыe знaчeния в пpoгpaммax мaлoй и cpeднeй мoдeли, brkctl дoлжeн вoзвpaщaть длинный (far) yкaзaтeль. Пpи иcпoльзoвaнии oпиcaтeля far в пpoгpaммax кoмпиляция дoлжнa выпoлнятьcя c флaгoм -Me пpи мaлoй мoдeли и c флaгoм -Mme пpи cpeднeй.

Apгyмeнт command мoжeт имeть oднo из cлeдyющиx знaчeний: BR_ARGSEG, BR_NEWSEG или BR_IMPSEG.

increment являeтcя длинным чиcлoм co знaкoм. Пpи вoзмoжнocти oн дoлжeн быть мeньшe 64K; ecли oн oтpицaтeлeн, eгo aбcoлютнoe знaчeниe дoлжнo быть мeньшe cyммы длин вcex yдaляeмыx ceгмeнтoв плюc пaмять, выдeлeннaя в ближнeм ceгмeнтe пocлe coздaния пpoцecca.

ptr иcпoльзyeтcя тoлькo, ecли command paвeн BR_ARGSEG.

Ecли increment пoлoжитeлeн, brkctl вoзвpaщaeт длинный yкaзaтeль нa выдeлeнный yчacтoк пaмяти; выдeляeтcя, пo кpaйнeй мepe, uncrement бaйтoв.

Ecли apгyмeнт command paвeн BR_IMPSEG и oтpицaтeльный increment вызывaeт ocвoбoждeниe oднoгo или нecкoлькиx ceгмeнтoв, вoзвpaщaeмoe знaчeниe пpинaдлeжит пocлeднeмy из ocтaвшиxcя ceгмeнтoв. BR_IMPSEG имeeт в видy иcпoльзoвaниe пocлeднeгo ceгмeнтa дaнныx. Heзaвиcимo oт тoгo, имeeт пpoцecc мaлyю или cpeднюю мoдeль пaмяти и имeeт в дaнный мoмeнт тoлькo oдин ceгмeнт дaнныx, пoлoжитeльный increment, пepeпoлняющий пocлeдний ceгмeнт дaнныx, вызывaeт coздaниe нoвoгo ceгмeнтa.

Ecли apгyмeнт command paвeн BR_ARGSEG, aбcoлютнoe знaчeниe oтpицaтeльнoгo increment нe дoлжнo пpeвышaть длины ceгмeнтa. Apгyмeнт ptr дoлжeн быть длинным yкaзaтeлeм нeзaвиcимo oт мoдeли пaмяти.

Ecли apгyмeнт command paвeн BR_NEWSEG, increment нe мoжeт быть oтpицaтeльным. Bыдeлeниe пaмяти вceгдa пpoиcxoдит oт нaчaлa нoвoгo ceгмeнтa.

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

brkctl пoчти вceгдa вoзвpaщaeт длинный yкaзaтeль в кaчecтвe aдpeca выдeлeннoгo yчacткa пaмяти. B cлyчae oшибки вoзвpaщaeтcя (char far *)-1.

Ecли increment бoльшe 0, вoзвpaщaeмoe знaчeниe являeтcя yкaзaтeлeм нa нaчaлo выдeлeннoгo yчacткa пaмяти.

Ecли increment мeньшe или paвeн нyлю, вoзвpaщaeмoe знaчeниe этo yкaзaтeль нa пepвый нe пpинaдлeжaщий пpoцeccy бaйт (oбычнo этo aдpec ocвoбoждeннoгo yчacткa пaмяти). Ecли пocлeдний из ocтaвшиxcя ceгмeнтoв пoлoн (eгo длинa cocтaвляeт poвнo 64K), вoзвpaщaeмoe знaчeниe дoлжнo yкaзывaть нaчaлo cлeдyющeгo ceгмeнтa (кoтopый нe oбязaн cyщecтвoвaть).

B цeлoм, дeйcтвия и вoзвpaщaeмыe знaчeния мoгyт быть cлeдyющими:


brkctl (BR_ARGSEG, 0, ptr) Cooбщaeт пocлeдний aдpec в yкaзaннoм ceгмeнтe.

brkctl (BR_ARGSEG, increment, ptr) Увeличивaeт yкaзaнный ceгмeнт.

brkctl (BR_NEWSEG, 0) Coздaeт нoвый ceгмeнт c нyлeвoй длинoй.

brkctl (BR_NEWSEG, increment) Coздaeт нoвый ceгмeнт c длинoй, paвнoй increment.

brkctl (BR_IMPSEG, 0) Cooбщaeт пocлeдний aдpec в пocлeднeм ceгмeнтe дeнныx. Moжeт ocвoбoдить нecкoлькo ceгмeнтoв.

brkctl (BR__IMPSEG, increment) Увeличивaeт пocлeдний ceгмeнт. B cлyчae бoльшoй мoдeли пaмяти (или мaлoй и cpeднeй c нecкoлькими ceгмeнтaми дaнныx) мoжeт coздaть нoвый ceгмeнт.

СМ. ТАКЖЕ

, , machine(5), , sbrk(3)

ЗАМЕЧАНИЯ

Cиcтeмный вызoв brkctl cлeдyeт иcпoльзoвaть тoлькo для динaмичecкoгo pacпpeдeлeния пaмяти в мaлoй или cpeднeй мoдeли пaмяти. B дpyгиx cлyчaяx cлeдyeт пpимeнять sbrk(3), и дpyгиe cтaндapтныe cpeдcтвa UNIX. Фyнкциoниpoвaниe brkctl мoжeт измeнитьcя в пocлeдyющиx peaлизaцияx cиcтeмы.

brkctl в нacтoящee вpeмя дocтyпeн тoлькo в peaлизaцияx XENIX, пoддepживaющиx peжим зaщиты (protected mode).

Heзaвиcимo oт мoдeли ceгмeнт дaнныx, oбpaщeниe к кoтopoмy ocyщecтвляeтcя пo кopoткoмy yкaзaтeлю, дoлжeн быть пepвым ceгмeнтoм дaнныx.

Bызoв brkctl c BR_IMPSEG и oтpицaтeльным incremet нe мoжeт пpимeнятьcя к paздeляeмoмy ceгмeнтy инcтpyкций.









BS(1)


НАЗВАНИЕ

bs - компилятор/интерпретатор программ умеренных размеров

СИНТАКСИС

bs [файл [аргумент ...]]

ОПИСАНИЕ

Язык bs - отдаленный потомок Бейсика и Снобола-4 с некоторыми дополнениями из языка C. Язык bs создан для тех задач программирования, в которых время разработки так же важно, как и полученная в результате скорость выполнения. Формальности об явления данных и манипуляции с файлами и процессами минимизированы. Построчная отладка, операторы trace и dump, а также подробные сообщения об ошибках выполнения упрощают тестирование программ. Более того, можно отлаживать незавершенные программы; внутренние функции могут тестироваться до того, как написаны внешние функции, и наоборот.

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

Программы на языке bs состоят из строк. Символом продолжения является \ в конце строки. Язык допускает строки следующего вида:

оператор метка оператор

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

Оператор языка bs - это выражение или ключевое слово, за которым следует 0 или более выражений. Некоторые ключевые слова (clear, compile, !, execute, include, ibase, obase и run) всегда выполняются, как только они откомпилированы.

Синтаксис операторов

выражение Целью выполнения выражения являются его побочные эффекты (значение, присваивание или вызов функции). Детали приводятся ниже, после описания типов операторов. break Выйти из самого внутреннего for/while цикла. clear Выполняется немедленно. Очистить таблицу имен и удалить скомпилированные операторы. compile [выражение] Выполняется немедленно. Откомпилировать последующие операторы (не принимая во внимание установленный режим немедленного выполнения). Необязательное выражение вычисляется и используется в качестве имени файла для последующего ввода. В последнем случае выполняется clear. continue Перейти к следующей итерации текущего for/while цикла. dump [имя] Напечатать имена и текущие значения всех нелокальных переменных. Если указана опция имя, сообщается только о данной переменной. После ошибки или прерывания выводится номер последнего оператора и (возможно) трассировка пользовательских функций. exit [выражение] Вернуться на системный уровень. Выражение возвращается в качестве кода завершения. execute Изменить режим выполнения на немедленный (прерывание дает аналогичный эффект). Эта команда не вызывает выполнения запомненных операторов (см. ниже команду run). for имя = выражение выражение оператор


for имя = выражение выражение

...

next

for выражение, выражение, выражение оператор

for выражение, выражение, выражение

...

next Циклически выполнять оператор ( первая форма) или группу операторов (вторая форма) под управлением переменной с указанным именем. Переменная принимает значение первого выражения, затем она увеличивается на единицу в каждом цикле, пока не превзойдет значения второго выражения. Третьей и четвертой формам требуются три выражения, разделенные запятыми. Первое из них - инициализация, второе условие (если истинно, то продолжать), и третье действие при переходе к следующей итерации (обычно приращение). fun f([a, ...]) [v, ...]

...

nuf Определить имя, аргументы и локальные переменные написанной пользователем функции. Допускается до 10 аргументов и локальных переменных. Эти имена не могут быть массивами, а также не могут быть связаны по вводу и выводу. Определения функций не могут быть вложенными. freturn Сигнализировать о неудачном завершении пользовательской функции. См. ниже операцию опроса (?). Если опрос отсутствует, freturn возвращает 0. Когда опрос активен, freturn возвращается к соответствующему выражению (возможно, выполняя возвраты из вложенных функций). goto имя Передать управление на хранящийся в памяти оператор с соответствующей меткой. ibase N Установить основание системы счисления при вводе чисел равным N. Поддерживаются только следующие значения N: 8, 10 (по умолчанию) и 16. Шестнадцатеричные значения 10-15 вводятся как a-f. Первой должна стоять цифра (то есть f0a следует вводить как 0f0a). Ibase (и, ниже, obase) выполняются немедленно. if выражение оператор

if выражение

...

[else

...]

fi Выполнить оператор (первая форма) или группу операторов (вторая форма), если результат вычисления выражения ненулевой. Цепочки символов 0 и "" (пустая) считаются нулевыми. Во второй форме допускается дополнительная группа операторов, которая должна выполняться, когда не выполняется первая группа. Единственный оператор, допустимый в той же строке, что и else, - это if; только другие fi могут быть в той же строке, что и fi. Поддерживается сокращение else и if в elif. Чтобы закрыть последовательность if ... elif ... [ else ... ], требуется только одно fi. include выражение Выражение должно определять имя файла. Файл должен содержать bs-операторы. Такие операторы становятся частью компилируемой программы. Операторы include не могут быть вложенными. obase N Установить основание системы счисления при выводе чисел равным N (см. выше ibase). onintr метка



onintr Программная обработка прерываний. В первой форме после прерывания управление передается на указанную метку, в точности так, как если бы в момент прерывания был выполнен оператор goto. После начала обработки прерывания установленная реакция отменяется. Во второй форме прерывание вызывает завершение выполнения. return [выражение] Вычислить выражение и возвратить его значение в качестве результата вызова функции. Если выражение не указано, возвращается 0. run Перезапустить генератор случайных чисел. Передать управление на первый скомпилированный оператор. Если оператор run содержится в файле, он должен быть последним оператором. stop Прекратить выполнение скомпилированных операторов. Bs возвращается в режим немедленного выполнения. trace [выражение] Управление трассировкой функций. Если выражение не указано (или имеет нулевое значение), трассировка выключается; в противном случае печатается протокол вызовов пользовательских функций и возвратов из них. Каждый возврат уменьшает на единицу значение выражения, указанного в операторе trace. while выражение оператор

while выражение

...

next Оператор while аналогичен for за исключением того, что указывается условие продолжения цикла. ! команда shell'а Выполнить команду shell'а. # ... Этот оператор игнорируется. Он используется для включения в программу комментариев.

Синтаксис выражений

имя Имя используется для того, чтобы указать переменную. Имена состоят из буквы (прописной или строчной), за которой могут следовать буквы и цифры. Только первые шесть символов в имени являются значащими. За исключением имен, об явленных в операторах fun, все имена являются глобальными. Значениями имен могут быть числа (вещественные двойной точности) и цепочки символов; кроме того, имена могут быть связаны по вводу/выводу (см. ниже встроенную функцию open). имя ([выражение [, выражение] ...]) К функциям можно обращаться по имени, за которым следуют аргументы в скобках, разделенные запятыми. За исключением встроенных функций (описанных ниже), имя должно быть определено при помощи оператора fun. Аргументы функций передаются по значению. имя [выражение [, выражение] ...] Такой синтаксис используется для обращения к массивам или таблицам (см. ниже описание встроенных функций для работы с таблицами). Для массивов каждое выражение урезается до целого и используется как спецификатор для имени. Результирующее обращение синтаксически эквивалентно имени (то есть может употребляться в тех же местах, что и имя); записи a[1,2] и a[1][2] обозначают одно и то же. Значения урезанных выражений должны быть в пределах от 0 до 32767. число Число используется для представления константного значения. Число записывается в стиле Фортрана и содержит цифры, десятичную точку (не обязательно) и, возможно, масштабный множитель, состоящий из символа e, за которым может следовать характеристика со знаком. цепочка_символов Цепочки_символов ограничиваются знаками ". Знак \ позволяет вставлять в цепочку следующие символы: кавычка (\"), перевод строки (\n), возврат каретки (\r), пробел (\b) и табуляция (\t). В остальных случаях символ \ обозначает сам себя. (выражение) Скобки используются для того, чтобы изменить порядок вычислений. (выражение, выражение [, выражение ...]) [выражение] Последнее выражение используется как индекс, чтобы выбрать один элемент из взятого в круглые скобки списка выражений, разделенных запятыми. Элементы списка нумеруются слева, начиная с нуля. Выражение: (False, True)[a == b] имеет значение True, если a равно b. ? выражение Операция опроса проверяет "успех" вычисления выражения, а не его значение. Ее целесообразно использовать для проверки выхода на конец файла (см. ниже ПРИМЕРЫ), результата вычисления встроенной функции и для проверки возврата из определенных пользователем функций (см. freturn). "Реакция на прерывание", устанавливаемая данной операцией (например, конец файла), приводит к немедленному переходу к самому последнему опросу с возможным пропуском операторов присваивания или переходом через уровни вложенности функций. - выражение Результатом является значение выражения с обратным знаком. ++ имя Увеличивает на единицу значение переменной (или элемента массива). Результатом является новое значение. -- имя Уменьшает на единицу значение переменной. Результатом является новое значение. ! выражение Логическое отрицание значения выражения. Будьте осторожны, такое выражение может быть воспринято как запрос на выполнение команды shell'а. выражение операция выражение Обращения к общеупотребимым функциям двух аргументов обозначаются двумя аргументами, которые разделяются операцией, указывающей функцию. За исключением присваивания, конкатенации и операций сравнения, перед тем, как выполняется операция, оба операнда преобразуются к целому типу.



Бинарные операции (упорядочены по возрастанию приоритета):

= Операция присваивания. Левый операнд должен быть именем или элементом массива. Результатом является правый операнд. Последовательные присваивания выполняются справа налево; все другие операции - слева направо. _ (подчеркивание). Операция конкатенации. & | Результатом & (логическое и) является 0, если какой-нибудь из ее аргументов - 0; результат равен 1, если оба аргумента ненулевые; результатом | (логическое или) является 0, если оба аргумента равны нулю; результат равен 1, если какой-нибудь из аргументов ненулевой. Обе операции трактуют пустую цепочку символов как 0. < <= > >= == != Операции сравнения (меньше, меньше или равно, больше, больше или равно, равно, не равно) возвращают 1, если их аргументы находятся в указанном отношении. В противном случае они возвращают 0. Допустимы выражения, подобные a>b>c (что эквивалентно a>b & b>c). Если оба аргумента являются цепочками символов, проверяется лексикографическая упорядоченность. + Сложение и вычитание. * / % Умножение, деление и остаток. ^ Возведение в степень.

Встроенные функции

Работа с аргументами

arg(i) Значение i-го фактического аргумента текущего уровня вызова функции. На нулевом уровне arg возвращает i-ый аргумент командной строки (arg (0) возвращает bs). narg( ) Возвращает число переданных аргументов. На нулевом уровне возвращается число аргументов командной строки.

Математические функции

abs(x) Абсолютная величина x. atan(x) Арктангенс x. Значение между - П/2 и П/2. ceil(x) Минимальное целое, не меньшее x. cos(x) Косинус x (Углы задаются в радианах). exp(x) Экспонента x. floor(x) Наибольшее целое число, не превосходящее x. log(x) Натуральный логарифм x. rand( ) Равномерно распределенное между 0 и 1 случайное число. sin(x) Синус x. sqrt(x) Квадратный корень из x.

Операции с цепочками символов

size(s) Размер (длина в байтах) цепочки s. format(f, a) Возвращает отформатированное значение a. Предполагается, что f - это спецификация формата в смысле . Рекомендуется использовать только следующие типы спецификаторов формата: %...f, %...e и %...s. index(x, y) Номер первого символа в x, совпадающего с каким либо символом из y. Если такого нет, возвращается 0. trans(s, f, t) Сопоставляет символы источника s с символами f, и заменяет их на символы, стоящие в той же позиции цепочки t. Символы источника, которые не встречаются в f, копируются в результат. Если f длиннее, чем t, символы источника, которые сопоставляются с избыточной частью f, не помещаются в результат. substr(s, начало, ширина) Подцепочка s с заданными началом и шириной. match(цепочка_символов, шаблон)



mstring(n) Шаблон имеет синтаксис, аналогичный регулярным выражениям команды . Символы ., [, ] (внутренние скобки), ^, * и $ являются специальными. Функция mstring возвращает n-ую (1 n 10) подцепочку обрабатываемой цепочки_символов, которая успешно сопоставлена с фрагментом шаблона, заключенного между парами символов \( и \), из последнего обращения к match. Шаблоны сопоставляются с началом цепочки_символов (как если бы все они начинались символом ^). Функция match возвращает число успешно сопоставленных символов. Пример:

match("a123ab123", ".*\([a-z]\)") == 6 mstring(1) == "b"

Работа с файлами

open(имя, файл, тип)

close(имя) Аргумент имя должен быть именем переменной в смысле bs (переданным как цепочка символов). При обращении к функции open в качестве аргумента файл можно задавать:

0, 1, или 2, что означает стандартный ввод, стандартный вывод и стандартный протокол соответственно. Цепочку символов, представляющую имя файла. Цепочку символов с ! в начале, представляющую команду, которая должна быть выполнена (посредством sh -c). Аргумент тип должен быть одним из следующих: r (читать), w (писать), W (писать без перевода строки), a (добавлять). После того как выполнена функция close, имя становится обычной переменной. Начальные связывания таковы:

open("get", 0, "r") open("put", 1, "w") open("puterr", 2, "w")

Примеры приведены ниже. access(s, m) Выполняет вызов . ftype(s) Возвращает односимвольный индикатор типа файла: f для обычного файла, p для именованного канала, d для каталога, b для блочного устройства, c для символьного устройства.

Таблицы

table(имя, размер) Таблица в bs - это одномерный массив с ассоциативным доступом. "Индексами" (их называют также ключами) являются цепочки символов (числа преобразуются в цепочки). Аргумент имя должен быть именем переменной в смысле bs (переданным как цепочка символов). Аргумент размер устанавливает минимальное число элементов, которое должно быть размещено. Bs печатает сообщение об ошибке и завершает работу, когда таблица переполняется. item(имя, номер)



key( ) Функция item осуществляет доступ к элементам таблицы по их номерам (обычно множество значений ключей не допускает систематического перебора). После того, как функция item возвратит значение элемента таблицы, результатом функции key будет "индекс" (ключ) этого элемента. Аргумент имя нельзя брать в кавычки. Так как точные размеры таблицы не определены, надо использовать операцию опроса, чтобы обнаружить конец таблицы, например:

table("t", 100) ...

# Если значением переменной word является слово, # следующее выражение добавляет единицу # к счетчику этого слова: ++t[word] ...

# Напечатать пары ключ/значение: for i = 0, ?(s = item(t, i)), ++i if key() \ put = key()_":"_s

iskey(имя, слово) Проверяет, есть ли ключ слово в таблице имя; возвращает 1, если есть, и 0, если нет.

Прочие функции

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

name = "xyz" eval("++"_name)

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

?eval("open(\"X\", \"XXX\", \"r\")")

будет 0, если файла с именем "XXX" нет (вместо аварийного завершения программы пользователя). Следующий фрагмент выполняет переход на метку L (если она существует):

label="L" if !(?eval("goto "_label)) puterr = "no label"

plot(запрос, аргументы) Формирует вывод для устройств, которые поддерживаются программой . Допустимы следующие запросы:

plot(0, терминал) Определяет, что дальнейший вывод программы plot должен направляться программе с аргументом -Tтерминал. plot(4) "Очищает" плоттер. plot(2, метка) Ставит метку на текущую точку. plot(3, x1, y1, x2, y2) Рисует отрезок между (x1,y1) и (x2,y2). plot(4, x, y, r) Рисует круг с центром (x,y) и радиусом r. plot(5, x1, y1, x2, y2, x3, y3) Рисует дугу с центром (x1,y1) и концами (x2,y2) и (x3,y3). plot(6) Не реализован. plot(7, x, y) Делает точку (x,y) текущей. plot(8, x, y) Рисует отрезок из текущей точки в (x,y). plot(9, x, y) Рисует точку в (x,y). plot(10, режим) Устанавливает заданный режим проведения линий. plot(11, x1, y1, x2, y2) Устанавливает левый нижний угол области рисования в (x1,y1), а правый верхний - в (x2,y2). plot(12, x1, y1, x2, y2) Определяет, что соответствующие x (y) координаты должны умножаться на x1 (y1) и затем складываться с x2 (y2) перед тем, как они изображаются. Первоначальный масштаб - plot(12, 1.0, 1.0, 0.0, 0.0).



Некоторые запросы применимы не ко всем плоттерам. Все запросы, кроме 0 и 12, реализованы на основе передачи символов программе . Чтобы получить дополнительную информацию, см. . last( ) В режиме немедленного выполнения возвращает последнее вычисленное значение.

ПРИМЕРЫ

Использование bs в качестве калькулятора:

$ bs # Расстояние (в дюймах), которое свет # проходит за наносекунду. 186000 * 5280 * 12 / 1e9 11.78496

# Сложный процент (из 6% за 5 лет # с 1000 долларов). int = .06 / 4 bal = 1000 for i = 1 5*4 bal = bal + bal*int bal - 1000 346.855007

exit

Общий вид типичных bs-программ:

# Инициализация: var1 = 1 open("read", "infile", "r") ...

# Вычисление: while ?(str = read) ... next # Завершение close("read") ...

# Последний выполняемый оператор (exit или stop): exit # Последняя входная строка run

Примеры ввода/вывода:

# Копировать "oldfile" в "newfile". open("read", "oldfile", "r") open("write", "newfile", "w") ... while ?(write = read) ... ... # закрыть "read" и "write": close("read") close("write")

# Канал между командами. open("ls", "!ls *", "r") open("pr", "!pr -2 -h 'List'", "w") while ?(pr = ls) ... ...

# Закрыть файлы: close("ls") close("pr")

СМ. ТАКЖЕ
, , .

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

Более полное описание математических функций см. в разделе 3M Справочника программиста (для возведения в степень используется функция pow, описанная в ; пакет ввода/вывода используется стандартный.

СЮРПРИЗЫ

"Индексами" неинициализированных элементов таблицы являются цепочки из двух символов с восьмеричными кодами 43 и 300, поэтому приведенный пример печати пар ключ/значение будет работать неверно.

В цепочке символов нельзя употребить знак #, поскольку он служит началом комментария.









BSEARCH(3C)


НАЗВАНИЕ

bsearch - бинарный поиск в отсортированной таблице

СИНТАКСИС

#include <search.h>

char *bsearch ((char *) key, (char *) base, nel, sizeof (*key), compar) unsigned nel; int (*compar) ( );

ОПИСАНИЕ

Функция bsearch предназначена для выполнения бинарного поиска в соответствии с алгоритмом, описанным в книге Д. Кнута: Искусство программирования для ЭВМ. Т. 3. Сортировка, поиск. - М.: Мир, 1978. Раздел 6.2.1, алгоритм B.

Функция bsearch возвращает указатель внутрь таблицы на искомые данные. Предварительно таблица должна быть отсортирована в возрастающем порядке согласно предоставленной функции сравнения. Аргумент key указывает на об ект данных, разыскиваемый в таблице (ключ поиска); base указывает на первый элемент таблицы; nel задает количество элементов в таблице; compar - это функция сравнения, аргументами которой при вызове служат два указателя на сравниваемые элементы. В соответствии с тем, какое целое число она возвращает: меньшее нуля, равное нулю или большее нуля, первый аргумент считается меньшим, равным или большим по отношению ко второму.

ПРИМЕР

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

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

#include <stdio.h>

#include <search.h>

#define TABSIZE 1000

struct node { /* Структура узлов */ char *string; int length; }; struct node table [TABSIZE]; /* Таблица для поиска */ ...

{ struct node *node_ptr, node; int node_compare (); /* Функция сравнения узлов */ char str_space [20]; /* Пространство для ввода цепочки символов */ ...

node.string = str_space; while (scanf ("%s", node.string) != EOF) { node_ptr = (struct node *) bsearch ((char *) (&node), (char *) table, TABSIZE, sizeof (struct node), node_compare); if (node_ptr != NULL) { (void) printf ("string = %20s, length = %d\n", node_ptr->string, node_ptr->length); } else { (void) printf ("not found:%s\n", node.string); } } }


/* Следующая функция сравнивает два узла по цепочкам символов на основе алфавитного порядка */ int node_compare (node1, node2) char *node1, *node2; { return strcmp (((struct node *) node1) -> string, ((struct node *) node2) -> string); }

ПРИМЕЧАНИЯ

Указатели на ключ (key) и на первый элемент таблицы (base) должны иметь тип "указатель на элемент" и преобразовываться к типу "указатель на символ".

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

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

СМ. ТАКЖЕ

, , , .

ДИАГНОСТИКА

В случае неудачного поиска результатом служит пустой указатель NULL









Nfsd, biod


НАЗВАНИЕ

nfsd, biod - сервисные процессы в NFS

СИНТАКСИС

/etc/nfsd [nservers] /etc/biod [nservers]

ОПИСАНИЕ

Команда nfsd запускает процессы на сетевом сервере по запросам, поступающим с клиентских выходов. Nservers - количество процессов, запускаемых по запросам. Значение этого аргумента определяется ожидаемой нагрузкой на сервер.

Команда biod, поданная клиентом NFS, запускает nservers процессов асинхронного ввода-вывода блоками, которые выполняют чтение и запись блоков в буферном кеше клиента.

СМ. ТАКЖЕ

,



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


НАЗВАНИЕ

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

СИНТАКСИС

char *sbrk (incr) int incr;

int brk (addr) char *addr;

ОПИСАНИЕ

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

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

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

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

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

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

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

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

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

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

СМ. ТАКЖЕ

ЗAМEЧAНИЯ

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



SH(1)


НАЗВАНИЕ

sh - стандартный интерпретатор командного языка shell

СИНТАКСИС

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

ОПИСАНИЕ

Команда sh - запуск интерпретатора командного языка shell, способного выполнять команды, введенные с терминала или хранящиеся в файле. О трактовке аргументов sh см. ниже Запуск shell'а.

ОПРЕДЕЛЕНИЯ

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

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

Параметр - это имя, цифра или любой из символов *, @, #, ?, -, $, !.