]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man3/getutent.3
Many pages: Add '\" t' comment where necessary
[thirdparty/man-pages.git] / man3 / getutent.3
CommitLineData
a1eaacb1 1'\" t
fea681da
MK
2.\" Copyright 1995 Mark D. Roth (roth@uiuc.edu)
3.\"
e4a74ca8 4.\" SPDX-License-Identifier: GPL-2.0-or-later
fea681da
MK
5.\"
6.\" References consulted:
7.\" Linux libc source code
8.\" Solaris manpages
9.\"
ce515cd4
MK
10.\" Modified Thu Jul 25 14:43:46 MET DST 1996 by Michael Haardt
11.\" <michael@cantor.informatik.rwth-aachen.de>
fea681da 12.\"
4c1c5274 13.TH getutent 3 (date) "Linux man-pages (unreleased)"
fea681da 14.SH NAME
ce515cd4
MK
15getutent, getutid, getutline, pututline, setutent, endutent,
16utmpname \- access utmp file entries
42009080
AC
17.SH LIBRARY
18Standard C library
19.RI ( libc ", " \-lc )
fea681da 20.SH SYNOPSIS
c7db92b9 21.nf
fea681da 22.B #include <utmp.h>
68e4db0a 23.PP
fea681da 24.B struct utmp *getutent(void);
bf8f95ee 25.BI "struct utmp *getutid(const struct utmp *" ut );
bf8f95ee 26.BI "struct utmp *getutline(const struct utmp *" ut );
68e4db0a 27.PP
bf8f95ee 28.BI "struct utmp *pututline(const struct utmp *" ut );
68e4db0a 29.PP
fea681da 30.B void setutent(void);
fea681da 31.B void endutent(void);
68e4db0a 32.PP
ce515cd4 33.BI "int utmpname(const char *" file );
e3528453 34.fi
fea681da 35.SH DESCRIPTION
490b25e1 36New applications should use the POSIX.1-specified "utmpx" versions of
3113c7f3 37these functions; see STANDARDS.
847e0d88 38.PP
60a90ecd
MK
39.BR utmpname ()
40sets the name of the utmp-format file for the other utmp
c13182ef 41functions to access.
60a90ecd
MK
42If
43.BR utmpname ()
44is not used to set the filename
fea681da
MK
45before the other functions are used, they assume \fB_PATH_UTMP\fP, as
46defined in \fI<paths.h>\fP.
47.PP
60a90ecd
MK
48.BR setutent ()
49rewinds the file pointer to the beginning of the utmp file.
acabf1c1 50It is generally a good idea to call it before any of the other
fea681da
MK
51functions.
52.PP
60a90ecd
MK
53.BR endutent ()
54closes the utmp file.
c13182ef 55It should be called when the user
fea681da
MK
56code is done accessing the file with the other functions.
57.PP
60a90ecd 58.BR getutent ()
acabf1c1 59reads a line from the current file position in the utmp file.
c13182ef 60It returns a pointer to a structure containing the fields of
fea681da 61the line.
8404ecb5 62The definition of this structure is shown in
ff6953dc 63.BR utmp (5).
fea681da 64.PP
60a90ecd
MK
65.BR getutid ()
66searches forward from the current file position in the utmp
c13182ef 67file based upon \fIut\fP.
acabf1c1 68If \fIut\->ut_type\fP is one of \fBRUN_LVL\fP,
60a90ecd
MK
69\fBBOOT_TIME\fP, \fBNEW_TIME\fP, or \fBOLD_TIME\fP,
70.BR getutid ()
71will
acabf1c1
MK
72find the first entry whose \fIut_type\fP field matches \fIut\->ut_type\fP.
73If \fIut\->ut_type\fP is one of \fBINIT_PROCESS\fP, \fBLOGIN_PROCESS\fP,
60a90ecd
MK
74\fBUSER_PROCESS\fP, or \fBDEAD_PROCESS\fP,
75.BR getutid ()
76will find the
acabf1c1
MK
77first entry whose
78.I ut_id
79field matches \fIut\->ut_id\fP.
fea681da 80.PP
60a90ecd 81.BR getutline ()
acabf1c1
MK
82searches forward from the current file position in the utmp file.
83It scans entries whose
84.I ut_type
85is \fBUSER_PROCESS\fP
86or \fBLOGIN_PROCESS\fP and returns the first one whose
87.I ut_line
88field
89matches \fIut\->ut_line\fP.
fea681da 90.PP
60a90ecd 91.BR pututline ()
acabf1c1
MK
92writes the
93.I utmp
94structure \fIut\fP into the utmp file.
60a90ecd
MK
95It uses
96.BR getutid ()
97to search for the proper place in the file to insert
c13182ef
MK
98the new entry.
99If it cannot find an appropriate slot for \fIut\fP,
60a90ecd
MK
100.BR pututline ()
101will append the new entry to the end of the file.
47297adb 102.SH RETURN VALUE
60a90ecd
MK
103.BR getutent (),
104.BR getutid (),
60a90ecd 105and
043945ef 106.BR getutline ()
853a397f
MK
107return a pointer to a \fIstruct utmp\fP on success,
108and NULL on failure (which includes the "record not found" case).
89f9f5b2 109This \fIstruct utmp\fP is allocated in static storage, and may be
fea681da 110overwritten by subsequent calls.
847e0d88 111.PP
043945ef
MK
112On success
113.BR pututline ()
114returns
115.IR ut ;
116on failure, it returns NULL.
847e0d88 117.PP
ce515cd4
MK
118.BR utmpname ()
119returns 0 if the new name was successfully stored, or \-1 on failure.
847e0d88 120.PP
cb6a894e 121On failure, these functions
b3adaa68 122.I errno
cb6a894e 123set to indicate the error.
2b587e09
MK
124.SH ERRORS
125.TP
126.B ENOMEM
127Out of memory.
128.TP
129.B ESRCH
130Record not found.
131.PP
132.BR setutent (),
dbf9befc 133.BR pututline (),
2b587e09 134and the
0ae31c56 135.BR getut* ()
2b587e09
MK
136functions can also fail for the reasons described in
137.BR open (2).
2b2581ee 138.SH FILES
7457600f
MK
139.TP
140.I /var/run/utmp
141database of currently logged-in users
142.TP
143.I /var/log/wtmp
144database of past user logins
a5047c38
ZL
145.SH ATTRIBUTES
146For an explanation of the terms used in this section, see
147.BR attributes (7).
c466875e
MK
148.ad l
149.nh
a5047c38
ZL
150.TS
151allbox;
c466875e 152lb lb lbx
a5047c38
ZL
153l l l.
154Interface Attribute Value
155T{
156.BR getutent ()
157T} Thread safety T{
158MT-Unsafe init race:utent
a5047c38
ZL
159race:utentbuf sig:ALRM timer
160T}
161T{
162.BR getutid (),
a5047c38
ZL
163.BR getutline ()
164T} Thread safety T{
165MT-Unsafe init race:utent
a5047c38
ZL
166sig:ALRM timer
167T}
168T{
169.BR pututline ()
170T} Thread safety T{
171MT-Unsafe race:utent
a5047c38
ZL
172sig:ALRM timer
173T}
174T{
175.BR setutent (),
a5047c38 176.BR endutent (),
a5047c38
ZL
177.BR utmpname ()
178T} Thread safety MT-Unsafe race:utent
179.TE
c466875e
MK
180.hy
181.ad
847e0d88 182.sp 1
a5047c38
ZL
183In the above table,
184.I utent
185in
186.I race:utent
187signifies that if any of the functions
bf7bc8b8
MK
188.BR setutent (),
189.BR getutent (),
190.BR getutid (),
191.BR getutline (),
192.BR pututline (),
193.BR utmpname (),
a5047c38 194or
bf7bc8b8 195.BR endutent ()
a5047c38
ZL
196are used in parallel in different threads of a program,
197then data races could occur.
3113c7f3 198.SH STANDARDS
2b2581ee 199XPG2, SVr4.
dd3568a1 200.PP
2b2581ee
MK
201In XPG2 and SVID 2 the function
202.BR pututline ()
203is documented to return void, and that is what it does on many systems
07fc3765 204(AIX, HP-UX).
988db661 205HP-UX introduces a new function
2b2581ee 206.BR _pututline ()
988db661 207with the prototype given above for
07fc3765 208.BR pututline ().
dd3568a1 209.PP
2b2581ee 210All these functions are obsolete now on non-Linux systems.
975dc2bb 211POSIX.1-2001 and POSIX.1-2008, following SUSv1,
2b2581ee 212does not have any of these functions, but instead uses
bdd915e2 213.PP
71c58278 214.RS 4
bdd915e2 215.EX
2b2581ee 216.B #include <utmpx.h>
bdd915e2 217.PP
2b2581ee 218.B struct utmpx *getutxent(void);
2b2581ee 219.B struct utmpx *getutxid(const struct utmpx *);
2b2581ee 220.B struct utmpx *getutxline(const struct utmpx *);
2b2581ee 221.B struct utmpx *pututxline(const struct utmpx *);
2b2581ee 222.B void setutxent(void);
2b2581ee 223.B void endutxent(void);
bdd915e2 224.EE
71c58278 225.RE
490b25e1
MK
226.PP
227These functions are provided by glibc,
228and perform the same task as their equivalents without the "x", but use
229.IR "struct utmpx" ,
230defined on Linux to be the same as
231.IR "struct utmp" .
232For completeness, glibc also provides
233.BR utmpxname (),
234although this function is not specified by POSIX.1.
235.PP
5018c1b4
MK
236On some other systems,
237the \fIutmpx\fP structure is a superset of the \fIutmp\fP structure,
5412da6f
MK
238with additional fields, and larger versions of the existing fields,
239and parallel files are maintained, often
2b2581ee
MK
240.I /var/*/utmpx
241and
242.IR /var/*/wtmpx .
dd3568a1 243.PP
5412da6f
MK
244Linux glibc on the other hand does not use a parallel \fIutmpx\fP file
245since its \fIutmp\fP structure is already large enough.
0b07fbdc
MK
246The "x" functions listed above are just aliases for
247their counterparts without the "x" (e.g.,
248.BR getutxent ()
249is an alias for
662902bf 250.BR getutent ()).
d597239c 251.SH NOTES
c634028a 252.SS Glibc notes
6b8fa90b 253The above functions are not thread-safe.
c13182ef 254Glibc adds reentrant versions
bdd915e2 255.PP
71c58278 256.nf
fea681da 257.B #include <utmp.h>
eaa18d3c 258.PP
fea681da 259.BI "int getutent_r(struct utmp *" ubuf ", struct utmp **" ubufp );
fea681da
MK
260.BI "int getutid_r(struct utmp *" ut ,
261.BI " struct utmp *" ubuf ", struct utmp **" ubufp );
fea681da
MK
262.BI "int getutline_r(struct utmp *" ut ,
263.BI " struct utmp *" ubuf ", struct utmp **" ubufp );
71c58278 264.fi
bdd915e2 265.PP
7f0ec8ee
MK
266Feature Test Macro Requirements for glibc (see
267.BR feature_test_macros (7)):
51f5698d 268.PP
7f0ec8ee
MK
269.BR getutent_r (),
270.BR getutid_r (),
271.BR getutline_r ():
272.nf
273 _GNU_SOURCE
b15b92a5
MK
274 || /* Since glibc 2.19: */ _DEFAULT_SOURCE
275 || /* Glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
7f0ec8ee 276.fi
51f5698d 277.PP
fea681da 278These functions are GNU extensions, analogs of the functions of the
c13182ef
MK
279same name without the _r suffix.
280The
fea681da 281.I ubuf
c4bb193f 282argument gives these functions a place to store their result.
c49a8e2a 283On success, they return 0, and a pointer to the result is written in
acabf1c1 284.IR *ubufp .
dec985f9 285On error, these functions return \-1.
00ac6ce4 286There are no utmpx equivalents of the above functions.
8404ecb5 287(POSIX.1 does not specify such functions.)
a14af333 288.SH EXAMPLES
fea681da 289The following example adds and removes a utmp record, assuming it is run
c13182ef
MK
290from within a pseudo terminal.
291For usage in a real application, you
292should check the return values of
fb186734 293.BR getpwuid (3)
c13182ef 294and
fb186734 295.BR ttyname (3).
fea681da 296.PP
b0b6ab4e 297.\" SRC BEGIN (getutent.c)
207050fa 298.EX
fea681da 299#include <pwd.h>
ad3868f0
AC
300#include <stdlib.h>
301#include <string.h>
302#include <time.h>
fea681da
MK
303#include <unistd.h>
304#include <utmp.h>
305
c13182ef 306int
f1e39c1e 307main(void)
fea681da 308{
cf0a9ace 309 struct utmp entry;
fea681da 310
cf0a9ace 311 system("echo before adding entry:;who");
fea681da 312
8de12063
MK
313 entry.ut_type = USER_PROCESS;
314 entry.ut_pid = getpid();
315 strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen("/dev/"));
cf0a9ace 316 /* only correct for ptys named /dev/tty[pqr][0\-9a\-z] */
8de12063 317 strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen("/dev/tty"));
cf0a9ace 318 time(&entry.ut_time);
8de12063
MK
319 strcpy(entry.ut_user, getpwuid(getuid())\->pw_name);
320 memset(entry.ut_host, 0, UT_HOSTSIZE);
321 entry.ut_addr = 0;
cf0a9ace
MK
322 setutent();
323 pututline(&entry);
fea681da 324
cf0a9ace 325 system("echo after adding entry:;who");
fea681da 326
8de12063
MK
327 entry.ut_type = DEAD_PROCESS;
328 memset(entry.ut_line, 0, UT_LINESIZE);
329 entry.ut_time = 0;
330 memset(entry.ut_user, 0, UT_NAMESIZE);
cf0a9ace
MK
331 setutent();
332 pututline(&entry);
fea681da 333
cf0a9ace 334 system("echo after removing entry:;who");
fea681da 335
cf0a9ace 336 endutent();
5bc8c34c 337 exit(EXIT_SUCCESS);
fea681da 338}
207050fa 339.EE
b0b6ab4e 340.\" SRC END
47297adb 341.SH SEE ALSO
0ad7707a 342.BR getutmp (3),
0a4f8b7b 343.BR utmp (5)