]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/sysinfo.texi
Update.
[thirdparty/glibc.git] / manual / sysinfo.texi
CommitLineData
faf2289f
UD
1@node System Management, System Configuration, Users and Groups, Top
2@c %MENU% Controlling the system and getting information about it
3@chapter System Management
4
5This chapter describes facilities for controlling the system that
6underlies a process (including the operating system and hardware) and
7for getting information about it. Anyone can generally use the
8informational facilities, but usually only a properly privileged process
9can make changes.
28f540f4 10
28f540f4
RM
11
12@menu
13* Host Identification:: Determining the name of the machine.
99a20616
UD
14* Platform Type:: Determining operating system and basic
15 machine type
faf2289f 16* Filesystem Handling:: Controlling/querying mounts
4b9a6d7c 17* System Parameters:: Getting and setting various system parameters
28f540f4
RM
18@end menu
19
faf2289f
UD
20To get information on parameters of the system that are built into the
21system, such as the maximum length of a filename, @ref{System
22Configuration}.
28f540f4
RM
23
24@node Host Identification
25@section Host Identification
26
4b9a6d7c
UD
27This section explains how to identify the particular system on which your
28program is running. First, let's review the various ways computer systems
29are named, which is a little complicated because of the history of the
30development of the Internet.
31
32Every Unix system (also known as a host) has a host name, whether it's
33connected to a network or not. In its simplest form, as used before
34computer networks were an issue, it's just a word like @samp{chicken}.
35@cindex host name
36
37But any system attached to the Internet or any network like it conforms
38to a more rigorous naming convention as part of the Domain Name System
39(DNS). In DNS, every host name is composed of two parts:
40@cindex DNS
41@cindex Domain Name System
42
43@enumerate
44@item
68979757 45hostname
4b9a6d7c
UD
46@cindex hostname
47@item
48domain name
49@cindex domain name
50@end enumerate
51
52You will note that ``hostname'' looks a lot like ``host name'', but is
53not the same thing, and that people often incorrectly refer to entire
54host names as ``domain names.''
55
68979757 56In DNS, the full host name is properly called the FQDN (Fully Qualified
4b9a6d7c
UD
57Domain Name) and consists of the hostname, then a period, then the
58domain name. The domain name itself usually has multiple components
59separated by periods. So for example, a system's hostname may be
68979757 60@samp{chicken} and its domain name might be @samp{ai.mit.edu}, so
4b9a6d7c
UD
61its FQDN (which is its host name) is @samp{chicken.ai.mit.edu}.
62@cindex FQDN
63
64Adding to the confusion, though, is that DNS is not the only name space
68979757 65in which a computer needs to be known. Another name space is the
4b9a6d7c
UD
66NIS (aka YP) name space. For NIS purposes, there is another domain
67name, which is called the NIS domain name or the YP domain name. It
68need not have anything to do with the DNS domain name.
69@cindex YP
70@cindex NIS
71@cindex NIS domain name
72@cindex YP domain name
73
74Confusing things even more is the fact that in DNS, it is possible for
75multiple FQDNs to refer to the same system. However, there is always
76exactly one of them that is the true host name, and it is called the
68979757 77canonical FQDN.
4b9a6d7c
UD
78
79In some contexts, the host name is called a ``node name.''
80
81For more information on DNS host naming, @xref{Host Names}.
28f540f4
RM
82
83@pindex hostname
84@pindex hostid
85@pindex unistd.h
68979757 86Prototypes for these functions appear in @file{unistd.h}.
4b9a6d7c
UD
87
88The programs @code{hostname}, @code{hostid}, and @code{domainname} work
89by calling these functions.
28f540f4
RM
90
91@comment unistd.h
92@comment BSD
93@deftypefun int gethostname (char *@var{name}, size_t @var{size})
4b9a6d7c
UD
94This function returns the host name of the system on which it is called,
95in the array @var{name}. The @var{size} argument specifies the size of
96this array, in bytes. Note that this is @emph{not} the DNS hostname.
97If the system participates in DNS, this is the FQDN (see above).
28f540f4
RM
98
99The return value is @code{0} on success and @code{-1} on failure. In
100the GNU C library, @code{gethostname} fails if @var{size} is not large
101enough; then you can try again with a larger array. The following
102@code{errno} error condition is defined for this function:
103
104@table @code
105@item ENAMETOOLONG
106The @var{size} argument is less than the size of the host name plus one.
107@end table
108
109@pindex sys/param.h
110On some systems, there is a symbol for the maximum possible host name
111length: @code{MAXHOSTNAMELEN}. It is defined in @file{sys/param.h}.
112But you can't count on this to exist, so it is cleaner to handle
113failure and try again.
114
115@code{gethostname} stores the beginning of the host name in @var{name}
116even if the host name won't entirely fit. For some purposes, a
117truncated host name is good enough. If it is, you can ignore the
118error code.
119@end deftypefun
120
121@comment unistd.h
122@comment BSD
123@deftypefun int sethostname (const char *@var{name}, size_t @var{length})
4b9a6d7c
UD
124The @code{sethostname} function sets the host name of the system that
125calls it to @var{name}, a string with length @var{length}. Only
126privileged processes are permitted to do this.
127
128Usually @code{sethostname} gets called just once, at system boot time.
129Often, the program that calls it sets it to the value it finds in the
130file @code{/etc/hostname}.
131@cindex /etc/hostname
132
133Be sure to set the host name to the full host name, not just the DNS
134hostname (see above).
28f540f4
RM
135
136The return value is @code{0} on success and @code{-1} on failure.
137The following @code{errno} error condition is defined for this function:
138
139@table @code
140@item EPERM
141This process cannot set the host name because it is not privileged.
142@end table
143@end deftypefun
144
4b9a6d7c
UD
145@comment unistd.h
146@comment ???
147@deftypefun int getdomainnname (char *@var{name}, size_t @var{length})
148@cindex NIS domain name
149@cindex YP domain name
150
151@code{getdomainname} returns the NIS (aka YP) domain name of the system
152on which it is called. Note that this is not the more popular DNS
153domain name. Get that with @code{gethostname}.
154
155The specifics of this function are analogous to @code{gethostname}, above.
156
157@end deftypefun
158
159@comment unistd.h
160@comment ???
87b56f36 161@deftypefun int setdomainname (const char *@var{name}, size_t @var{length})
4b9a6d7c
UD
162@cindex NIS domain name
163@cindex YP domain name
164
165@code{getdomainname} sets the NIS (aka YP) domain name of the system
166on which it is called. Note that this is not the more popular DNS
167domain name. Set that with @code{sethostname}.
168
169The specifics of this function are analogous to @code{sethostname}, above.
170
171@end deftypefun
172
28f540f4
RM
173@comment unistd.h
174@comment BSD
175@deftypefun {long int} gethostid (void)
176This function returns the ``host ID'' of the machine the program is
4b9a6d7c 177running on. By convention, this is usually the primary Internet IP address
04b9968b 178of that machine, converted to a @w{@code{long int}}. However, on some
28f540f4
RM
179systems it is a meaningless but unique number which is hard-coded for
180each machine.
4b9a6d7c
UD
181
182This is not widely used. It arose in BSD 4.2, but was dropped in BSD 4.4.
183It is not required by POSIX.
184
185The proper way to query the IP address is to use @code{gethostbyname}
186on the results of @code{gethostname}. For more information on IP addresses,
187@xref{Host Addresses}.
28f540f4
RM
188@end deftypefun
189
190@comment unistd.h
191@comment BSD
192@deftypefun int sethostid (long int @var{id})
193The @code{sethostid} function sets the ``host ID'' of the host machine
4b9a6d7c 194to @var{id}. Only privileged processes are permitted to do this. Usually
28f540f4
RM
195it happens just once, at system boot time.
196
4b9a6d7c 197The proper way to establish the primary IP address of a system
68979757 198is to configure the IP address resolver to associate that IP address with
4b9a6d7c
UD
199the system's host name as returned by @code{gethostname}. For example,
200put a record for the system in @file{/etc/hosts}.
201
202See @code{gethostid} above for more information on host ids.
203
28f540f4 204The return value is @code{0} on success and @code{-1} on failure.
04b9968b 205The following @code{errno} error conditions are defined for this function:
28f540f4
RM
206
207@table @code
208@item EPERM
209This process cannot set the host name because it is not privileged.
210
211@item ENOSYS
212The operating system does not support setting the host ID. On some
213systems, the host ID is a meaningless but unique number hard-coded for
214each machine.
215@end table
216@end deftypefun
217
99a20616
UD
218@node Platform Type
219@section Platform Type Identification
28f540f4
RM
220
221You can use the @code{uname} function to find out some information about
222the type of computer your program is running on. This function and the
223associated data type are declared in the header file
224@file{sys/utsname.h}.
225@pindex sys/utsname.h
226
68979757 227As a bonus, @code{uname} also gives some information identifying the
4b9a6d7c 228particular system your program is running on. This is the same information
68979757 229which you can get with functions targetted to this purpose described in
4b9a6d7c
UD
230@ref{Host Identification}.
231
232
28f540f4
RM
233@comment sys/utsname.h
234@comment POSIX.1
235@deftp {Data Type} {struct utsname}
236The @code{utsname} structure is used to hold information returned
237by the @code{uname} function. It has the following members:
238
239@table @code
240@item char sysname[]
241This is the name of the operating system in use.
242
28f540f4
RM
243@item char release[]
244This is the current release level of the operating system implementation.
245
246@item char version[]
247This is the current version level within the release of the operating
248system.
249
250@item char machine[]
251This is a description of the type of hardware that is in use.
252
253Some systems provide a mechanism to interrogate the kernel directly for
254this information. On systems without such a mechanism, the GNU C
255library fills in this field based on the configuration name that was
256specified when building and installing the library.
257
258GNU uses a three-part name to describe a system configuration; the three
259parts are @var{cpu}, @var{manufacturer} and @var{system-type}, and they
260are separated with dashes. Any possible combination of three names is
261potentially meaningful, but most such combinations are meaningless in
262practice and even the meaningful ones are not necessarily supported by
263any particular GNU program.
264
265Since the value in @code{machine} is supposed to describe just the
266hardware, it consists of the first two parts of the configuration name:
267@samp{@var{cpu}-@var{manufacturer}}. For example, it might be one of these:
268
269@quotation
37742e84 270@code{"sparc-sun"},
28f540f4 271@code{"i386-@var{anything}"},
37742e84 272@code{"m68k-hp"},
28f540f4
RM
273@code{"m68k-sony"},
274@code{"m68k-sun"},
275@code{"mips-dec"}
276@end quotation
4b9a6d7c
UD
277
278@item char nodename[]
279This is the host name of this particular computer. In the GNU C
280library, the value is the same as that returned by @code{gethostname};
281see @ref{Host Identification}.
282
283@ gethostname() is implemented with a call to uname().
284
285@item char domainname[]
286This is the NIS or YP domain name. It is the same value returned by
68979757 287@code{getdomainname}; see @ref{Host Identification}. This element
4b9a6d7c
UD
288is a relatively recent invention and use of it is not as portable as
289use of the rest of the structure.
290
291@c getdomainname() is implemented with a call to uname().
292
28f540f4
RM
293@end table
294@end deftp
295
296@comment sys/utsname.h
297@comment POSIX.1
298@deftypefun int uname (struct utsname *@var{info})
299The @code{uname} function fills in the structure pointed to by
300@var{info} with information about the operating system and host machine.
301A non-negative value indicates that the data was successfully stored.
302
303@code{-1} as the value indicates an error. The only error possible is
304@code{EFAULT}, which we normally don't mention as it is always a
305possibility.
306@end deftypefun
37742e84
UD
307
308
faf2289f 309@node Filesystem Handling
99a20616 310@section Controlling and Querying Mounts
faf2289f
UD
311
312All files are in filesystems, and before you can access any file, its
313filesystem must be mounted. Because of Unix's concept of
314@emph{Everything is a file}, mounting of filesystems is central to doing
315almost anything. This section explains how to find out what filesystems
316are currently mounted and what filesystems are available for mounting,
317and how to change what is mounted.
318
319The classic filesystem is the contents of a disk drive. The concept is
320considerably more abstract, though, and lots of things other than disk
dbacafe5 321drives can be mounted.
faf2289f
UD
322
323Some block devices don't correspond to traditional devices like disk
324drives. For example, a loop device is a block device whose driver uses
325a regular file in another filesystem as its medium. So if that regular
326file contains appropriate data for a filesystem, you can by mounting the
327loop device essentially mount a regular file.
328
329Some filesystems aren't based on a device of any kind. The ``proc''
330filesystem, for example, contains files whose data is made up by the
331filesystem driver on the fly whenever you ask for it. And when you
332write to it, the data you write causes changes in the system. No data
333gets stored.
334
335@c It would be good to mention NFS mounts here.
336
337@menu
338* Mount Information:: What is or could be mounted?
99a20616 339* Mount-Unmount-Remount:: Controlling what is mounted and how
faf2289f 340@end menu
37742e84 341
99a20616 342@node Mount Information, Mount-Unmount-Remount, , Filesystem Handling
f126ef67 343@subsection Mount Information
faf2289f
UD
344
345For some programs it is desirable and necessary to access information
346about whether a certain filesystem is mounted and, if it is, where, or
347simply to get lists of all the available filesystems. The GNU libc
348provides some functions to retrieve this information portably.
37742e84
UD
349
350Traditionally Unix systems have a file named @file{/etc/fstab} which
351describes all possibly mounted filesystems. The @code{mount} program
352uses this file to mount at startup time of the system all the necessary
353filesystems. The information about all the filesystems actually mounted
c756c71c
UD
354is normally kept in a file named @file{/etc/mtab}. Both files share
355the same syntax and it is crucial that this syntax is followed all the
37742e84
UD
356time. Therefore it is best to never directly write the files. The
357functions described in this section can do this and they also provide
358the functionality to convert the external textual representation to the
359internal representation.
360
faf2289f
UD
361Note that the @file{fstab} and @file{mtab} files are maintained on a
362system by @emph{convention}. It is possible for the files not to exist
363or not to be consistent with what is really mounted or available to
364mount, if the system's administration policy allows it. But programs
365that mount and unmount filesystems typically maintain and use these
366files as described herein.
367
37742e84
UD
368@vindex _PATH_FSTAB
369@vindex _PATH_MNTTAB
370@vindex FSTAB
371@vindex _PATH_MOUNTED
372The filenames given above should never be used directly. The portable
373way to handle these file is to use the macros @code{_PATH_FSTAB},
c756c71c 374defined in @file{fstab.h} and @code{_PATH_MNTTAB}, defined in
37742e84
UD
375@file{mntent.h}, respectively. There are also two alternate macro names
376@code{FSTAB} and @code{_PATH_MOUNTED} defined but both names are
c756c71c
UD
377deprecated and kept only for backward compatibility. The two former
378names should always be used.
37742e84 379
faf2289f
UD
380@menu
381* fstab:: The @file{fstab} file
382* mtab:: The @file{mtab} file
383* Other Mount Information:: Other (non-libc) sources of mount information
384@end menu
385
386@node fstab
f126ef67 387@subsubsection The @file{fstab} file
faf2289f 388
37742e84
UD
389The internal representation for entries of the file is @w{@code{struct
390fstab}}, defined in @file{fstab.h}.
391
392@comment fstab.h
393@comment BSD
394@deftp {Data Type} {struct fstab}
395This structure is used with the @code{getfsent}, @code{getfsspec}, and
396@code{getfsfile} functions.
397
398@table @code
399@item char *fs_spec
fed8f7f7 400This element describes the device from which the filesystem is mounted.
37742e84
UD
401Normally this is the name of a special device, such as a hard disk
402partition, but it could also be a more or less generic string. For
403@dfn{NFS} it would be a hostname and directory name combination.
404
405Even though the element is not declared @code{const} it shouldn't be
406modified. The missing @code{const} has historic reasons, since this
407function predates @w{ISO C}. The same is true for the other string
408elements of this structure.
409
410@item char *fs_file
fed8f7f7
UD
411This describes the mount point on the local system. I.e., accessing any
412file in this filesystem has implicitly or explicitly this string as a
37742e84
UD
413prefix.
414
415@item char *fs_vfstype
416This is the type of the filesystem. Depending on what the underlying
417kernel understands it can be any string.
418
419@item char *fs_mntops
420This is a string containing options passed to the kernel with the
421@code{mount} call. Again, this can be almost anything. There can be
422more than one option, separated from the others by a comma. Each option
423consists of a name and an optional value part, introduced by an @code{=}
424character.
425
04b9968b 426If the value of this element must be processed it should ideally be done
37742e84
UD
427using the @code{getsubopt} function; see @ref{Suboptions}.
428
429@item const char *fs_type
c756c71c 430This name is poorly chosen. This element points to a string (possibly
37742e84
UD
431in the @code{fs_mntops} string) which describes the modes with which the
432filesystem is mounted. @file{fstab} defines five macros to describe the
433possible values:
434
435@vtable @code
436@item FSTAB_RW
437The filesystems gets mounted with read and write enabled.
438@item FSTAB_RQ
439The filesystems gets mounted with read and write enabled. Write access
440is restricted by quotas.
441@item FSTAB_RO
c756c71c 442The filesystem gets mounted read-only.
37742e84 443@item FSTAB_SW
c756c71c 444This is not a real filesystem, it is a swap device.
37742e84
UD
445@item FSTAB_XX
446This entry from the @file{fstab} file is totally ignored.
447@end vtable
448
449Testing for equality with these value must happen using @code{strcmp}
c756c71c 450since these are all strings. Comparing the pointer will probably always
37742e84
UD
451fail.
452
453@item int fs_freq
454This element describes the dump frequency in days.
455
456@item int fs_passno
457This element describes the pass number on parallel dumps. It is closely
c756c71c 458related to the @code{dump} utility used on Unix systems.
37742e84
UD
459@end table
460@end deftp
461
462
463To read the entire content of the of the @file{fstab} file the GNU libc
464contains a set of three functions which are designed in the usual way.
465
466@comment fstab.h
467@comment BSD
468@deftypefun int setfsent (void)
469This function makes sure that the internal read pointer for the
470@file{fstab} file is at the beginning of the file. This is done by
471either opening the file or resetting the read pointer.
472
473Since the file handle is internal to the libc this function is not
474thread-safe.
475
476This function returns a non-zero value if the operation was successful
477and the @code{getfs*} functions can be used to read the entries of the
478file.
479@end deftypefun
480
481@comment fstab.h
482@comment BSD
483@deftypefun void endfsent (void)
484This function makes sure that all resources acquired by a prior call to
c756c71c 485@code{setfsent} (explicitly or implicitly by calling @code{getfsent}) are
37742e84
UD
486freed.
487@end deftypefun
488
489@comment fstab.h
490@comment BSD
491@deftypefun {struct fstab *} getfsent (void)
492This function returns the next entry of the @file{fstab} file. If this
493is the first call to any of the functions handling @file{fstab} since
494program start or the last call of @code{endfsent}, the file will be
495opened.
496
04b9968b 497The function returns a pointer to a variable of type @code{struct
37742e84
UD
498fstab}. This variable is shared by all threads and therefore this
499function is not thread-safe. If an error occurred @code{getfsent}
c756c71c 500returns a @code{NULL} pointer.
37742e84
UD
501@end deftypefun
502
503@comment fstab.h
504@comment BSD
505@deftypefun {struct fstab *} getfsspec (const char *@var{name})
506This function returns the next entry of the @file{fstab} file which has
507a string equal to @var{name} pointed to by the @code{fs_spec} element.
508Since there is normally exactly one entry for each special device it
509makes no sense to call this function more than once for the same
510argument. If this is the first call to any of the functions handling
511@file{fstab} since program start or the last call of @code{endfsent},
512the file will be opened.
513
04b9968b 514The function returns a pointer to a variable of type @code{struct
37742e84
UD
515fstab}. This variable is shared by all threads and therefore this
516function is not thread-safe. If an error occurred @code{getfsent}
c756c71c 517returns a @code{NULL} pointer.
37742e84
UD
518@end deftypefun
519
520@comment fstab.h
521@comment BSD
522@deftypefun {struct fstab *} getfsfile (const char *@var{name})
523This function returns the next entry of the @file{fstab} file which has
524a string equal to @var{name} pointed to by the @code{fs_file} element.
525Since there is normally exactly one entry for each mount point it
526makes no sense to call this function more than once for the same
527argument. If this is the first call to any of the functions handling
528@file{fstab} since program start or the last call of @code{endfsent},
529the file will be opened.
530
04b9968b 531The function returns a pointer to a variable of type @code{struct
37742e84
UD
532fstab}. This variable is shared by all threads and therefore this
533function is not thread-safe. If an error occurred @code{getfsent}
c756c71c 534returns a @code{NULL} pointer.
37742e84
UD
535@end deftypefun
536
37742e84 537
faf2289f 538@node mtab
f126ef67 539@subsubsection The @file{mtab} file
faf2289f 540The following functions and data structure access the @file{mtab} file.
37742e84 541
faf2289f 542@comment mntent.h
37742e84
UD
543@comment BSD
544@deftp {Data Type} {struct mntent}
545This structure is used with the @code{getmntent}, @code{getmntent_t},
546@code{addmntent}, and @code{hasmntopt} functions.
547
548@table @code
549@item char *mnt_fsname
550This element contains a pointer to a string describing the name of the
551special device from which the filesystem is mounted. It corresponds to
552the @code{fs_spec} element in @code{struct fstab}.
553
554@item char *mnt_dir
555This element points to a string describing the mount point of the
556filesystem. It corresponds to the @code{fs_file} element in
557@code{struct fstab}.
558
559@item char *mnt_type
560@code{mnt_type} describes the filesystem type and is therefore
561equivalent to @code{fs_vfstype} in @code{struct fstab}. @file{mntent.h}
04b9968b
UD
562defines a few symbolic names for some of the values this string can have.
563But since the kernel can support arbitrary filesystems it does not
37742e84
UD
564make much sense to give them symbolic names. If one knows the symbol
565name one also knows the filesystem name. Nevertheless here follows the
04b9968b 566list of the symbols provided in @file{mntent.h}.
37742e84
UD
567
568@vtable @code
569@item MNTTYPE_IGNORE
570This symbol expands to @code{"ignore"}. The value is sometime used in
571@file{fstab} files to make sure entries are not used without removing them.
572@item MNTTYPE_NFS
573Expands to @code{"nfs"}. Using this macro sometimes could make sense
574since it names the default NFS implementation, in case both version 2
575and 3 are supported.
576@item MNTTYPE_SWAP
577This symbol expands to @code{"swap"}. It names the special @file{fstab}
578entry which names one of the possibly multiple swap partitions.
579@end vtable
580
581@item char *mnt_opts
582The element contains a string describing the options used while mounting
583the filesystem. As for the equivalent element @code{fs_mntops} of
584@code{struct fstab} it is best to use the function @code{getsubopt}
585(@pxref{Suboptions}) to access the parts of this string.
586
587The @file{mntent.h} file defines a number of macros with string values
588which correspond to some of the options understood by the kernel. There
04b9968b 589might be many more options which are possible so it doesn't make much sense
37742e84
UD
590to rely on these macros but to be consistent here is the list:
591
592@vtable @code
593@item MNTOPT_DEFAULTS
594Expands to @code{"defaults"}. This option should be used alone since it
49c091e5 595indicates all values for the customizable values are chosen to be the
37742e84
UD
596default.
597@item MNTOPT_RO
fed8f7f7 598Expands to @code{"ro"}. See the @code{FSTAB_RO} value, it means the
37742e84
UD
599filesystem is mounted read-only.
600@item MNTOPT_RW
fed8f7f7 601Expand to @code{"rw"}. See the @code{FSTAB_RW} value, it means the
37742e84
UD
602filesystem is mounted with read and write permissions.
603@item MNTOPT_SUID
604Expands to @code{"suid"}. This means that the SUID bit (@pxref{How
605Change Persona}) is respected when a program from the filesystem is
606started.
607@item MNTOPT_NOSUID
608Expands to @code{"nosuid"}. This is the opposite of @code{MNTOPT_SUID},
c756c71c 609the SUID bit for all files from the filesystem is ignored.
37742e84
UD
610@item MNTOPT_NOAUTO
611Expands to @code{"noauto"}. At startup time the @code{mount} program
612will ignore this entry if it is started with the @code{-a} option to
613mount all filesystems mentioned in the @file{fstab} file.
614@end vtable
615
616As for the @code{FSTAB_*} entries introduced above it is important to
617use @code{strcmp} to check for equality.
618
619@item mnt_freq
620This elements corresponds to @code{fs_freq} and also specifies the
621frequency in days in which dumps are made.
622
623@item mnt_passno
624This element is equivalent to @code{fs_passno} with the same meaning
625which is uninteresting for all programs beside @code{dump}.
626@end table
627@end deftp
628
629For accessing the @file{mtab} file there is again a set of three
630functions to access all entries in a row. Unlike the functions to
631handle @file{fstab} these functions do not access a fixed file and there
c756c71c
UD
632is even a thread safe variant of the get function. Beside this the GNU
633libc contains functions to alter the file and test for specific options.
37742e84
UD
634
635@comment mntent.h
636@comment BSD
637@deftypefun {FILE *} setmntent (const char *@var{file}, const char *@var{mode})
638The @code{setmntent} function prepares the file named @var{FILE} which
639must be in the format of a @file{fstab} and @file{mtab} file for the
640upcoming processing through the other functions of the family. The
641@var{mode} parameter can be chosen in the way the @var{opentype}
642parameter for @code{fopen} (@pxref{Opening Streams}) can be chosen. If
643the file is opened for writing the file is also allowed to be empty.
644
645If the file was successfully opened @code{setmntent} returns a file
646descriptor for future use. Otherwise the return value is @code{NULL}
647and @code{errno} is set accordingly.
648@end deftypefun
649
650@comment mntent.h
651@comment BSD
652@deftypefun int endmntent (FILE *@var{stream})
653This function takes for the @var{stream} parameter a file handle which
654previously was returned from the @code{setmntent} call.
655@code{endmntent} closes the stream and frees all resources.
656
c756c71c
UD
657The return value is @math{1} unless an error occurred in which case it
658is @math{0}.
37742e84
UD
659@end deftypefun
660
661@comment mntent.h
662@comment BSD
663@deftypefun {struct mntent *} getmntent (FILE *@var{stream})
664The @code{getmntent} function takes as the parameter a file handle
665previously returned by successful call to @code{setmntent}. It returns
666a pointer to a static variable of type @code{struct mntent} which is
667filled with the information from the next entry from the file currently
668read.
669
c7f7281e
UD
670The file format used prescribes the use of spaces or tab characters to
671separate the fields. This makes it harder to use name containing one of
672these characters (e.g., mount points using spaces). Therefore these
673characters are encoded in the files and the @code{getmntent} function
674takes care of the decoding while reading the entries back in.
675@code{'\040'} is used to encode a space character, @code{'\012'} to
676encode a tab character and @code{'\\'} to encode a backslash.
677
37742e84
UD
678If there was an error or the end of the file is reached the return value
679is @code{NULL}.
680
681This function is not thread-safe since all calls to this function return
682a pointer to the same static variable. @code{getmntent_r} should be
c756c71c 683used in situations where multiple threads access the file.
37742e84
UD
684@end deftypefun
685
686@comment mntent.h
687@comment BSD
688@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mentent *@var{result}, char *@var{buffer}, int @var{bufsize})
689The @code{getmntent_r} function is the reentrant variant of
690@code{getmntent}. It also returns the next entry from the file and
691returns a pointer. The actual variable the values are stored in is not
692static, though. Instead the function stores the values in the variable
693pointed to by the @var{result} parameter. Additional information (e.g.,
694the strings pointed to by the elements of the result) are kept in the
695buffer of size @var{bufsize} pointed to by @var{buffer}.
696
c7f7281e
UD
697Escaped characters (space, tab, backslash) are converted back in the
698same way as it happens for @code{getmentent}.
699
c756c71c 700The function returns a @code{NULL} pointer in error cases. Errors could be:
37742e84
UD
701@itemize @bullet
702@item
703error while reading the file,
704@item
705end of file reached,
706@item
707@var{bufsize} is too small for reading a complete new entry.
708@end itemize
709@end deftypefun
710
711@comment mntent.h
712@comment BSD
713@deftypefun int addmntent (FILE *@var{stream}, const struct mntent *@var{mnt})
04b9968b 714The @code{addmntent} function allows adding a new entry to the file
37742e84
UD
715previously opened with @code{setmntent}. The new entries are always
716appended. I.e., even if the position of the file descriptor is not at
c756c71c 717the end of the file this function does not overwrite an existing entry
37742e84
UD
718following the current position.
719
720The implication of this is that to remove an entry from a file one has
721to create a new file while leaving out the entry to be removed and after
722closing the file remove the old one and rename the new file to the
723chosen name.
724
c7f7281e
UD
725This function takes care of spaces and tab characters in the names to be
726written to the file. It converts them and the backslash character into
727the format describe in the @code{getmntent} description above.
728
c756c71c
UD
729This function returns @math{0} in case the operation was successful.
730Otherwise the return value is @math{1} and @code{errno} is set
37742e84
UD
731appropriately.
732@end deftypefun
733
734@comment mntent.h
735@comment BSD
736@deftypefun {char *} hasmntopt (const struct mntent *@var{mnt}, const char *@var{opt})
737This function can be used to check whether the string pointed to by the
738@code{mnt_opts} element of the variable pointed to by @var{mnt} contains
739the option @var{opt}. If this is true a pointer to the beginning of the
740option in the @code{mnt_opts} element is returned. If no such option
c756c71c 741exists the function returns @code{NULL}.
37742e84
UD
742
743This function is useful to test whether a specific option is present but
744when all options have to be processed one is better off with using the
745@code{getsubopt} function to iterate over all options in the string.
746@end deftypefun
faf2289f
UD
747
748@node Other Mount Information
f126ef67 749@subsubsection Other (Non-libc) Sources of Mount Information
faf2289f
UD
750
751On a system with a Linux kernel and the @code{proc} filesystem, you can
752get information on currently mounted filesystems from the file
753@file{mounts} in the @code{proc} filesystem. Its format is similar to
754that of the @file{mtab} file, but represents what is truly mounted
755without relying on facilities outside the kernel to keep @file{mtab} up
756to date.
757
758
99a20616 759@node Mount-Unmount-Remount, , Mount Information, Filesystem Handling
f126ef67 760@subsection Mount, Unmount, Remount
faf2289f
UD
761
762This section describes the functions for mounting, unmounting, and
763remounting filesystems.
764
765Only the superuser can mount, unmount, or remount a filesystem.
766
767These functions do not access the @file{fstab} and @file{mtab} files. You
768should maintain and use these separately. @xref{Mount Information}.
769
770The symbols in this section are declared in @file{sys/mount.h}.
771
772@comment sys/mount.h
dbacafe5 773@comment SVID, BSD
faf2289f
UD
774@deftypefun {int} mount (const char *@var{special_file}, const char *@var{dir}, const char *@var{fstype}, unsigned long int @var{options}, const void *@var{data})
775
dbacafe5 776@code{mount} mounts or remounts a filesystem. The two operations are
faf2289f 777quite different and are merged rather unnnaturally into this one function.
dbacafe5 778The @code{MS_REMOUNT} option, explained below, determines whether
faf2289f
UD
779@code{mount} mounts or remounts.
780
781For a mount, the filesystem on the block device represented by the
782device special file named @var{special_file} gets mounted over the mount
783point @var{dir}. This means that the directory @var{dir} (along with any
784files in it) is no longer visible; in its place (and still with the name
785@var{dir}) is the root directory of the filesystem on the device.
786
787As an exception, if the filesystem type (see below) is one which is not
788based on a device (e.g. ``proc''), @code{mount} instantiates a
789filesystem and mounts it over @var{dir} and ignores @var{special_file}.
790
791For a remount, @var{dir} specifies the mount point where the filesystem
792to be remounted is (and remains) mounted and @var{special_file} is
793ignored. Remounting a filesystem means changing the options that control
794operations on the filesystem while it is mounted. It does not mean
795unmounting and mounting again.
796
797For a mount, you must identify the type of the filesystem as
798@var{fstype}. This type tells the kernel how to access the filesystem
799and can be thought of as the name of a filesystem driver. The
800acceptable values are system dependent. On a system with a Linux kernel
801and the @code{proc} filesystem, the list of possible values is in the
802file @file{filesystems} in the @code{proc} filesystem (e.g. type
803@kbd{cat /proc/filesystems} to see the list). With a Linux kernel, the
804types of filesystems that @code{mount} can mount, and their type names,
805depends on what filesystem drivers are configured into the kernel or
806loaded as loadable kernel modules. An example of a common value for
807@var{fstype} is @code{ext2}.
808
809For a remount, @code{mount} ignores @var{fstype}.
810
811@c This is traditionally called "rwflag" for historical reasons.
812@c No point in confusing people today, though.
813@var{options} specifies a variety of options that apply until the
3566d33c 814filesystem is unmounted or remounted. The precise meaning of an option
faf2289f
UD
815depends on the filesystem and with some filesystems, an option may have
816no effect at all. Furthermore, for some filesystems, some of these
817options (but never @code{MS_RDONLY}) can be overridden for individual
818file accesses via @code{ioctl}.
819
820@var{options} is a bit string with bit fields defined using the
821following mask and masked value macros:
822
823@table @code
824@item MS_MGC_MASK
825This multibit field contains a magic number. If it does not have the value
826@code{MS_MGC_VAL}, @code{mount} assumes all the following bits are zero and
827the @var{data} argument is a null string, regardless of their actual values.
828
829@item MS_REMOUNT
830This bit on means to remount the filesystem. Off means to mount it.
831@c There is a mask MS_RMT_MASK in mount.h that says only two of the options
4b9a6d7c 832@c can be reset by remount. But the Linux kernel has its own version of
faf2289f
UD
833@c MS_RMT_MASK that says they all can be reset. As far as I can tell,
834@c libc just passes the arguments straight through to the kernel.
835
836@item MS_RDONLY
837This bit on specifies that no writing to the filesystem shall be allowed
dbacafe5 838while it is mounted. This cannot be overridden by @code{ioctl}. This
faf2289f
UD
839option is available on nearly all filesystems.
840
841@item S_IMMUTABLE
842This bit on specifies that no writing to the files in the filesystem
843shall be allowed while it is mounted. This can be overridden for a
844particular file access by a properly privileged call to @code{ioctl}.
845This option is a relatively new invention and is not available on many
846filesystems.
847
848@item S_APPEND
849This bit on specifies that the only file writing that shall be allowed
850while the filesystem is mounted is appending. Some filesystems allow
851this to be overridden for a particular process by a properly privileged
852call to @code{ioctl}. This is a relatively new invention and is not
853available on many filesystems.
854
855@item MS_NOSUID
856This bit on specifies that Setuid and Setgid permissions on files in the
857filesystem shall be ignored while it is mounted.
858
859@item MS_NOEXEC
860This bit on specifies that no files in the filesystem shall be executed
861while the filesystem is mounted.
862
863@item MS_NODEV
dbacafe5 864This bit on specifies that no device special files in the filesystem
faf2289f
UD
865shall be accessible while the filesystem is mounted.
866
867@item MS_SYNCHRONOUS
dbacafe5
UD
868This bit on specifies that all writes to the filesystem while it is
869mounted shall be synchronous; i.e. data shall be synced before each
faf2289f
UD
870write completes rather than held in the buffer cache.
871
872@item MS_MANDLOCK
873This bit on specifies that mandatory locks on files shall be permitted while
874the filesystem is mounted.
875
876@item MS_NOATIME
877This bit on specifies that access times of files shall not be updated when
878the files are accessed while the filesystem is mounted.
879
880@item MS_NODIRATIME
881This bit on specifies that access times of directories shall not be updated
882when the directories are accessed while the filesystem in mounted.
883
884@c there is also S_QUOTA Linux fs.h (mount.h still uses its former name
885@c S_WRITE), but I can't see what it does. Turns on quotas, I guess.
886
887@end table
888
889Any bits not covered by the above masks should be set off; otherwise,
890results are undefined.
891
892The meaning of @var{data} depends on the filesystem type and is controlled
893entirely by the filesystem driver in the kernel.
894
895Example:
896
897@smallexample
898@group
899#include <sys/mount.h>
900
901mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");
902
903mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, "");
904
905@end group
906@end smallexample
907
908Appropriate arguments for @code{mount} are conventionally recorded in
909the @file{fstab} table. @xref{Mount Information}.
910
911The return value is zero if the mount or remount is successful. Otherwise,
dbacafe5 912it is @code{-1} and @code{errno} is set appropriately. The values of
faf2289f
UD
913@code{errno} are filesystem dependent, but here is a general list:
914
915@table @code
916@item EPERM
917The process is not superuser.
918@item ENODEV
919The file system type @var{fstype} is not known to the kernel.
920@item ENOTBLK
921The file @var{dev} is not a block device special file.
922@item EBUSY
923
68979757 924@itemize @bullet
faf2289f 925
dbacafe5 926@item
faf2289f
UD
927The device is already mounted.
928
929@item
930The mount point is busy. (E.g. it is some process' working directory or
931has a filesystem mounted on it already).
932
933@item
934The request is to remount read-only, but there are files open for write.
935@end itemize
936
937@item EINVAL
68979757 938@itemize @bullet
faf2289f
UD
939
940@item
941A remount was attempted, but there is no filesystem mounted over the
942specified mount point.
943
dbacafe5 944@item
faf2289f
UD
945The supposed filesystem has an invalid superblock.
946
947@end itemize
948
949@item EACCESS
68979757 950@itemize @bullet
faf2289f
UD
951
952@item
dbacafe5 953The filesystem is inherently read-only (possibly due to a switch on the
faf2289f
UD
954device) and the process attempted to mount it read/write (by setting the
955@code{MS_RDONLY} bit off).
956
957@item
958@var{special_file} or @var{dir} is not accessible due to file permissions.
959
960@item
961@var{special_file} is not accessible because it is in a filesystem that is
962mounted with the @code{MS_NODEV} option.
963
964@end itemize
965
966@item EM_FILE
967The table of dummy devices is full. @code{mount} needs to create a
968dummy device (aka ``unnamed'' device) if the filesystem being mounted is
969not one that uses a device.
970
971@end table
972
973@end deftypefun
974
975
976@comment sys/mount.h
dbacafe5 977@comment GNU
faf2289f
UD
978@deftypefun {int} umount2 (const char *@var{file}, int @var{flags})
979
980@code{umount2} unmounts a filesystem.
981
982You can identify the filesystem to unmount either by the device special
983file that contains the filesystem or by the mount point. The effect is
984the same. Specify either as the string @var{file}.
985
dbacafe5 986@var{flags} contains the one-bit field identified by the following
faf2289f
UD
987mask macro:
988
989@table @code
990
991@item MNT_FORCE
992This bit on means to force the unmounting even if the filesystem is
993busy, by making it unbusy first. If the bit is off and the filesystem is
994busy, @code{umount2} fails with @code{errno} = @code{EBUSY}. Depending
995on the filesystem, this may override all, some, or no busy conditions.
996
997@end table
998
999All other bits in @var{flags} should be set to zero; otherwise, the result
1000is undefined.
1001
1002Example:
1003
1004@smallexample
1005@group
1006#include <sys/mount.h>
1007
1008umount2("/mnt", MNT_FORCE);
1009
1010umount2("/dev/hdd1", 0);
1011
1012@end group
1013@end smallexample
1014
1015After the filesystem is unmounted, the directory that was the mount point
1016is visible, as are any files in it.
1017
1018As part of unmounting, @code{umount2} syncs the filesystem.
1019
1020If the unmounting is successful, the return value is zero. Otherwise, it
1021is @code{-1} and @code{errno} is set accordingly:
1022
1023@table @code
1024@item EPERM
1025The process is not superuser.
1026@item EBUSY
1027The filesystem cannot be unmounted because it is busy. E.g. it contains
1028a directory that is some process's working directory or a file that some
1029process has open. With some filesystems in some cases, you can avoid
1030this failure with the @code{MNT_FORCE} option.
1031
1032@item EINVAL
dbacafe5 1033@var{file} validly refers to a file, but that file is neither a mount
faf2289f
UD
1034point nor a device special file of a currently mounted filesystem.
1035
1036@end table
dbacafe5
UD
1037
1038This function is not available on all systems.
faf2289f
UD
1039@end deftypefun
1040
1041@comment sys/mount.h
dbacafe5 1042@comment SVID, GNU
faf2289f
UD
1043@deftypefun {int} umount (const char *@var{file})
1044
dbacafe5
UD
1045@code{umount} does the same thing as @code{umount2} with @var{flags} set
1046to zeroes. It is more widely available than @code{umount2} but since it
1047lacks the possibility to forcefully unmount a filesystem is deprecated
1048when @code{umount2} is also available.
faf2289f 1049@end deftypefun
4b9a6d7c
UD
1050
1051
1052
1053@node System Parameters
1054@section System Parameters
1055
1056This section describes the @code{sysctl} function, which gets and sets
1057a variety of system parameters.
1058
1059The symbols used in this section are declared in the file @file{sysctl.h}.
1060
1061@comment sysctl.h
1062@comment BSD
1063@deftypefun int sysctl (int *@var{names}, int @var{nlen}, void *@var{oldval},
1064 size_t *@var{oldlenp}, void *@var{newval}, size_t @var{newlen})
1065
1066@code{sysctl} gets or sets a specified system parameter. There are so
1067many of these parameters that it is not practical to list them all here,
1068but here are some examples:
1069
1070@itemize @bullet
1071@item network domain name
1072@item paging parameters
1073@item network Address Resolution Protocol timeout time
1074@item maximum number of files that may be open
1075@item root filesystem device
1076@item when kernel was built
1077@end itemize
1078
1079The set of available parameters depends on the kernel configuration and
1080can change while the system is running, particularly when you load and
1081unload loadable kernel modules.
1082
1083The system parameters with which @code{syslog} is concerned are arranged
1084in a hierarchical structure like a hierarchical filesystem. To identify
1085a particular parameter, you specify a path through the structure in a
1086way analogous to specifying the pathname of a file. Each component of
1087the path is specified by an integer and each of these integers has a
1088macro defined for it by @file{sysctl.h}. @var{names} is the path, in
1089the form of an array of integers. Each component of the path is one
1090element of the array, in order. @var{nlen} is the number of components
1091in the path.
1092
1093For example, the first component of the path for all the paging
1094parameters is the value @code{CTL_VM}. For the free page thresholds, the
1095second component of the path is @code{VM_FREEPG}. So to get the free
1096page threshold values, make @var{names} an array containing the two
1097elements @code{CTL_VM} and @code{VM_FREEPG} and make @var{nlen} = 2.
1098
1099
1100The format of the value of a parameter depends on the parameter.
1101Sometimes it is an integer; sometimes it is an ASCII string; sometimes
1102it is an elaborate structure. In the case of the free page thresholds
1103used in the example above, the parameter value is a structure containing
1104several integers.
1105
1106In any case, you identify a place to return the parameter's value with
1107@var{oldval} and specify the amount of storage available at that
1108location as *@var{oldlenp}. *@var{oldlenp} does double duty because it
1109is also the output location that contains the actual length of the
1110returned value.
1111
1112If you don't want the parameter value returned, specify a null pointer
1113for @var{oldval}.
1114
68979757 1115To set the parameter, specify the address and length of the new value
4b9a6d7c
UD
1116as @var{newval} and @var{newlen}. If you don't want to set the parameter,
1117specify a null pointer as @var{newval}.
1118
1119If you get and set a parameter in the same @code{sysctl} call, the value
1120returned is the value of the parameter before it was set.
1121
1122Each system parameter has a set of permissions similar to the
1123permissions for a file (including the permissions on directories in its
1124path) that determine whether you may get or set it. For the purposes of
1125these permissions, every parameter is considered to be owned by the
1126superuser and Group 0 so processes with that effective uid or gid may
1127have more access to system parameters. Unlike with files, the superuser
1128does not invariably have full permission to all system parameters, because
1129some of them are designed not to be changed ever.
1130
1131
1132@code{sysctl} returns a zero return value if it succeeds. Otherwise, it
1133returns @code{-1} and sets @code{errno} appropriately. Besides the
1134failures that apply to all system calls, the following are the
1135@code{errno} codes for all possible failures:
1136
1137@table @code
1138@item EPERM
68979757 1139The process is not permitted to access one of the components of the
4b9a6d7c
UD
1140path of the system parameter or is not permitted to access the system parameter
1141itself in the way (read or write) that it requested.
68979757 1142@c There is some indication in the Linux 2.2 code that the code is trying to
4b9a6d7c
UD
1143@c return EACCESS here, but the EACCESS value never actually makes it to the
1144@c user.
1145@item ENOTDIR
1146There is no system parameter corresponding to @var{name}.
1147@item EFAULT
1148@var{oldval} is not null, which means the process wanted to read the parameter,
1149but *@var{oldlenp} is zero, so there is no place to return it.
1150@item EINVAL
1151@itemize @bullet
1152@item
1153The process attempted to set a system parameter to a value that is not valid
1154for that parameter.
1155@item
1156The space provided for the return of the system parameter is not the right
1157size for that parameter.
1158@end itemize
1159@item ENOMEM
1160This value may be returned instead of the more correct @code{EINVAL} in some
1161cases where the space provided for the return of the system parameter is too
1162small.
1163
1164@end table
1165
1166@end deftypefun
1167
1168If you have a Linux kernel with the @code{proc} filesystem, you can get
68979757 1169and set most of the same parameters by reading and writing to files in
4b9a6d7c
UD
1170the @code{sys} directory of the @code{proc} filesystem. In the @code{sys}
1171directory, the directory structure represents the hierarchical structure
1172of the parameters. E.g. you can display the free page thresholds with
1173@smallexample
1174cat /proc/sys/vm/freepages
1175@end smallexample
1176@c In Linux, the sysctl() and /proc instances of the parameter are created
1177@c together. The proc filesystem accesses the same data structure as
1178@c sysctl(), which has special fields in it for /proc. But it is still
1179@c possible to create a sysctl-only parameter.
1180
1181Some more traditional and more widely available, though less general,
1182GNU C library functions for getting and setting some of the same system
1183parameters are:
1184
1185@itemize @bullet
1186@item
1187@code{getdomainname}, @code{setdomainname}
1188@item
1189@code{gethostname}, @code{sethostname} (@xref{Host Identification}.)
1190@item
99a20616 1191@code{uname} (@xref{Platform Type}.)
4b9a6d7c
UD
1192@item
1193@code{bdflush}
1194@end itemize