blob: fc1ea3ad505fcab1870bd9cb0f55309ede2b2f1a [file] [log] [blame]
<html lang="en">
<head>
<title>mtab - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Mount-Information.html#Mount-Information" title="Mount Information">
<link rel="prev" href="fstab.html#fstab" title="fstab">
<link rel="next" href="Other-Mount-Information.html#Other-Mount-Information" title="Other Mount Information">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.
This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).
Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below. A
copy of the license is included in the section entitled "GNU Free
Documentation License".
(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual. Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="mtab"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Other-Mount-Information.html#Other-Mount-Information">Other Mount Information</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="fstab.html#fstab">fstab</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Mount-Information.html#Mount-Information">Mount Information</a>
<hr>
</div>
<h5 class="subsubsection">30.3.1.2 The <samp><span class="file">mtab</span></samp> file</h5>
<p>The following functions and data structure access the <samp><span class="file">mtab</span></samp> file.
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Data Type: <b>struct mntent</b><var><a name="index-struct-mntent-3475"></a></var><br>
<blockquote><p>This structure is used with the <code>getmntent</code>, <code>getmntent_t</code>,
<code>addmntent</code>, and <code>hasmntopt</code> functions.
<dl>
<dt><code>char *mnt_fsname</code><dd>This element contains a pointer to a string describing the name of the
special device from which the filesystem is mounted. It corresponds to
the <code>fs_spec</code> element in <code>struct fstab</code>.
<br><dt><code>char *mnt_dir</code><dd>This element points to a string describing the mount point of the
filesystem. It corresponds to the <code>fs_file</code> element in
<code>struct fstab</code>.
<br><dt><code>char *mnt_type</code><dd><code>mnt_type</code> describes the filesystem type and is therefore
equivalent to <code>fs_vfstype</code> in <code>struct fstab</code>. <samp><span class="file">mntent.h</span></samp>
defines a few symbolic names for some of the values this string can have.
But since the kernel can support arbitrary filesystems it does not
make much sense to give them symbolic names. If one knows the symbol
name one also knows the filesystem name. Nevertheless here follows the
list of the symbols provided in <samp><span class="file">mntent.h</span></samp>.
<dl>
<dt><code>MNTTYPE_IGNORE</code><a name="index-MNTTYPE_005fIGNORE-3476"></a><dd>This symbol expands to <code>"ignore"</code>. The value is sometime used in
<samp><span class="file">fstab</span></samp> files to make sure entries are not used without removing them.
<br><dt><code>MNTTYPE_NFS</code><a name="index-MNTTYPE_005fNFS-3477"></a><dd>Expands to <code>"nfs"</code>. Using this macro sometimes could make sense
since it names the default NFS implementation, in case both version 2
and 3 are supported.
<br><dt><code>MNTTYPE_SWAP</code><a name="index-MNTTYPE_005fSWAP-3478"></a><dd>This symbol expands to <code>"swap"</code>. It names the special <samp><span class="file">fstab</span></samp>
entry which names one of the possibly multiple swap partitions.
</dl>
<br><dt><code>char *mnt_opts</code><dd>The element contains a string describing the options used while mounting
the filesystem. As for the equivalent element <code>fs_mntops</code> of
<code>struct fstab</code> it is best to use the function <code>getsubopt</code>
(see <a href="Suboptions.html#Suboptions">Suboptions</a>) to access the parts of this string.
<p>The <samp><span class="file">mntent.h</span></samp> file defines a number of macros with string values
which correspond to some of the options understood by the kernel. There
might be many more options which are possible so it doesn't make much sense
to rely on these macros but to be consistent here is the list:
<dl>
<dt><code>MNTOPT_DEFAULTS</code><a name="index-MNTOPT_005fDEFAULTS-3479"></a><dd>Expands to <code>"defaults"</code>. This option should be used alone since it
indicates all values for the customizable values are chosen to be the
default.
<br><dt><code>MNTOPT_RO</code><a name="index-MNTOPT_005fRO-3480"></a><dd>Expands to <code>"ro"</code>. See the <code>FSTAB_RO</code> value, it means the
filesystem is mounted read-only.
<br><dt><code>MNTOPT_RW</code><a name="index-MNTOPT_005fRW-3481"></a><dd>Expand to <code>"rw"</code>. See the <code>FSTAB_RW</code> value, it means the
filesystem is mounted with read and write permissions.
<br><dt><code>MNTOPT_SUID</code><a name="index-MNTOPT_005fSUID-3482"></a><dd>Expands to <code>"suid"</code>. This means that the SUID bit (see <a href="How-Change-Persona.html#How-Change-Persona">How Change Persona</a>) is respected when a program from the filesystem is
started.
<br><dt><code>MNTOPT_NOSUID</code><a name="index-MNTOPT_005fNOSUID-3483"></a><dd>Expands to <code>"nosuid"</code>. This is the opposite of <code>MNTOPT_SUID</code>,
the SUID bit for all files from the filesystem is ignored.
<br><dt><code>MNTOPT_NOAUTO</code><a name="index-MNTOPT_005fNOAUTO-3484"></a><dd>Expands to <code>"noauto"</code>. At startup time the <code>mount</code> program
will ignore this entry if it is started with the <code>-a</code> option to
mount all filesystems mentioned in the <samp><span class="file">fstab</span></samp> file.
</dl>
<p>As for the <code>FSTAB_*</code> entries introduced above it is important to
use <code>strcmp</code> to check for equality.
<br><dt><code>mnt_freq</code><dd>This elements corresponds to <code>fs_freq</code> and also specifies the
frequency in days in which dumps are made.
<br><dt><code>mnt_passno</code><dd>This element is equivalent to <code>fs_passno</code> with the same meaning
which is uninteresting for all programs beside <code>dump</code>.
</dl>
</p></blockquote></div>
<p>For accessing the <samp><span class="file">mtab</span></samp> file there is again a set of three
functions to access all entries in a row. Unlike the functions to
handle <samp><span class="file">fstab</span></samp> these functions do not access a fixed file and there
is even a thread safe variant of the get function. Beside this the GNU
libc contains functions to alter the file and test for specific options.
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: FILE * <b>setmntent</b> (<var>const char *file, const char *mode</var>)<var><a name="index-setmntent-3485"></a></var><br>
<blockquote><p>The <code>setmntent</code> function prepares the file named <var>FILE</var> which
must be in the format of a <samp><span class="file">fstab</span></samp> and <samp><span class="file">mtab</span></samp> file for the
upcoming processing through the other functions of the family. The
<var>mode</var> parameter can be chosen in the way the <var>opentype</var>
parameter for <code>fopen</code> (see <a href="Opening-Streams.html#Opening-Streams">Opening Streams</a>) can be chosen. If
the file is opened for writing the file is also allowed to be empty.
<p>If the file was successfully opened <code>setmntent</code> returns a file
descriptor for future use. Otherwise the return value is <code>NULL</code>
and <code>errno</code> is set accordingly.
</p></blockquote></div>
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>endmntent</b> (<var>FILE *stream</var>)<var><a name="index-endmntent-3486"></a></var><br>
<blockquote><p>This function takes for the <var>stream</var> parameter a file handle which
previously was returned from the <code>setmntent</code> call.
<code>endmntent</code> closes the stream and frees all resources.
<p>The return value is 1 unless an error occurred in which case it
is 0.
</p></blockquote></div>
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: struct mntent * <b>getmntent</b> (<var>FILE *stream</var>)<var><a name="index-getmntent-3487"></a></var><br>
<blockquote><p>The <code>getmntent</code> function takes as the parameter a file handle
previously returned by successful call to <code>setmntent</code>. It returns
a pointer to a static variable of type <code>struct mntent</code> which is
filled with the information from the next entry from the file currently
read.
<p>The file format used prescribes the use of spaces or tab characters to
separate the fields. This makes it harder to use name containing one
of these characters (e.g., mount points using spaces). Therefore
these characters are encoded in the files and the <code>getmntent</code>
function takes care of the decoding while reading the entries back in.
<code>'\040'</code> is used to encode a space character, <code>'\011'</code> to
encode a tab character, <code>'\012'</code> to encode a newline character,
and <code>'\\'</code> to encode a backslash.
<p>If there was an error or the end of the file is reached the return value
is <code>NULL</code>.
<p>This function is not thread-safe since all calls to this function return
a pointer to the same static variable. <code>getmntent_r</code> should be
used in situations where multiple threads access the file.
</p></blockquote></div>
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: struct mntent * <b>getmntent_r</b> (<var>FILE *stream, struct mentent *result, char *buffer, int bufsize</var>)<var><a name="index-getmntent_005fr-3488"></a></var><br>
<blockquote><p>The <code>getmntent_r</code> function is the reentrant variant of
<code>getmntent</code>. It also returns the next entry from the file and
returns a pointer. The actual variable the values are stored in is not
static, though. Instead the function stores the values in the variable
pointed to by the <var>result</var> parameter. Additional information (e.g.,
the strings pointed to by the elements of the result) are kept in the
buffer of size <var>bufsize</var> pointed to by <var>buffer</var>.
<p>Escaped characters (space, tab, backslash) are converted back in the
same way as it happens for <code>getmentent</code>.
<p>The function returns a <code>NULL</code> pointer in error cases. Errors could be:
<ul>
<li>error while reading the file,
<li>end of file reached,
<li><var>bufsize</var> is too small for reading a complete new entry.
</ul>
</p></blockquote></div>
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: int <b>addmntent</b> (<var>FILE *stream, const struct mntent *mnt</var>)<var><a name="index-addmntent-3489"></a></var><br>
<blockquote><p>The <code>addmntent</code> function allows adding a new entry to the file
previously opened with <code>setmntent</code>. The new entries are always
appended. I.e., even if the position of the file descriptor is not at
the end of the file this function does not overwrite an existing entry
following the current position.
<p>The implication of this is that to remove an entry from a file one has
to create a new file while leaving out the entry to be removed and after
closing the file remove the old one and rename the new file to the
chosen name.
<p>This function takes care of spaces and tab characters in the names to be
written to the file. It converts them and the backslash character into
the format describe in the <code>getmntent</code> description above.
<p>This function returns 0 in case the operation was successful.
Otherwise the return value is 1 and <code>errno</code> is set
appropriately.
</p></blockquote></div>
<!-- mntent.h -->
<!-- BSD -->
<div class="defun">
&mdash; Function: char * <b>hasmntopt</b> (<var>const struct mntent *mnt, const char *opt</var>)<var><a name="index-hasmntopt-3490"></a></var><br>
<blockquote><p>This function can be used to check whether the string pointed to by the
<code>mnt_opts</code> element of the variable pointed to by <var>mnt</var> contains
the option <var>opt</var>. If this is true a pointer to the beginning of the
option in the <code>mnt_opts</code> element is returned. If no such option
exists the function returns <code>NULL</code>.
<p>This function is useful to test whether a specific option is present but
when all options have to be processed one is better off with using the
<code>getsubopt</code> function to iterate over all options in the string.
</p></blockquote></div>
</body></html>