mount, umount - подключает и отключает файловые системы
НАЗВАНИЕmount, umount - подключает и отключает файловые системы.
СИНТАКСИС
#include
int mount(const char *source, const char *target , const
char *filesystemtype, unsigned long mountflags , const
void *data);
int umount(const char *target);
ОПИСАНИЕ
mount подключает файловую систему, указанную source
(обычно это имя является названием устройства, но может
также быть именем каталога или dummy), к каталогу,
заданному target. umount отключает (самую последнюю)
файловую систему, подключенную к target. Подключать и
отключать файловые системы может только суперпользователь.
Аргумент filesystemtype может принимать одно из
перечисленных в /proc/filesystems значений (напр.,
"minix", "ext2", "msdos", "proc", "nfs", "iso9660" и
т.п.). Аргумент mountflags в основных 16-и битах может
содержать "волшебное" число 0xC0ED, а остальные флаги
запуска (заданные в (в libc4 и libc5) и в
, в glibc2) содержатся в дополнительных 16-и
битах в следующем порядке:
data воспринимается различными файловыми системами
по-разному.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При удачном завершении вызова возращаемое значение равно
нулю. При ошибке возвращается -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 в .
До Linux 2.4 поппытка выполнения программ set-UID или set-
GID на файловой системе, подключенной с параметром
MS_NOSUID вызовет ошибку EPERM. С Linux 2.4 биты set-UID
и set-GID в этом случае негласно игнорируются.