]> 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
9495793d 18* Load Average:: Getting the system load average
28f540f4
RM
19@end menu
20
faf2289f
UD
21To get information on parameters of the system that are built into the
22system, such as the maximum length of a filename, @ref{System
23Configuration}.
28f540f4
RM
24
25@node Host Identification
26@section Host Identification
27
4b9a6d7c
UD
28This section explains how to identify the particular system on which your
29program is running. First, let's review the various ways computer systems
30are named, which is a little complicated because of the history of the
31development of the Internet.
32
33Every Unix system (also known as a host) has a host name, whether it's
34connected to a network or not. In its simplest form, as used before
35computer networks were an issue, it's just a word like @samp{chicken}.
36@cindex host name
37
38But any system attached to the Internet or any network like it conforms
39to a more rigorous naming convention as part of the Domain Name System
40(DNS). In DNS, every host name is composed of two parts:
41@cindex DNS
42@cindex Domain Name System
43
44@enumerate
45@item
68979757 46hostname
4b9a6d7c
UD
47@cindex hostname
48@item
49domain name
50@cindex domain name
51@end enumerate
52
53You will note that ``hostname'' looks a lot like ``host name'', but is
54not the same thing, and that people often incorrectly refer to entire
55host names as ``domain names.''
56
68979757 57In DNS, the full host name is properly called the FQDN (Fully Qualified
4b9a6d7c
UD
58Domain Name) and consists of the hostname, then a period, then the
59domain name. The domain name itself usually has multiple components
60separated by periods. So for example, a system's hostname may be
68979757 61@samp{chicken} and its domain name might be @samp{ai.mit.edu}, so
4b9a6d7c
UD
62its FQDN (which is its host name) is @samp{chicken.ai.mit.edu}.
63@cindex FQDN
64
65Adding to the confusion, though, is that DNS is not the only name space
68979757 66in which a computer needs to be known. Another name space is the
4b9a6d7c
UD
67NIS (aka YP) name space. For NIS purposes, there is another domain
68name, which is called the NIS domain name or the YP domain name. It
69need not have anything to do with the DNS domain name.
70@cindex YP
71@cindex NIS
72@cindex NIS domain name
73@cindex YP domain name
74
75Confusing things even more is the fact that in DNS, it is possible for
76multiple FQDNs to refer to the same system. However, there is always
77exactly one of them that is the true host name, and it is called the
68979757 78canonical FQDN.
4b9a6d7c
UD
79
80In some contexts, the host name is called a ``node name.''
81
82For more information on DNS host naming, @xref{Host Names}.
28f540f4
RM
83
84@pindex hostname
85@pindex hostid
86@pindex unistd.h
68979757 87Prototypes for these functions appear in @file{unistd.h}.
4b9a6d7c
UD
88
89The programs @code{hostname}, @code{hostid}, and @code{domainname} work
90by calling these functions.
28f540f4
RM
91
92@comment unistd.h
93@comment BSD
94@deftypefun int gethostname (char *@var{name}, size_t @var{size})
4b9a6d7c
UD
95This function returns the host name of the system on which it is called,
96in the array @var{name}. The @var{size} argument specifies the size of
97this array, in bytes. Note that this is @emph{not} the DNS hostname.
98If the system participates in DNS, this is the FQDN (see above).
28f540f4
RM
99
100The return value is @code{0} on success and @code{-1} on failure. In
101the GNU C library, @code{gethostname} fails if @var{size} is not large
102enough; then you can try again with a larger array. The following
103@code{errno} error condition is defined for this function:
104
105@table @code
106@item ENAMETOOLONG
107The @var{size} argument is less than the size of the host name plus one.
108@end table
109
110@pindex sys/param.h
111On some systems, there is a symbol for the maximum possible host name
112length: @code{MAXHOSTNAMELEN}. It is defined in @file{sys/param.h}.
113But you can't count on this to exist, so it is cleaner to handle
114failure and try again.
115
116@code{gethostname} stores the beginning of the host name in @var{name}
117even if the host name won't entirely fit. For some purposes, a
118truncated host name is good enough. If it is, you can ignore the
119error code.
120@end deftypefun
121
122@comment unistd.h
123@comment BSD
124@deftypefun int sethostname (const char *@var{name}, size_t @var{length})
4b9a6d7c
UD
125The @code{sethostname} function sets the host name of the system that
126calls it to @var{name}, a string with length @var{length}. Only
127privileged processes are permitted to do this.
128
129Usually @code{sethostname} gets called just once, at system boot time.
130Often, the program that calls it sets it to the value it finds in the
131file @code{/etc/hostname}.
132@cindex /etc/hostname
133
134Be sure to set the host name to the full host name, not just the DNS
135hostname (see above).
28f540f4
RM
136
137The return value is @code{0} on success and @code{-1} on failure.
138The following @code{errno} error condition is defined for this function:
139
140@table @code
141@item EPERM
142This process cannot set the host name because it is not privileged.
143@end table
144@end deftypefun
145
4b9a6d7c
UD
146@comment unistd.h
147@comment ???
148@deftypefun int getdomainnname (char *@var{name}, size_t @var{length})
149@cindex NIS domain name
150@cindex YP domain name
151
152@code{getdomainname} returns the NIS (aka YP) domain name of the system
153on which it is called. Note that this is not the more popular DNS
154domain name. Get that with @code{gethostname}.
155
156The specifics of this function are analogous to @code{gethostname}, above.
157
158@end deftypefun
159
160@comment unistd.h
161@comment ???
162@deftypefun int setdomainnname (const char *@var{name}, size_t @var{length})
163@cindex NIS domain name
164@cindex YP domain name
165
166@code{getdomainname} sets the NIS (aka YP) domain name of the system
167on which it is called. Note that this is not the more popular DNS
168domain name. Set that with @code{sethostname}.
169
170The specifics of this function are analogous to @code{sethostname}, above.
171
172@end deftypefun
173
28f540f4
RM
174@comment unistd.h
175@comment BSD
176@deftypefun {long int} gethostid (void)
177This function returns the ``host ID'' of the machine the program is
4b9a6d7c 178running on. By convention, this is usually the primary Internet IP address
04b9968b 179of that machine, converted to a @w{@code{long int}}. However, on some
28f540f4
RM
180systems it is a meaningless but unique number which is hard-coded for
181each machine.
4b9a6d7c
UD
182
183This is not widely used. It arose in BSD 4.2, but was dropped in BSD 4.4.
184It is not required by POSIX.
185
186The proper way to query the IP address is to use @code{gethostbyname}
187on the results of @code{gethostname}. For more information on IP addresses,
188@xref{Host Addresses}.
28f540f4
RM
189@end deftypefun
190
191@comment unistd.h
192@comment BSD
193@deftypefun int sethostid (long int @var{id})
194The @code{sethostid} function sets the ``host ID'' of the host machine
4b9a6d7c 195to @var{id}. Only privileged processes are permitted to do this. Usually
28f540f4
RM
196it happens just once, at system boot time.
197
4b9a6d7c 198The proper way to establish the primary IP address of a system
68979757 199is to configure the IP address resolver to associate that IP address with
4b9a6d7c
UD
200the system's host name as returned by @code{gethostname}. For example,
201put a record for the system in @file{/etc/hosts}.
202
203See @code{gethostid} above for more information on host ids.
204
28f540f4 205The return value is @code{0} on success and @code{-1} on failure.
04b9968b 206The following @code{errno} error conditions are defined for this function:
28f540f4
RM
207
208@table @code
209@item EPERM
210This process cannot set the host name because it is not privileged.
211
212@item ENOSYS
213The operating system does not support setting the host ID. On some
214systems, the host ID is a meaningless but unique number hard-coded for
215each machine.
216@end table
217@end deftypefun
218
99a20616
UD
219@node Platform Type
220@section Platform Type Identification
28f540f4
RM
221
222You can use the @code{uname} function to find out some information about
223the type of computer your program is running on. This function and the
224associated data type are declared in the header file
225@file{sys/utsname.h}.
226@pindex sys/utsname.h
227
68979757 228As a bonus, @code{uname} also gives some information identifying the
4b9a6d7c 229particular system your program is running on. This is the same information
68979757 230which you can get with functions targetted to this purpose described in
4b9a6d7c
UD
231@ref{Host Identification}.
232
233
28f540f4
RM
234@comment sys/utsname.h
235@comment POSIX.1
236@deftp {Data Type} {struct utsname}
237The @code{utsname} structure is used to hold information returned
238by the @code{uname} function. It has the following members:
239
240@table @code
241@item char sysname[]
242This is the name of the operating system in use.
243
28f540f4
RM
244@item char release[]
245This is the current release level of the operating system implementation.
246
247@item char version[]
248This is the current version level within the release of the operating
249system.
250
251@item char machine[]
252This is a description of the type of hardware that is in use.
253
254Some systems provide a mechanism to interrogate the kernel directly for
255this information. On systems without such a mechanism, the GNU C
256library fills in this field based on the configuration name that was
257specified when building and installing the library.
258
259GNU uses a three-part name to describe a system configuration; the three
260parts are @var{cpu}, @var{manufacturer} and @var{system-type}, and they
261are separated with dashes. Any possible combination of three names is
262potentially meaningful, but most such combinations are meaningless in
263practice and even the meaningful ones are not necessarily supported by
264any particular GNU program.
265
266Since the value in @code{machine} is supposed to describe just the
267hardware, it consists of the first two parts of the configuration name:
268@samp{@var{cpu}-@var{manufacturer}}. For example, it might be one of these:
269
270@quotation
37742e84 271@code{"sparc-sun"},
28f540f4 272@code{"i386-@var{anything}"},
37742e84 273@code{"m68k-hp"},
28f540f4
RM
274@code{"m68k-sony"},
275@code{"m68k-sun"},
276@code{"mips-dec"}
277@end quotation
4b9a6d7c
UD
278
279@item char nodename[]
280This is the host name of this particular computer. In the GNU C
281library, the value is the same as that returned by @code{gethostname};
282see @ref{Host Identification}.
283
284@ gethostname() is implemented with a call to uname().
285
286@item char domainname[]
287This is the NIS or YP domain name. It is the same value returned by
68979757 288@code{getdomainname}; see @ref{Host Identification}. This element
4b9a6d7c
UD
289is a relatively recent invention and use of it is not as portable as
290use of the rest of the structure.
291
292@c getdomainname() is implemented with a call to uname().
293
28f540f4
RM
294@end table
295@end deftp
296
297@comment sys/utsname.h
298@comment POSIX.1
299@deftypefun int uname (struct utsname *@var{info})
300The @code{uname} function fills in the structure pointed to by
301@var{info} with information about the operating system and host machine.
302A non-negative value indicates that the data was successfully stored.
303
304@code{-1} as the value indicates an error. The only error possible is
305@code{EFAULT}, which we normally don't mention as it is always a
306possibility.
307@end deftypefun
37742e84
UD
308
309
faf2289f 310@node Filesystem Handling
99a20616 311@section Controlling and Querying Mounts
faf2289f
UD
312
313All files are in filesystems, and before you can access any file, its
314filesystem must be mounted. Because of Unix's concept of
315@emph{Everything is a file}, mounting of filesystems is central to doing
316almost anything. This section explains how to find out what filesystems
317are currently mounted and what filesystems are available for mounting,
318and how to change what is mounted.
319
320The classic filesystem is the contents of a disk drive. The concept is
321considerably more abstract, though, and lots of things other than disk
dbacafe5 322drives can be mounted.
faf2289f
UD
323
324Some block devices don't correspond to traditional devices like disk
325drives. For example, a loop device is a block device whose driver uses
326a regular file in another filesystem as its medium. So if that regular
327file contains appropriate data for a filesystem, you can by mounting the
328loop device essentially mount a regular file.
329
330Some filesystems aren't based on a device of any kind. The ``proc''
331filesystem, for example, contains files whose data is made up by the
332filesystem driver on the fly whenever you ask for it. And when you
333write to it, the data you write causes changes in the system. No data
334gets stored.
335
336@c It would be good to mention NFS mounts here.
337
338@menu
339* Mount Information:: What is or could be mounted?
99a20616 340* Mount-Unmount-Remount:: Controlling what is mounted and how
faf2289f 341@end menu
37742e84 342
99a20616 343@node Mount Information, Mount-Unmount-Remount, , Filesystem Handling
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
387@subsection The @file{fstab} file
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
UD
538@node mtab
539@subsection The @file{mtab} file
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
749@subsection Other (Non-libc) Sources of Mount Information
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
faf2289f
UD
760
761This section describes the functions for mounting, unmounting, and
762remounting filesystems.
763
764Only the superuser can mount, unmount, or remount a filesystem.
765
766These functions do not access the @file{fstab} and @file{mtab} files. You
767should maintain and use these separately. @xref{Mount Information}.
768
769The symbols in this section are declared in @file{sys/mount.h}.
770
771@comment sys/mount.h
dbacafe5 772@comment SVID, BSD
faf2289f
UD
773@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})
774
dbacafe5 775@code{mount} mounts or remounts a filesystem. The two operations are
faf2289f 776quite different and are merged rather unnnaturally into this one function.
dbacafe5 777The @code{MS_REMOUNT} option, explained below, determines whether
faf2289f
UD
778@code{mount} mounts or remounts.
779
780For a mount, the filesystem on the block device represented by the
781device special file named @var{special_file} gets mounted over the mount
782point @var{dir}. This means that the directory @var{dir} (along with any
783files in it) is no longer visible; in its place (and still with the name
784@var{dir}) is the root directory of the filesystem on the device.
785
786As an exception, if the filesystem type (see below) is one which is not
787based on a device (e.g. ``proc''), @code{mount} instantiates a
788filesystem and mounts it over @var{dir} and ignores @var{special_file}.
789
790For a remount, @var{dir} specifies the mount point where the filesystem
791to be remounted is (and remains) mounted and @var{special_file} is
792ignored. Remounting a filesystem means changing the options that control
793operations on the filesystem while it is mounted. It does not mean
794unmounting and mounting again.
795
796For a mount, you must identify the type of the filesystem as
797@var{fstype}. This type tells the kernel how to access the filesystem
798and can be thought of as the name of a filesystem driver. The
799acceptable values are system dependent. On a system with a Linux kernel
800and the @code{proc} filesystem, the list of possible values is in the
801file @file{filesystems} in the @code{proc} filesystem (e.g. type
802@kbd{cat /proc/filesystems} to see the list). With a Linux kernel, the
803types of filesystems that @code{mount} can mount, and their type names,
804depends on what filesystem drivers are configured into the kernel or
805loaded as loadable kernel modules. An example of a common value for
806@var{fstype} is @code{ext2}.
807
808For a remount, @code{mount} ignores @var{fstype}.
809
810@c This is traditionally called "rwflag" for historical reasons.
811@c No point in confusing people today, though.
812@var{options} specifies a variety of options that apply until the
3566d33c 813filesystem is unmounted or remounted. The precise meaning of an option
faf2289f
UD
814depends on the filesystem and with some filesystems, an option may have
815no effect at all. Furthermore, for some filesystems, some of these
816options (but never @code{MS_RDONLY}) can be overridden for individual
817file accesses via @code{ioctl}.
818
819@var{options} is a bit string with bit fields defined using the
820following mask and masked value macros:
821
822@table @code
823@item MS_MGC_MASK
824This multibit field contains a magic number. If it does not have the value
825@code{MS_MGC_VAL}, @code{mount} assumes all the following bits are zero and
826the @var{data} argument is a null string, regardless of their actual values.
827
828@item MS_REMOUNT
829This bit on means to remount the filesystem. Off means to mount it.
830@c There is a mask MS_RMT_MASK in mount.h that says only two of the options
4b9a6d7c 831@c can be reset by remount. But the Linux kernel has its own version of
faf2289f
UD
832@c MS_RMT_MASK that says they all can be reset. As far as I can tell,
833@c libc just passes the arguments straight through to the kernel.
834
835@item MS_RDONLY
836This bit on specifies that no writing to the filesystem shall be allowed
dbacafe5 837while it is mounted. This cannot be overridden by @code{ioctl}. This
faf2289f
UD
838option is available on nearly all filesystems.
839
840@item S_IMMUTABLE
841This bit on specifies that no writing to the files in the filesystem
842shall be allowed while it is mounted. This can be overridden for a
843particular file access by a properly privileged call to @code{ioctl}.
844This option is a relatively new invention and is not available on many
845filesystems.
846
847@item S_APPEND
848This bit on specifies that the only file writing that shall be allowed
849while the filesystem is mounted is appending. Some filesystems allow
850this to be overridden for a particular process by a properly privileged
851call to @code{ioctl}. This is a relatively new invention and is not
852available on many filesystems.
853
854@item MS_NOSUID
855This bit on specifies that Setuid and Setgid permissions on files in the
856filesystem shall be ignored while it is mounted.
857
858@item MS_NOEXEC
859This bit on specifies that no files in the filesystem shall be executed
860while the filesystem is mounted.
861
862@item MS_NODEV
dbacafe5 863This bit on specifies that no device special files in the filesystem
faf2289f
UD
864shall be accessible while the filesystem is mounted.
865
866@item MS_SYNCHRONOUS
dbacafe5
UD
867This bit on specifies that all writes to the filesystem while it is
868mounted shall be synchronous; i.e. data shall be synced before each
faf2289f
UD
869write completes rather than held in the buffer cache.
870
871@item MS_MANDLOCK
872This bit on specifies that mandatory locks on files shall be permitted while
873the filesystem is mounted.
874
875@item MS_NOATIME
876This bit on specifies that access times of files shall not be updated when
877the files are accessed while the filesystem is mounted.
878
879@item MS_NODIRATIME
880This bit on specifies that access times of directories shall not be updated
881when the directories are accessed while the filesystem in mounted.
882
883@c there is also S_QUOTA Linux fs.h (mount.h still uses its former name
884@c S_WRITE), but I can't see what it does. Turns on quotas, I guess.
885
886@end table
887
888Any bits not covered by the above masks should be set off; otherwise,
889results are undefined.
890
891The meaning of @var{data} depends on the filesystem type and is controlled
892entirely by the filesystem driver in the kernel.
893
894Example:
895
896@smallexample
897@group
898#include <sys/mount.h>
899
900mount("/dev/hdb", "/cdrom", MS_MGC_VAL | MS_RDONLY | MS_NOSUID, "");
901
902mount("/dev/hda2", "/mnt", MS_MGC_VAL | MS_REMOUNT, "");
903
904@end group
905@end smallexample
906
907Appropriate arguments for @code{mount} are conventionally recorded in
908the @file{fstab} table. @xref{Mount Information}.
909
910The return value is zero if the mount or remount is successful. Otherwise,
dbacafe5 911it is @code{-1} and @code{errno} is set appropriately. The values of
faf2289f
UD
912@code{errno} are filesystem dependent, but here is a general list:
913
914@table @code
915@item EPERM
916The process is not superuser.
917@item ENODEV
918The file system type @var{fstype} is not known to the kernel.
919@item ENOTBLK
920The file @var{dev} is not a block device special file.
921@item EBUSY
922
68979757 923@itemize @bullet
faf2289f 924
dbacafe5 925@item
faf2289f
UD
926The device is already mounted.
927
928@item
929The mount point is busy. (E.g. it is some process' working directory or
930has a filesystem mounted on it already).
931
932@item
933The request is to remount read-only, but there are files open for write.
934@end itemize
935
936@item EINVAL
68979757 937@itemize @bullet
faf2289f
UD
938
939@item
940A remount was attempted, but there is no filesystem mounted over the
941specified mount point.
942
dbacafe5 943@item
faf2289f
UD
944The supposed filesystem has an invalid superblock.
945
946@end itemize
947
948@item EACCESS
68979757 949@itemize @bullet
faf2289f
UD
950
951@item
dbacafe5 952The filesystem is inherently read-only (possibly due to a switch on the
faf2289f
UD
953device) and the process attempted to mount it read/write (by setting the
954@code{MS_RDONLY} bit off).
955
956@item
957@var{special_file} or @var{dir} is not accessible due to file permissions.
958
959@item
960@var{special_file} is not accessible because it is in a filesystem that is
961mounted with the @code{MS_NODEV} option.
962
963@end itemize
964
965@item EM_FILE
966The table of dummy devices is full. @code{mount} needs to create a
967dummy device (aka ``unnamed'' device) if the filesystem being mounted is
968not one that uses a device.
969
970@end table
971
972@end deftypefun
973
974
975@comment sys/mount.h
dbacafe5 976@comment GNU
faf2289f
UD
977@deftypefun {int} umount2 (const char *@var{file}, int @var{flags})
978
979@code{umount2} unmounts a filesystem.
980
981You can identify the filesystem to unmount either by the device special
982file that contains the filesystem or by the mount point. The effect is
983the same. Specify either as the string @var{file}.
984
dbacafe5 985@var{flags} contains the one-bit field identified by the following
faf2289f
UD
986mask macro:
987
988@table @code
989
990@item MNT_FORCE
991This bit on means to force the unmounting even if the filesystem is
992busy, by making it unbusy first. If the bit is off and the filesystem is
993busy, @code{umount2} fails with @code{errno} = @code{EBUSY}. Depending
994on the filesystem, this may override all, some, or no busy conditions.
995
996@end table
997
998All other bits in @var{flags} should be set to zero; otherwise, the result
999is undefined.
1000
1001Example:
1002
1003@smallexample
1004@group
1005#include <sys/mount.h>
1006
1007umount2("/mnt", MNT_FORCE);
1008
1009umount2("/dev/hdd1", 0);
1010
1011@end group
1012@end smallexample
1013
1014After the filesystem is unmounted, the directory that was the mount point
1015is visible, as are any files in it.
1016
1017As part of unmounting, @code{umount2} syncs the filesystem.
1018
1019If the unmounting is successful, the return value is zero. Otherwise, it
1020is @code{-1} and @code{errno} is set accordingly:
1021
1022@table @code
1023@item EPERM
1024The process is not superuser.
1025@item EBUSY
1026The filesystem cannot be unmounted because it is busy. E.g. it contains
1027a directory that is some process's working directory or a file that some
1028process has open. With some filesystems in some cases, you can avoid
1029this failure with the @code{MNT_FORCE} option.
1030
1031@item EINVAL
dbacafe5 1032@var{file} validly refers to a file, but that file is neither a mount
faf2289f
UD
1033point nor a device special file of a currently mounted filesystem.
1034
1035@end table
dbacafe5
UD
1036
1037This function is not available on all systems.
faf2289f
UD
1038@end deftypefun
1039
1040@comment sys/mount.h
dbacafe5 1041@comment SVID, GNU
faf2289f
UD
1042@deftypefun {int} umount (const char *@var{file})
1043
dbacafe5
UD
1044@code{umount} does the same thing as @code{umount2} with @var{flags} set
1045to zeroes. It is more widely available than @code{umount2} but since it
1046lacks the possibility to forcefully unmount a filesystem is deprecated
1047when @code{umount2} is also available.
faf2289f 1048@end deftypefun
4b9a6d7c
UD
1049
1050
1051
1052@node System Parameters
1053@section System Parameters
1054
1055This section describes the @code{sysctl} function, which gets and sets
1056a variety of system parameters.
1057
1058The symbols used in this section are declared in the file @file{sysctl.h}.
1059
1060@comment sysctl.h
1061@comment BSD
1062@deftypefun int sysctl (int *@var{names}, int @var{nlen}, void *@var{oldval},
1063 size_t *@var{oldlenp}, void *@var{newval}, size_t @var{newlen})
1064
1065@code{sysctl} gets or sets a specified system parameter. There are so
1066many of these parameters that it is not practical to list them all here,
1067but here are some examples:
1068
1069@itemize @bullet
1070@item network domain name
1071@item paging parameters
1072@item network Address Resolution Protocol timeout time
1073@item maximum number of files that may be open
1074@item root filesystem device
1075@item when kernel was built
1076@end itemize
1077
1078The set of available parameters depends on the kernel configuration and
1079can change while the system is running, particularly when you load and
1080unload loadable kernel modules.
1081
1082The system parameters with which @code{syslog} is concerned are arranged
1083in a hierarchical structure like a hierarchical filesystem. To identify
1084a particular parameter, you specify a path through the structure in a
1085way analogous to specifying the pathname of a file. Each component of
1086the path is specified by an integer and each of these integers has a
1087macro defined for it by @file{sysctl.h}. @var{names} is the path, in
1088the form of an array of integers. Each component of the path is one
1089element of the array, in order. @var{nlen} is the number of components
1090in the path.
1091
1092For example, the first component of the path for all the paging
1093parameters is the value @code{CTL_VM}. For the free page thresholds, the
1094second component of the path is @code{VM_FREEPG}. So to get the free
1095page threshold values, make @var{names} an array containing the two
1096elements @code{CTL_VM} and @code{VM_FREEPG} and make @var{nlen} = 2.
1097
1098
1099The format of the value of a parameter depends on the parameter.
1100Sometimes it is an integer; sometimes it is an ASCII string; sometimes
1101it is an elaborate structure. In the case of the free page thresholds
1102used in the example above, the parameter value is a structure containing
1103several integers.
1104
1105In any case, you identify a place to return the parameter's value with
1106@var{oldval} and specify the amount of storage available at that
1107location as *@var{oldlenp}. *@var{oldlenp} does double duty because it
1108is also the output location that contains the actual length of the
1109returned value.
1110
1111If you don't want the parameter value returned, specify a null pointer
1112for @var{oldval}.
1113
68979757 1114To set the parameter, specify the address and length of the new value
4b9a6d7c
UD
1115as @var{newval} and @var{newlen}. If you don't want to set the parameter,
1116specify a null pointer as @var{newval}.
1117
1118If you get and set a parameter in the same @code{sysctl} call, the value
1119returned is the value of the parameter before it was set.
1120
1121Each system parameter has a set of permissions similar to the
1122permissions for a file (including the permissions on directories in its
1123path) that determine whether you may get or set it. For the purposes of
1124these permissions, every parameter is considered to be owned by the
1125superuser and Group 0 so processes with that effective uid or gid may
1126have more access to system parameters. Unlike with files, the superuser
1127does not invariably have full permission to all system parameters, because
1128some of them are designed not to be changed ever.
1129
1130
1131@code{sysctl} returns a zero return value if it succeeds. Otherwise, it
1132returns @code{-1} and sets @code{errno} appropriately. Besides the
1133failures that apply to all system calls, the following are the
1134@code{errno} codes for all possible failures:
1135
1136@table @code
1137@item EPERM
68979757 1138The process is not permitted to access one of the components of the
4b9a6d7c
UD
1139path of the system parameter or is not permitted to access the system parameter
1140itself in the way (read or write) that it requested.
68979757 1141@c There is some indication in the Linux 2.2 code that the code is trying to
4b9a6d7c
UD
1142@c return EACCESS here, but the EACCESS value never actually makes it to the
1143@c user.
1144@item ENOTDIR
1145There is no system parameter corresponding to @var{name}.
1146@item EFAULT
1147@var{oldval} is not null, which means the process wanted to read the parameter,
1148but *@var{oldlenp} is zero, so there is no place to return it.
1149@item EINVAL
1150@itemize @bullet
1151@item
1152The process attempted to set a system parameter to a value that is not valid
1153for that parameter.
1154@item
1155The space provided for the return of the system parameter is not the right
1156size for that parameter.
1157@end itemize
1158@item ENOMEM
1159This value may be returned instead of the more correct @code{EINVAL} in some
1160cases where the space provided for the return of the system parameter is too
1161small.
1162
1163@end table
1164
1165@end deftypefun
1166
1167If you have a Linux kernel with the @code{proc} filesystem, you can get
68979757 1168and set most of the same parameters by reading and writing to files in
4b9a6d7c
UD
1169the @code{sys} directory of the @code{proc} filesystem. In the @code{sys}
1170directory, the directory structure represents the hierarchical structure
1171of the parameters. E.g. you can display the free page thresholds with
1172@smallexample
1173cat /proc/sys/vm/freepages
1174@end smallexample
1175@c In Linux, the sysctl() and /proc instances of the parameter are created
1176@c together. The proc filesystem accesses the same data structure as
1177@c sysctl(), which has special fields in it for /proc. But it is still
1178@c possible to create a sysctl-only parameter.
1179
1180Some more traditional and more widely available, though less general,
1181GNU C library functions for getting and setting some of the same system
1182parameters are:
1183
1184@itemize @bullet
1185@item
1186@code{getdomainname}, @code{setdomainname}
1187@item
1188@code{gethostname}, @code{sethostname} (@xref{Host Identification}.)
1189@item
99a20616 1190@code{uname} (@xref{Platform Type}.)
4b9a6d7c
UD
1191@item
1192@code{bdflush}
1193@end itemize
9495793d
UD
1194
1195@node Load Average
1196@section Getting the system load average
1197
1198This section describes the @code{getloadavg} function, which gets the 1, 5
1199and 15 minute load averages of the system. The load average is the number of
1200processes in the system run queue, averaged over various periods of time
1201(1, 5 and 15 minutes in this case).
1202
1203The symbols used in this section are declared in the file @file{stdlib.h}.
1204
1205@comment stdlib.h
1206@comment BSD
1207@deftypefun int getloadavg (double @var{loadavg}[], int @var{nelem})
1208This function gets the 1, 5 and 15 minute load averages of the system. The
1209values are placed in @var{loadavg}. The function will place at most
1210@var{nelem} elements into the array, @var{loadavg}. Never are there more
1211than three elements returned and possibly less than @var{nelem}. The return
1212value is the number of elements written to @var{loadavg}, or -1 on error.
1213@end deftypefun