int
mount(
const char *type
, const char *dir
, int flags
, void *data
, size_t data_len
)
int
unmount(
const char *dir
, int flags
)
)
function grafts
a file system object onto the system file tree
at the point
dir.
The argument
data
describes the file system object to be mounted, and is
data_len
bytes long.
The argument
type
tells the kernel how to interpret
data
(See
type
below).
The contents of the file system
become available through the new mount point
dir.
Any files in
dir
at the time
of a successful mount are swept under the carpet so to speak, and
are unavailable until the file system is unmounted.
The following flags may be specified to suppress default semantics which affect file system access.
MNT_RDONLY
MNT_UNION
MNT_HIDDEN
MNT_NOEXEC
MNT_NOSUID
MNT_NODEV
MNT_NOCOREDUMP
MNT_NOATIME
MNT_NODEVMTIME
MNT_SYMPERM
MNT_SYNCHRONOUS
MNT_ASYNC
MNT_SOFTDEP
MNT_ASYNC
nor
MNT_SYNCHRONOUS
,
by carefully sequencing meta-data writes to achieve the
effect achieved by a default mount causing many meta-data
writes to be synchronous.
MNT_LOG
MNT_SOFTDEP
.
MNT_LOG
causes a journal (or log) to be created in the
filesystem, creating a record of meta-data writes to be
performed, allowing the actual writes to be deferred.
This improves performance in most cases.
The
MNT_UPDATE
,
MNT_RELOAD
,
and
MNT_GETARGS
flags indicate that the mount command is being applied
to an already mounted file system.
The
MNT_UPDATE
flag allows the mount flags to be changed without requiring
that the file system be unmounted and remounted.
A conversion from read-write to read-only will fail if any files
are currently open for writing on the filesystem, unless the
MNT_FORCE
flag is also applied.
Some file systems may not allow all flags to be changed.
For example,
some file systems will not allow a change from read-write to read-only.
The
MNT_RELOAD
flag causes kernel filesystem data to be reloaded from
the filesystem device.
It is only permitted on filesystems mounted read-only.
Its purpose is to notify the system that the filesystem
data has been modified by some external process.
The
MNT_GETARGS
flag does not alter any of the mounted filesystem's properties,
but returns the filesystem-specific arguments for the currently mounted
filesystem.
The
type
argument defines the type of the file system.
The types of file systems known to the system are defined in
<sys/mount.h
>,
and those supported by the current running kernel obtained
using
sysctl(8)
to obtain the node
vfs.generic.fstypes.
data
is a pointer to a structure that contains the type
specific arguments to mount.
Some of the currently supported types of file systems and
their type specific data are:
MOUNT_FFS
struct ufs_args {
char *fspec; /* block special file to mount */
};
MOUNT_NFS
struct nfs_args {
int version; /* args structure version */
struct sockaddr *addr; /* file server address */
int addrlen; /* length of address */
int sotype; /* Socket type */
int proto; /* and Protocol */
u_char *fh; /* File handle to be mounted */
int fhsize; /* Size, in bytes, of fh */
int flags; /* flags */
int wsize; /* write size in bytes */
int rsize; /* read size in bytes */
int readdirsize; /* readdir size in bytes */
int timeo; /* initial timeout in .1 secs */
int retrans; /* times to retry send */
int maxgrouplist; /* Max. size of group list */
int readahead; /* # of blocks to readahead */
int leaseterm; /* Term (sec) of lease */
int deadthresh; /* Retrans threshold */
char *hostname; /* server's name */
};
MOUNT_MFS
struct mfs_args {
char *fspec; /* name to export for statfs */
struct export_args30 pad; /* unused */
caddr_t base; /* base of file system in mem */
u_long size; /* size of file system */
};
The
unmount()
function call disassociates the file system from the specified
mount point
dir
.
The
flags
argument may specify
MNT_FORCE
to specify that the file system should be forcibly unmounted even if files are
still active.
Active special devices continue to work,
but any further accesses to any other active files result in errors
even if the file system is later remounted.
)
returns the value 0 if the mount was successful,
the number of bytes written to
data
for
MNT_GETARGS
,
otherwise -1 is returned and the variable
errno
is set to indicate the error.
unmount()
returns the value 0 if the unmount succeeded; otherwise -1 is returned
and the variable
errno
is set to indicate the error.
)
will fail when one of the following occurs:
EBUSY
]
dir
,
or for an update from read-write to read-only
there are files on the filesystem open for writes.
EFAULT
]
dir
points outside the process's allocated address space.
ELOOP
]
ENAMETOOLONG
]
NAME_MAX
characters, or an entire path name exceeded
PATH_MAX
characters.
ENOENT
]
dir
does not exist.
ENOTDIR
]
EPERM
]The following errors can occur for a ufs file system mount:
EBUSY
]
EFAULT
]
EINVAL
]
EIO
]
EMFILE
]
ENODEV
]
ENOMEM
]
ENOTBLK
]
ENXIO
]The following errors can occur for a nfs file system mount:
EFAULT
]
ETIMEDOUT
]The following errors can occur for a mfs file system mount:
EFAULT
]
EINVAL
]
EIO
]
EMFILE
]
ENOMEM
]
unmount()
may fail with one of the following errors:
EBUSY
]
EFAULT
]
dir
points outside the process's allocated address space.
EINVAL
]
EIO
]
ELOOP
]
ENAMETOOLONG
]
NAME_MAX
characters, or an entire path name exceeded
PATH_MAX
characters.
ENOTDIR
]
EPERM
]A ufs or mfs mount can also fail if the maximum number of file systems are currently mounted.
)
and
umount(
)
(now
unmount(
))
function calls were all present in
Version 6 AT&T UNIX
.
Prior to
NetBSD4.0
the
mount
call was used to export NFS filesystems.
This is now done through
nfssvc().
The
data_len
argument was added for
NetBSD5.0.
Far more filesystems are supported than those those listed.