int mount(const char *source, const char *target,const char *filesystemtype, unsigned long mountflags,const void *data);
int umount(const char *target);
int umount2(const char *target, int flags);
ОПИСАНИЕ
mount
подключает файловую систему, определяемую
source
(обычно это имя является названием устройства, но может также быть
именем каталога или dummy), к каталогу, заданному в
target.
umount и umount2
отключает (самую последнюю) файловую систему, подключенную к
target.
Подключать и отключать файловые системы может только суперпользователь.
Начиная с Linux 2.4 одна файловая система может быть видна
на нескольких точках подключения, а множество подключений
может быть собрано в одной точке.
Значения для аргумента
filesystemtype
поддерживаемые ядром, перечислены в
/proc/filesystems
(например: "minix", "ext2", "msdos", "proc", "nfs", "iso9660" и т.п.).
остальные типы могут стать доступными, если будут загружены
соответствующие модули.
Аргумент
mountflags
может иметь "волшебное" число 0xC0ED (MS_MGC_VAL)
в основных 16 битах (это требовалось в версиях ядра вплоть до 2.4,
но более не требуется и игнорируется, даже если указано),
а остальные флаги подключения (как определено в <linux/fs.h> для libc4 и libc5
и в <sys/mount.h> для glibc2) в дополнительных 16 битах:
MS_BIND
(начиная с Linux 2.4)
Выполнить привязку подключения, при этом файл или каталог становятся видимыми
в других точках внутри файловой системы.
Привязки подключения могут нарушать ограничения файловой системы и лимиты
chroot(2).
Аргументы
filesystemtype, mountflags, и data
игнорируются.
MS_DIRSYNC
(начиная с Linux 2.5.19.)
Осуществлять изменения каталогов на этой файловой системе синхронно
(Это свойство может быть получено для отдельных каталогов или дерева
подкаталогов, используя
chattr(8).)
MS_MANDLOCK
Разрешить жесткую блокировку файлов в этой файловой системе.
(Жесткая блокировка все равно сначала должна быть включена для файлов,
как описано в
fcntl(2).)
MS_MOVE
Переместить подкаталоги
source
указывает на существующую точку подключения, а
target
определяет новое расположение.
Перемещение производится на самом низком уровне, и ни в один
момент подкаталог не будет являться "отключенным".
Аргументы
filesystemtype, mountflags, и data
игнорируются.
MS_NOATIME
Не обновлять время доступа для (всех типов) файлов в этой файловой системе.
MS_NODEV
Запретить доступ к устройствам (особым файлам) в этой файловой системе.
MS_NODIRATIME
Не обновлять время доступа для каталогов в этой файловой системе.
MS_NOEXEC
Запретить программам исполнение в этой файловой системе.
MS_NOSUID
Не учитывать биты set-UID и set-GID при исполнении программ в этой файловой системе.
MS_RDONLY
Подключать файловую систему в режиме только-для-чтения.
MS_REMOUNT
Переподключить уже существующее подключение. При этом можно изменить
mountflags
и
data
уже существующего подключения без фактического отключения-подключения файловой системы.
source
и
target
должны соответствовать значениям, указанным для
mount()
в первом вызове (при начальном подключении);
параметр
filesystemtype
игнорируется.
MS_SYNCHRONOUS
Осуществлять записи на эту файловую систему синхронно
(как если бы флаг
O_SYNC
для
open(2)
был указан для всех файлах, открытых на этой файловой системе).
Начиная с Linux 2.4 и далее, флаги
MS_NODEV, MS_NOEXEC, и MS_NOSUID
можно устанавливать для каждого отдельного подключения.
Аргумент
data
интерпретируется разными файловыми системами.
Обычно это строка опций, разделенных запятой,
понимаемых этим типом файловой системы.
Смотрите
mount(8)
для подробной информации об опциях для каждого типа файловой системы.
В Linux 2.1.116 добавлен системный вызов
umount2(),
который, как и
umount(),
отключает цель target, но позволяет также дополнительным флагам
flags
управлять поведением операции:
MNT_FORCE
Принудительно отключать, даже если устройство занято.
(Начиная с 2.1.116. Только для подключений NFS.)
MNT_DETACH
Выполнить отложенное отключение: точка подключения становится недоступной
для новых запросов о доступе, но фактически отключается, когда
перестает быть занятой (снимаются все текущие запросы и работы с
файловой системой). (Начиная с 2.4.11.)
ВОЗВРАЩАЕМЫЕ ЗНАЧЕНИЯ
При удачном завершении вызова возращаемое значение равно нулю. При ошибке возвращается
-1, а переменной
errno
присваивается номер ошибки.
НАЙДЕННЫЕ ОШИБКИ
Коды ошибок, описанные ниже, не зависят от типа запускаемой файловой
системы. У каждой файловой системы могут быть свои коды ошибок и
свое собственное поведение. Подробности смотрите в исходных текстах ядра.
EPERM
Функция вызвана не суперпользователем.
ENODEV
Такой тип
filesystemtype
не определен в ядре.
ENOTBLK
Source
не является блочным устройством (если устройство было запрошено).
EBUSY
Source
уже подключен, или его нельзя вновь запустить в режиме "только для чтения",
вследствие того, что в нем все еще есть открытые для записи файлы,
или устройство не может быть подключено к каталогу
target
потому, что каталог
target
занят (является рабочим каталогом некоторого процесса,
точкой подключения другого устройства, в нем есть
открытые файлы и т.п.).
EINVAL
Source
содержит неправильный суперблок.
Или была сделана попытка переподключения
source,
а он не подключен к каталогу
target.
Или была сделана попытка перемещения, а
source
не является точкой подключения, или является "/".
Или была попытка отключения каталога, а
target
не является точкой подключения ни одного из устройств.
ENOTDIR
Второй аргумент, или префикс первого аргумента не являются именами каталогов.
EFAULT
Один из аргументов-указателей указывает на каталог за пределами адресного пространства.
ENOMEM
Ядро не может выделить свободную страницу памяти для копирования имен файлов
или данных.
ENAMETOOLONG
Длина полного имени файла превысила MAXPATHLEN.
ENOENT
Путь пуст или содержит несуществующий компонент.
ELOOP
Во время разбора имен найдено слишком много ссылок. Или сделана попытка
перемещения, а
target
является подкаталогом
source.
EACCES
Компонент пути не может быть прочитан
или была попытка запуска незаписываемой файловой системы ("только для чтения")
без указания на флаг MS_RDONLY,
или блочное устройство
Source
находится на файловой системе, подключенной с помощью опции MS_NODEV.
ENXIO
Основное число блочного устройства
source
выходит за допустимые пределы.
EMFILE
(В случае, если не требуются блочные устройства):
таблица простых устройств переполнена.
СООТВЕТСТВИЕ СТАНДАРТАМ
Эта функция специфична для Linux. Не рекомендуется
использовать ее в программах, переносимых на другие системы.
ПРИМЕЧАНИЯ ПО ИСТОРИИ
Изначально функция
umount
вызывалась в виде umount(device) и возвращала ENOTBLK
при попытке работы с любым неблочным устройством.
В Linux 0.98p4 был добавлен вызов umount(dir), для поддержки
анонимных устройств.
В Linux 2.3.99-pre7 был убран вызов umount(device),
осталось только umount(dir) (теперь устройства могет быть подключены
более чем в одну точку, поэтому указание устройства при отключении стало некорректным).
Флаг MS_SYNC был переименован в MS_SYNCHRONOUS в версии 1.1.69,
когда был добавлен другой флаг MS_SYNC в <mman.h>.
До Linux 2.4 поппытка выполнения программ set-UID или set-GID на файловой системе,
подключенной с параметром
MS_NOSUID
вызовет ошибку
EPERM.
С Linux 2.4 биты set-UID и set-GID в этом случае негласно игнорируются.