Фэндом


НАЗВАНИЕ

bind, mount, unmount - объявить, смонтировать, размонтировать(отвязать)

РЕЗЮМЕ

include "sys.m";

sys := load Sys Sys->PATH;

bind: fn(name, old: string, flag: int): int;

mount: fn(fd: ref FD; afd: ref FD, old: string, flag: int, aname: string):

int;

unmount: fn(name, old: string): int;

ОПИСАНИЕ

Функции bind и mount вносят изменения в файловое пространство текущего процесса и его группы пространства имен. Для обеих функций, значение переменной old соответствует существующему файлу или каталогу текущего файлового пространства. Значение переменной old присваивается так, как описано в sys-intro(2), за исключением того, что `no translation of the final path element is done`.

В функции bind переменной name присваивается имя другого (возможно, такого же как в old) существующего файла или каталога из текущего пространства имен. После успешного завершения, old будет являться алиасом (Note alias) для объекта name; if the modification does not hide the original, name будет по-прежнему ссылаться на свой исходный файл или каталог. Значение переменной name присваивается исключительно в момент исполнения функции, далее везде используется установленное значение.

Аргумент FD, содержащий имя каталога, который необходимо смонтировать, по сути является файловым дескриптором открытого pipe-канала (см. sys-pipe(2)) или же соединения с файл-сервером, которое ожидает сигнала от Styx-протокола. В данном случае, переменная old должна указывать на каталог, а не на файл. После успешного монтирования, путь, содержащийся в fd, монтируется в каталог old, который становится для него корневым. Если монтирование подразумевает авторизацию, файловый дескриптор afd должен содержать путь к файлу авторизации; иначе его значение должно быть nil.

Тип модификации пространства имен задается специальными флагами. Дальше по тексту принимаем, что переменная new ссылается на файл из name или корневой каталог из fd, при этом, как old, так и new должны содержать: либо только имена каталогов, либо только имена файлов. Флаги могут быть следующих типов:

Sys->MREPL - замещает значение переменной old аналогичным из new. Если речь идет о каталогах (для mount это подразумевается по умолчанию), то old становится `объединенным` каталогом, содержащим файлы и подкаталоги обоих.
Sys->MBEFORE - добавляет файлы и подкаталоги из new в начало объединенного каталога, смонтированного на месте old , таким образом, они оказываются как бы выше по иерархии, чем остальное его содержимое. После выполнения команды bind или mount с флагом Sys->MBEFORE, при нахождении пути к файлу или каталогу содержимое new будет просматриваться в первую очередь.
Sys->MAFTER - эффект тот же, что ис Sys->MBEFORE, однако, в данном случае содержимое new помещается в конец объединенного каталога.


В дополнение к сказанному, существует еще один флаг, который используется отдельно от вышеупомянутых, это флаг Sys->MCREATE. Когда функция create (см. sys-open(2)) пытается создать объект в объединенном каталоге, элементы объединенного каталога просматриваются в установленном порядке на предмет совпадений имен. Если такое имя отсутствует, то объект создается, если нет - создание файла считается не возможным.


При обращении к функции mount, дескриптор fd должен быть доступен для чтения и записи, кроме того должно быть установлено соединение с файл-сервером. После монтирования в old, дерево каталогов становится доступным `устройству` ядра mnt(3), драйвер которого будет транслировать операции с файлами и каталогамисерверу в виде сигналов, понятных протоколу Styx. Значение aname определяет точку доступа внутри файл-сервера; если поле пустое (или значение переменной равно nil), точкой доступа становится принятое по умолчанию значение.


Функция unmount отменяет действие bind и mount. Если значение переменной name равно nil - из old отмонтируется и отвязывается все, что было примонтировано или привязано. Если ее значение не равно nil , то, соответственно, отменяются лишь конкретные привязки.

Смотри также

sys-intro(2)

Диагностика

В случае успеха возвращается положительное целое (каждый раз уникальное) или же `-1` - в случае ошибки.

ОШИБКИ

Функцияmount не возвращает ничего до тех пор, пока не завершится успешно, поэтому нить, в которой выполняется mount, не может быть the one serving.

Обнаружено использование расширения AdBlock.


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

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

Также на Фэндоме

Случайная вики