#include <sys/mount.h>
int mount(const char *fuente, const char
*destino, const char *tipo_sf, unsigned
long opciones, const void
*datos);
int umount(const char *destino);
int umount2(const char *destino, int
opciones);
mount une el sistema de ficheros especificado por
fuente (que frecuentemente es un nombre de dispositivo, pero que
puede ser también un nombre de directorio o un dispositivo virtual)
al directorio especificado por destino.
umount y umount2 eliminan la unión del sistema de
ficheros (el que hay arriba del todo) que se encuentra montado en
destino.
Sólo el super-usuario puede montar y desmontar sistemas de
ficheros. A partir de la versión 2.4 de Linux, un mismo sistema de
ficheros puede ser visible en multiples puntos de montaje y se pueden
realizar varios montajes en el mismo punto de montaje, apilando unos sobre
otros.
Los valores para el argumento tipo_sf que soporta el
núcleo se listan en el fichero /proc/filesystems (como
"minix", "ext2", "msdos", "proc",
"nfs", "iso9660", etc.). Es posible que aparezcan tipos
adicionales cuando se carguen los módulos apropiados.
El argumento opciones puede tener el número
mágico 0xC0ED (MS_MGC_VAL) en los 16 bits más
significativos (esto era necesario en las versiones del núcleo
anteriores a la 2.4, pero ya no se necesita y se ignora si se especifica) y
varias opciones de montaje (como las definidas en <linux/fs.h> para
libc4 y libc5 y en <sys/mount.h> para glibc2) en los 16 bits menos
significativos:
- MS_BIND
- (Linux 2.4 y siguientes) Realiza un montaje «de ligadura»
(bind), lo que hace que un subárbol de ficheros o de
directorios sea visible en otro punto dentro de un sistema de ficheros.
Los montajes de ligadura pueden cruzar los límites de los sistemas
de ficheros y atravesar «jaulas» chroot(2). Los
argumentos tipo_sf, opciones y datos se ignoran.
- MS_DIRSYNC
- (Desde Linux 2.5.19.) Hace que los cambios en los directorios de este
sistema de ficheros sean síncronos. (Esta propiedad la pueden
obtener los directorios o subárboles individuales usando
chattr(8).)
- MS_MANDLOCK
- Permite bloqueos obligatorios sobre los ficheros de este sistema de
ficheros. (Los bloqueos obligatorios todavía deben habilitarse
fichero a fichero, de la forma que se describe en fcntl(2).)
- MS_MOVE
- Mueve un subárbol. fuente especifica un punto de montaje
existente y destino especifica la nueva posición. El
movimiento es atómico: en ningún momento se desmonta el
subárbol. Los argumentos tipo_sf, opciones y
datos se ignoran.
- MS_NOATIME
- No actualiza el tiempo de acceso para los ficheros (de cualquier tipo) en
este sistema de ficheros.
- MS_NODEV
- No permite el acceso a los dispositivos (ficheros especiales) en este
sistema de ficheros.
- MS_NODIRATIME
- No actualiza el tiempo de acceso para los directorios en este sistema de
ficheros.
- MS_NOEXEC
- No permite que los programas se ejecuten desde este sistema de
ficheros.
- MS_NOSUID
- No hace caso a los bits set-UID y set-GID cuando se ejecutan programas
desde este sistema de ficheros.
- MS_RDONLY
- Monta el sistema de ficheros para sólo lectura.
- MS_REMOUNT
- Remonta un montaje existente. Esto le permite cambiar el valor de
opciones y datos de un montaje existente sin tener que
desmontar y remontar el sistema de ficheros. fuente y
destino deben ser los mismos valores que los especificados en la
llamada mount() inicial; tipo_sf se ignora.
- MS_SYNCHRONOUS
- Hace que las escrituras en este sistema de ficheros sean síncronos
(como si se hubiera especificado la opción O_SYNC en
open(2) para todos los ficheros abiertos en este sistema de
ficheros).
A partir de la versión 2.4 de Linux, las opciones
MS_NODEV, MS_NOEXEC y MS_NOSUID se pueden configurar
individualmente para cada punto de montaje.
El argumento datos es interpretado por los diferentes
sistemas de ficheros. Normalmente es una cadena de opciones separadas por
comas que entiende este sistema de ficheros. Consulte mount(8) para
ver más detalles de las opciones disponibles para cada tipo de
sistema de ficheros.
La versión 2.1.116 de Linux añadió la llamada
al sistema umount2() que, como umount(), desmonta un destino
pero permite especificar opciones adicionales que controlen el
comportamiento de la operación:
- MNT_FORCE
- Fuerza el desmontaje aunque el sistema de ficheros esté ocupado.
(Desde 2.1.116. Sólo para montajes NFS.)
- MNT_DETACH
- Realiza un desmontaje «perezoso»: hace que el punto de
montaje deje de estar disponible para nuevos accesos y realmente realiza
el desmontaje cuando el punto de montaje deja de estar ocupado. (Desde
2.4.11.)
En caso de éxito se devuelve 0. En caso de error, -1, y se
da a errno un valor apropiado.
Los valores de error dados más abajo son independientes del
tipo de sistema de ficheros. Cada tipo de sistemas de ficheros puede tener
sus propios errores especiales y comportamiento. Consulte los fuentes del
núcleo para los detalles.
- EPERM
- El usuario no es el super-usuario.
- ENODEV
- tipo_sf no configurado en el núcleo.
- ENOTBLK
- fuente no es un dispositivo de bloques (y se necesitaba un
dispositivo).
- EBUSY
- fuente ya está montado. O no puede remontarse para lectura
exclusiva, porque ya contiene ficheros abiertos para escritura. O no puede
montarse en destino porque destino ya está ocupado
(es el directorio de trabajo de alguna tarea, el punto de montaje de otro
dispositivo, tiene ficheros abiertos, etc.). O no puede desmontarse porque
está ocupado.
- EINVAL
- fuente tiene un superbloque inválido. O se ha intentado
volver a montar, pero fuente no estaba ya montado en
destino. O se ha intentando mover fuente cuando ésta
no es un punto de montaje o es '/'. O se ha intentado desmontar, pero
destino no era un punto de montaje.
- ENOTDIR
- El segundo argumento, o un prefijo del primero, no es un directorio.
- EFAULT
- Uno de los argumentos de tipo puntero apunta fuera del espacio de
direcciones de usuario.
- ENOMEM
- El núcleo no pudo obtener una página libre para copiar en
ella nombres de ficheros o datos.
- ENAMETOOLONG
- Un nombre de ruta era más largo que MAXPATHLEN.
- ENOENT
- Un nombre de camino estaba vacío o tenía un componente
inexistente.
- ELOOP
- Se han encontrado demasiados enlaces durante la resolución de la
ruta. O se ha intentado un movimiento cuando destino es un
descendiente de fuente.
- EACCES
- No se pudo acceder a un componente de una ruta.
O se intentó montar un sistema de ficheros para lectura exclusiva sin
dar la opción MS_RDONLY.
O el dispositivo de bloques fuente estaba en un sistema de ficheros
montado con la opción MS_NODEV.
- ENXIO
- El número mayor del dispositivo de bloques fuente
está fuera de rango.
- EMFILE
- (En caso de que no se necesite un dispositivo de bloques:) La tabla de
dispositivos ficticios está llena.
Estas funciones son específicas de Linux y no
deberían emplearse en programas pretendidamente transportables.
La función umount original se invocaba como
umount(dispositivo) y devolvía ENOTBLK cuando se invocaba con
algo distinto a un dispositivo de bloques. En la versión 0.98p4 de
Linux se añadió la llamada umount(dir) para dar soporte
a los dispositivos anónimos. En Linux 2.3.99-pre7 se eliminó
la llamada umount(dispositivo), dejando sólo
umount(dir) (ya que ahora los dispositivos se pueden montar en
más de un lugar, por lo que especificar el dispositivo no es
suficiente).
La opción MS_SYNC original se renombró a
MS_SYNCHRONOUS en la versión 1.1.69 cuando se añadió un
MS_SYNC diferente a <mman.h>.
Antes de la versión 2.4 de Linux, cualquier intento por
ejecutar un programa set-UID o set-GID sobre un sistema de ficheros montado
con MS_NOSUID fallaba dando el error EPERM. Desde la
versión 2.4, los bits set-UID y set-GID simplemente se ignoran de
forma silenciosa en este caso.