1 # SOME DESCRIPTIVE TITLE
2 # Copyright (C) YEAR Free Software Foundation, Inc.
3 # This file is distributed under the same license as the PACKAGE package.
4 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
9 "Project-Id-Version: PACKAGE VERSION\n"
10 "POT-Creation-Date: 2013-09-28 04:06+0900\n"
11 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
12 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13 "Language-Team: LANGUAGE <LL@li.org>\n"
16 "Content-Type: text/plain; charset=UTF-8\n"
17 "Content-Transfer-Encoding: 8bit\n"
20 #: build/C/man3/getutent.3:31
26 #: build/C/man3/getutent.3:31
32 #: build/C/man3/getutent.3:31 build/C/man3/getutmp.3:26 build/C/man3/login.3:25 build/C/man3/updwtmp.3:29 build/C/man5/utmp.5:30
34 msgid "Linux Programmer's Manual"
38 #: build/C/man3/getutent.3:32 build/C/man3/getutmp.3:27 build/C/man3/login.3:26 build/C/man3/updwtmp.3:30 build/C/man5/utmp.5:31
44 #: build/C/man3/getutent.3:35
46 "getutent, getutid, getutline, pututline, setutent, endutent, utmpname - "
47 "access utmp file entries"
51 #: build/C/man3/getutent.3:35 build/C/man3/getutmp.3:29 build/C/man3/login.3:28 build/C/man3/updwtmp.3:32 build/C/man5/utmp.5:33
57 #: build/C/man3/getutent.3:37 build/C/man3/login.3:30 build/C/man5/utmp.5:35
58 msgid "B<#include E<lt>utmp.hE<gt>>"
62 #: build/C/man3/getutent.3:39
63 msgid "B<struct utmp *getutent(void);>"
67 #: build/C/man3/getutent.3:41
68 msgid "B<struct utmp *getutid(struct utmp *>I<ut>B<);>"
72 #: build/C/man3/getutent.3:43
73 msgid "B<struct utmp *getutline(struct utmp *>I<ut>B<);>"
77 #: build/C/man3/getutent.3:45
78 msgid "B<struct utmp *pututline(struct utmp *>I<ut>B<);>"
82 #: build/C/man3/getutent.3:47
83 msgid "B<void setutent(void);>"
87 #: build/C/man3/getutent.3:49
88 msgid "B<void endutent(void);>"
92 #: build/C/man3/getutent.3:51
93 msgid "B<int utmpname(const char *>I<file>B<);>"
97 #: build/C/man3/getutent.3:51 build/C/man3/getutmp.3:37 build/C/man3/login.3:36 build/C/man3/updwtmp.3:41 build/C/man5/utmp.5:35
103 #: build/C/man3/getutent.3:54
105 "New applications should use the POSIX.1-specified \"utmpx\" versions of "
106 "these functions; see CONFORMING TO."
110 #: build/C/man3/getutent.3:63
112 "B<utmpname>() sets the name of the utmp-format file for the other utmp "
113 "functions to access. If B<utmpname>() is not used to set the filename "
114 "before the other functions are used, they assume B<_PATH_UTMP>, as defined "
115 "in I<E<lt>paths.hE<gt>>."
119 #: build/C/man3/getutent.3:68
121 "B<setutent>() rewinds the file pointer to the beginning of the utmp file. "
122 "It is generally a good idea to call it before any of the other functions."
126 #: build/C/man3/getutent.3:73
128 "B<endutent>() closes the utmp file. It should be called when the user code "
129 "is done accessing the file with the other functions."
133 #: build/C/man3/getutent.3:80
135 "B<getutent>() reads a line from the current file position in the utmp "
136 "file. It returns a pointer to a structure containing the fields of the "
137 "line. The definition of this structure is shown in B<utmp>(5)."
141 #: build/C/man3/getutent.3:96
143 "B<getutid>() searches forward from the current file position in the utmp "
144 "file based upon I<ut>. If I<ut-E<gt>ut_type> is one of B<RUN_LVL>, "
145 "B<BOOT_TIME>, B<NEW_TIME>, or B<OLD_TIME>, B<getutid>() will find the first "
146 "entry whose I<ut_type> field matches I<ut-E<gt>ut_type>. If "
147 "I<ut-E<gt>ut_type> is one of B<INIT_PROCESS>, B<LOGIN_PROCESS>, "
148 "B<USER_PROCESS>, or B<DEAD_PROCESS>, B<getutid>() will find the first entry "
149 "whose I<ut_id> field matches I<ut-E<gt>ut_id>."
153 #: build/C/man3/getutent.3:106
155 "B<getutline>() searches forward from the current file position in the utmp "
156 "file. It scans entries whose I<ut_type> is B<USER_PROCESS> or "
157 "B<LOGIN_PROCESS> and returns the first one whose I<ut_line> field matches "
158 "I<ut-E<gt>ut_line>."
162 #: build/C/man3/getutent.3:118
164 "B<pututline>() writes the I<utmp> structure I<ut> into the utmp file. It "
165 "uses B<getutid>() to search for the proper place in the file to insert the "
166 "new entry. If it cannot find an appropriate slot for I<ut>, B<pututline>() "
167 "will append the new entry to the end of the file."
171 #: build/C/man3/getutent.3:118 build/C/man3/getutmp.3:51 build/C/man3/login.3:94
177 #: build/C/man3/getutent.3:127
179 "B<getutent>(), B<getutid>(), and B<getutline>() return a pointer to a "
180 "I<struct utmp> on success, and NULL on failure (which includes the \"record "
181 "not found\" case). This I<struct utmp> is allocated in static storage, and "
182 "may be overwritten by subsequent calls."
186 #: build/C/man3/getutent.3:133
187 msgid "On success B<pututline>() returns I<ut>; on failure, it returns NULL."
191 #: build/C/man3/getutent.3:136
193 "B<utmpname>() returns 0 if the new name was successfully stored, or -1 on "
198 #: build/C/man3/getutent.3:140
200 "In the event of an error, these functions I<errno> set to indicate the "
205 #: build/C/man3/getutent.3:140
211 #: build/C/man3/getutent.3:141
217 #: build/C/man3/getutent.3:144
218 msgid "Out of memory."
222 #: build/C/man3/getutent.3:144
228 #: build/C/man3/getutent.3:147
229 msgid "Record not found."
233 #: build/C/man3/getutent.3:154
235 "B<setutent>(), B<pututline>(), and the B<getut* ()> functions can also fail "
236 "for the reasons described in B<open>(2)."
240 #: build/C/man3/getutent.3:154 build/C/man3/login.3:99 build/C/man3/updwtmp.3:54 build/C/man5/utmp.5:224
246 #: build/C/man3/getutent.3:156
247 msgid "/var/run/utmp\tdatabase of currently logged-in users"
251 #: build/C/man3/getutent.3:158
252 msgid "/var/log/wtmp\tdatabase of past user logins"
256 #: build/C/man3/getutent.3:158 build/C/man3/getutmp.3:55 build/C/man3/login.3:112 build/C/man3/updwtmp.3:58 build/C/man5/utmp.5:228
258 msgid "CONFORMING TO"
262 #: build/C/man3/getutent.3:160
267 #: build/C/man3/getutent.3:170
269 "In XPG2 and SVID 2 the function B<pututline>() is documented to return "
270 "void, and that is what it does on many systems (AIX, HP-UX, Linux libc5). "
271 "HP-UX introduces a new function B<_pututline>() with the prototype given "
272 "above for B<pututline>() (also found in Linux libc5)."
276 #: build/C/man3/getutent.3:174
278 "All these functions are obsolete now on non-Linux systems. POSIX.1-2001, "
279 "following SUSv1, does not have any of these functions, but instead uses"
283 #: build/C/man3/getutent.3:176
284 msgid "B<#include E<lt>utmpx.hE<gt>>"
288 #: build/C/man3/getutent.3:178
289 msgid "B<struct utmpx *getutxent(void);>"
293 #: build/C/man3/getutent.3:180
294 msgid "B<struct utmpx *getutxid(const struct utmpx *);>"
298 #: build/C/man3/getutent.3:182
299 msgid "B<struct utmpx *getutxline(const struct utmpx *);>"
303 #: build/C/man3/getutent.3:184
304 msgid "B<struct utmpx *pututxline(const struct utmpx *);>"
308 #: build/C/man3/getutent.3:186
309 msgid "B<void setutxent(void);>"
313 #: build/C/man3/getutent.3:188
314 msgid "B<void endutxent(void);>"
318 #: build/C/man3/getutent.3:197
320 "These functions are provided by glibc, and perform the same task as their "
321 "equivalents without the \"x\", but use I<struct utmpx>, defined on Linux to "
322 "be the same as I<struct utmp>. For completeness, glibc also provides "
323 "B<utmpxname>(), although this function is not specified by POSIX.1."
327 #: build/C/man3/getutent.3:205
329 "On some other systems, the I<utmpx> structure is a superset of the I<utmp> "
330 "structure, with additional fields, and larger versions of the existing "
331 "fields, and parallel files are maintained, often I</var/*/utmpx> and "
336 #: build/C/man3/getutent.3:213
338 "Linux glibc on the other hand does not use a parallel I<utmpx> file since "
339 "its I<utmp> structure is already large enough. The \"x\" functions listed "
340 "above are just aliases for their counterparts without the \"x\" (e.g., "
341 "B<getutxent>() is an alias for B<getutent>())."
345 #: build/C/man3/getutent.3:213 build/C/man3/getutmp.3:58 build/C/man3/login.3:115 build/C/man3/updwtmp.3:71 build/C/man5/utmp.5:280
351 #: build/C/man3/getutent.3:214
357 #: build/C/man3/getutent.3:217
358 msgid "The above functions are not thread-safe. Glibc adds reentrant versions"
362 #: build/C/man3/getutent.3:222
365 "B<#define _GNU_SOURCE> /* or _SVID_SOURCE or _BSD_SOURCE;\n"
366 "\\& see B<feature_test_macros>(7) */\n"
367 "B<#include E<lt>utmp.hE<gt>>\n"
371 #: build/C/man3/getutent.3:224
373 msgid "B<int getutent_r(struct utmp *>I<ubuf>B<, struct utmp **>I<ubufp>B<);>\n"
377 #: build/C/man3/getutent.3:227
380 "B<int getutid_r(struct utmp *>I<ut>B<,>\n"
381 "B< struct utmp *>I<ubuf>B<, struct utmp **>I<ubufp>B<);>\n"
385 #: build/C/man3/getutent.3:230
388 "B<int getutline_r(struct utmp *>I<ut>B<,>\n"
389 "B< struct utmp *>I<ubuf>B<, struct utmp **>I<ubufp>B<);>\n"
393 #: build/C/man3/getutent.3:242
395 "These functions are GNU extensions, analogs of the functions of the same "
396 "name without the _r suffix. The I<ubuf> argument gives these functions a "
397 "place to store their result. On success they return 0, and a pointer to the "
398 "result is written in I<*ubufp>. On error these functions return -1. There "
399 "are no utmpx equivalents of the above functions. (POSIX.1 does not specify "
404 #: build/C/man3/getutent.3:242
410 #: build/C/man3/getutent.3:250
412 "The following example adds and removes a utmp record, assuming it is run "
413 "from within a pseudo terminal. For usage in a real application, you should "
414 "check the return values of B<getpwuid>(3) and B<ttyname>(3)."
418 #: build/C/man3/getutent.3:257
421 "#include E<lt>string.hE<gt>\n"
422 "#include E<lt>stdlib.hE<gt>\n"
423 "#include E<lt>pwd.hE<gt>\n"
424 "#include E<lt>unistd.hE<gt>\n"
425 "#include E<lt>utmp.hE<gt>\n"
429 #: build/C/man3/getutent.3:262
433 "main(int argc, char *argv[])\n"
435 " struct utmp entry;\n"
439 #: build/C/man3/getutent.3:264
441 msgid " system(\"echo before adding entry:;who\");\n"
445 #: build/C/man3/getutent.3:276
448 " entry.ut_type = USER_PROCESS;\n"
449 " entry.ut_pid = getpid();\n"
450 " strcpy(entry.ut_line, ttyname(STDIN_FILENO) + strlen(\"/dev/\"));\n"
451 " /* only correct for ptys named /dev/tty[pqr][0-9a-z] */\n"
452 " strcpy(entry.ut_id, ttyname(STDIN_FILENO) + strlen(\"/dev/tty\"));\n"
453 " time(&entry.ut_time);\n"
454 " strcpy(entry.ut_user, getpwuid(getuid())-E<gt>pw_name);\n"
455 " memset(entry.ut_host, 0, UT_HOSTSIZE);\n"
456 " entry.ut_addr = 0;\n"
458 " pututline(&entry);\n"
462 #: build/C/man3/getutent.3:278
464 msgid " system(\"echo after adding entry:;who\");\n"
468 #: build/C/man3/getutent.3:285
471 " entry.ut_type = DEAD_PROCESS;\n"
472 " memset(entry.ut_line, 0, UT_LINESIZE);\n"
473 " entry.ut_time = 0;\n"
474 " memset(entry.ut_user, 0, UT_NAMESIZE);\n"
476 " pututline(&entry);\n"
480 #: build/C/man3/getutent.3:287
482 msgid " system(\"echo after removing entry:;who\");\n"
486 #: build/C/man3/getutent.3:291
490 " exit(EXIT_SUCCESS);\n"
495 #: build/C/man3/getutent.3:292 build/C/man3/getutmp.3:69 build/C/man3/login.3:130 build/C/man3/updwtmp.3:87 build/C/man5/utmp.5:338
501 #: build/C/man3/getutent.3:295
502 msgid "B<getutmp>(3), B<utmp>(5)"
506 #: build/C/man3/getutent.3:295 build/C/man3/getutmp.3:72 build/C/man3/login.3:133 build/C/man3/updwtmp.3:90 build/C/man5/utmp.5:352
512 #: build/C/man3/getutent.3:302 build/C/man3/getutmp.3:79 build/C/man3/login.3:140 build/C/man3/updwtmp.3:97 build/C/man5/utmp.5:359
514 "This page is part of release 3.54 of the Linux I<man-pages> project. A "
515 "description of the project, and information about reporting bugs, can be "
516 "found at \\%http://www.kernel.org/doc/man-pages/."
520 #: build/C/man3/getutmp.3:26
526 #: build/C/man3/getutmp.3:26
532 #: build/C/man3/getutmp.3:26 build/C/man5/utmp.5:30
538 #: build/C/man3/getutmp.3:29
539 msgid "getutmp, getutmpx - copy utmp structure to utmpx, and vice versa"
543 #: build/C/man3/getutmp.3:33
546 "B<#define _GNU_SOURCE> /* See feature_test_macros(7) */\n"
547 "B<#include E<lt>utmpx.hE<gt>>\n"
551 #: build/C/man3/getutmp.3:36
554 "B< void getutmp(const struct utmpx *>I<ux>B<, struct utmp *>I<u>B<);>\n"
555 "B< void getutmpx(const struct utmp *>I<u>B<, struct utmpx *>I<ux>B<);>\n"
559 #: build/C/man3/getutmp.3:51
561 "The B<getutmp>() function copies the fields of the I<utmpx> structure "
562 "pointed to by I<ux> to the corresponding fields of the I<utmp> structure "
563 "pointed to by I<u>. The B<getutmpx>() function performs the converse "
568 #: build/C/man3/getutmp.3:53
569 msgid "These functions do not return a value."
573 #: build/C/man3/getutmp.3:53
579 #: build/C/man3/getutmp.3:55
580 msgid "These functions first appeared in glibc in version 2.1.1."
584 #: build/C/man3/getutmp.3:58
586 "These functions are nonstandard, but appear on a few other systems, such as "
587 "Solaris and NetBSD."
590 #. e.g., on Solaris, the utmpx structure is rather larger than utmp.
592 #: build/C/man3/getutmp.3:69
594 "These functions exist primarily for compatibility with other systems where "
595 "the I<utmp> and I<utmpx> structures contain different fields, or the size of "
596 "corresponding fields differs. On Linux, the two structures contain the same "
597 "fields, and the fields have the same sizes."
601 #: build/C/man3/getutmp.3:72 build/C/man3/login.3:133
602 msgid "B<getutent>(3), B<utmp>(5)"
606 #: build/C/man3/login.3:25
612 #: build/C/man3/login.3:25
618 #: build/C/man3/login.3:25 build/C/man3/updwtmp.3:29
624 #: build/C/man3/login.3:28
625 msgid "login, logout - write utmp and wtmp entries"
629 #: build/C/man3/login.3:32
630 msgid "B<void login(const struct utmp *>I<ut>B<);>"
634 #: build/C/man3/login.3:34
635 msgid "B<int logout(const char *>I<ut_line>B<);>"
639 #: build/C/man3/login.3:36
640 msgid "Link with I<-lutil>."
644 #: build/C/man3/login.3:41
646 "The utmp file records who is currently using the system. The wtmp file "
647 "records all logins and logouts. See B<utmp>(5)."
651 #: build/C/man3/login.3:48
653 "The function B<login>() takes the supplied I<struct utmp>, I<ut>, and "
654 "writes it to both the utmp and the wtmp file."
658 #: build/C/man3/login.3:52
659 msgid "The function B<logout>() clears the entry in the utmp file again."
663 #: build/C/man3/login.3:52
669 #: build/C/man3/login.3:78
671 "More precisely, B<login>() takes the argument I<ut> struct, fills the field "
672 "I<ut-E<gt>ut_type> (if there is such a field) with the value "
673 "B<USER_PROCESS>, and fills the field I<ut-E<gt>ut_pid> (if there is such a "
674 "field) with the process ID of the calling process. Then it tries to fill "
675 "the field I<ut-E<gt>ut_line>. It takes the first of I<stdin>, I<stdout>, "
676 "I<stderr> that is a terminal, and stores the corresponding pathname minus a "
677 "possible leading I</dev/> into this field, and then writes the struct to the "
678 "utmp file. On the other hand, if no terminal name was found, this field is "
679 "filled with \"???\" and the struct is not written to the utmp file. After "
680 "this, the struct is written to the wtmp file."
684 #: build/C/man3/login.3:94
686 "The B<logout>() function searches the utmp file for an entry matching the "
687 "I<ut_line> argument. If a record is found, it is updated by zeroing out the "
688 "I<ut_name> and I<ut_host> fields, updating the I<ut_tv> timestamp field and "
689 "setting I<ut_type> (if there is such a field) to B<DEAD_PROCESS>."
693 #: build/C/man3/login.3:99
695 "The B<logout>() function returns 1 if the entry was successfully written to "
696 "the database, or 0 if an error occurred."
700 #: build/C/man3/login.3:100
702 msgid "I</var/run/utmp>"
706 #: build/C/man3/login.3:106
708 "user accounting database, configured through B<_PATH_UTMP> in "
709 "I<E<lt>paths.hE<gt>>"
713 #: build/C/man3/login.3:106 build/C/man3/updwtmp.3:55
715 msgid "I</var/log/wtmp>"
719 #: build/C/man3/login.3:112
721 "user accounting log file, configured through B<_PATH_WTMP> in "
722 "I<E<lt>paths.hE<gt>>"
726 #: build/C/man3/login.3:115
727 msgid "Not in POSIX.1-2001. Present on the BSDs."
731 #: build/C/man3/login.3:130
733 "Note that the member I<ut_user> of I<struct utmp> is called I<ut_name> in "
734 "BSD. Therefore, I<ut_name> is defined as an alias for I<ut_user> in "
735 "I<E<lt>utmp.hE<gt>>."
739 #: build/C/man3/updwtmp.3:29
745 #: build/C/man3/updwtmp.3:29
751 #: build/C/man3/updwtmp.3:32
752 msgid "updwtmp, logwtmp - append an entry to the wtmp file"
756 #: build/C/man3/updwtmp.3:35
758 msgid "B<#include E<lt>utmp.hE<gt>>\n"
762 #: build/C/man3/updwtmp.3:37
764 msgid "B<void updwtmp(const char *>I<wtmp_file>B<, const struct utmp *>I<ut>B<);>\n"
768 #: build/C/man3/updwtmp.3:40
771 "B<void logwtmp(const char *>I<line>B<, const char *>I<name>B<, const char "
776 #: build/C/man3/updwtmp.3:46
777 msgid "B<updwtmp>() appends the utmp structure I<ut> to the wtmp file."
781 #: build/C/man3/updwtmp.3:54
783 "B<logwtmp>() constructs a utmp structure using I<line>, I<name>, I<host>, "
784 "current time and current process ID. Then it calls B<updwtmp>() to append "
785 "the structure to the wtmp file."
789 #: build/C/man3/updwtmp.3:58
790 msgid "database of past user logins"
794 #: build/C/man3/updwtmp.3:61
795 msgid "Not in POSIX.1-2001. Present on Solaris, NetBSD, and perhaps other systems."
799 #: build/C/man3/updwtmp.3:61
805 #: build/C/man3/updwtmp.3:71
807 "Both functions are available under glibc2, but not under libc5. However, "
808 "B<logwtmp>() used to occur in the old libbsd. These days, the B<logwtmp>() "
809 "function is included in libutil. (Hence you'll need to add I<-lutil> to "
810 "your compiler command line to get it.)"
814 #: build/C/man3/updwtmp.3:75
816 "For consistency with the other \"utmpx\" functions (see B<getutxent>(3)), "
817 "glibc provides (since version 2.1):"
821 #: build/C/man3/updwtmp.3:78
823 msgid "B<#include E<lt>utmpx.hE<gt>>\n"
827 #: build/C/man3/updwtmp.3:80
830 "B<void updwtmpx (const char *>I<wtmpx_file>B<, const struct utmpx "
835 #: build/C/man3/updwtmp.3:87
837 "This function performs the same task as B<updwtmp>(), but differs in that it "
838 "takes a I<utmpx> structure as its last argument."
842 #: build/C/man3/updwtmp.3:90
843 msgid "B<getutxent>(3), B<wtmp>(5)"
847 #: build/C/man5/utmp.5:30
853 #: build/C/man5/utmp.5:30
859 #: build/C/man5/utmp.5:33
860 msgid "utmp, wtmp - login records"
864 #: build/C/man5/utmp.5:42
866 "The I<utmp> file allows one to discover information about who is currently "
867 "using the system. There may be more users currently using the system, "
868 "because not all programs use utmp logging."
872 #: build/C/man5/utmp.5:52
874 "B<Warning:> I<utmp> must not be writable by the user class \"other\", "
875 "because many system programs (foolishly) depend on its integrity. You risk "
876 "faked system logfiles and modifications of system files if you leave I<utmp> "
877 "writable to any user other than the owner and group owner of the file."
881 #: build/C/man5/utmp.5:60
883 "The file is a sequence of I<utmp> structures, declared as follows in "
884 "I<E<lt>utmp.hE<gt>> (note that this is only one of several definitions "
885 "around; details depend on the version of libc):"
889 #: build/C/man5/utmp.5:64
891 msgid "/* Values for ut_type field, below */\n"
895 #: build/C/man5/utmp.5:79
898 "#define EMPTY 0 /* Record does not contain valid info\n"
899 " (formerly known as UT_UNKNOWN on Linux) */\n"
900 "#define RUN_LVL 1 /* Change in system run-level (see\n"
902 "#define BOOT_TIME 2 /* Time of system boot (in I<ut_tv>) */\n"
903 "#define NEW_TIME 3 /* Time after system clock change\n"
904 " (in I<ut_tv>) */\n"
905 "#define OLD_TIME 4 /* Time before system clock change\n"
906 " (in I<ut_tv>) */\n"
907 "#define INIT_PROCESS 5 /* Process spawned by B<init>(8) */\n"
908 "#define LOGIN_PROCESS 6 /* Session leader process for user login */\n"
909 "#define USER_PROCESS 7 /* Normal process */\n"
910 "#define DEAD_PROCESS 8 /* Terminated process */\n"
911 "#define ACCOUNTING 9 /* Not implemented */\n"
915 #: build/C/man5/utmp.5:83
918 "#define UT_LINESIZE 32\n"
919 "#define UT_NAMESIZE 32\n"
920 "#define UT_HOSTSIZE 256\n"
924 #: build/C/man5/utmp.5:88
927 "struct exit_status { /* Type for ut_exit, below */\n"
928 " short int e_termination; /* Process termination status */\n"
929 " short int e_exit; /* Process exit status */\n"
934 #: build/C/man5/utmp.5:116
938 " short ut_type; /* Type of record */\n"
939 " pid_t ut_pid; /* PID of login process */\n"
940 " char ut_line[UT_LINESIZE]; /* Device name of tty - \"/dev/\" */\n"
941 " char ut_id[4]; /* Terminal name suffix,\n"
942 " or inittab(5) ID */\n"
943 " char ut_user[UT_NAMESIZE]; /* Username */\n"
944 " char ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or\n"
945 " kernel version for run-level\n"
947 " struct exit_status ut_exit; /* Exit status of a process\n"
948 " marked as DEAD_PROCESS; not\n"
949 " used by Linux init(8) */\n"
950 " /* The ut_session and ut_tv fields must be the same size when\n"
951 " compiled 32- and 64-bit. This allows data files and shared\n"
952 " memory to be shared between 32- and 64-bit applications. */\n"
953 "#if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32\n"
954 " int32_t ut_session; /* Session ID (B<getsid>(2)),\n"
955 " used for windowing */\n"
957 " int32_t tv_sec; /* Seconds */\n"
958 " int32_t tv_usec; /* Microseconds */\n"
959 " } ut_tv; /* Time entry was made */\n"
961 " long ut_session; /* Session ID */\n"
962 " struct timeval ut_tv; /* Time entry was made */\n"
967 #: build/C/man5/utmp.5:122
970 " int32_t ut_addr_v6[4]; /* Internet address of remote\n"
971 " host; IPv4 address uses\n"
972 " just ut_addr_v6[0] */\n"
973 " char __unused[20]; /* Reserved for future use */\n"
978 #: build/C/man5/utmp.5:130
981 "/* Backward compatibility hacks */\n"
982 "#define ut_name ut_user\n"
983 "#ifndef _NO_UT_TIME\n"
984 "#define ut_time ut_tv.tv_sec\n"
986 "#define ut_xtime ut_tv.tv_sec\n"
987 "#define ut_addr ut_addr_v6[0]\n"
991 #: build/C/man5/utmp.5:140
993 "This structure gives the name of the special file associated with the user's "
994 "terminal, the user's login name, and the time of login in the form of "
995 "B<time>(2). String fields are terminated by a null byte (\\(aq\\e0\\(aq) "
996 "if they are shorter than the size of the field."
1000 #: build/C/man5/utmp.5:157
1002 "The first entries ever created result from B<init>(8) processing "
1003 "B<inittab>(5). Before an entry is processed, though, B<init>(8) cleans up "
1004 "utmp by setting I<ut_type> to B<DEAD_PROCESS>, clearing I<ut_user>, "
1005 "I<ut_host>, and I<ut_time> with null bytes for each record which I<ut_type> "
1006 "is not B<DEAD_PROCESS> or B<RUN_LVL> and where no process with PID I<ut_pid> "
1007 "exists. If no empty record with the needed I<ut_id> can be found, "
1008 "B<init>(8) creates a new one. It sets I<ut_id> from the inittab, I<ut_pid> "
1009 "and I<ut_time> to the current values, and I<ut_type> to B<INIT_PROCESS>."
1013 #: build/C/man5/utmp.5:176
1015 "B<mingetty>(8) (or B<agetty>(8)) locates the entry by the PID, changes "
1016 "I<ut_type> to B<LOGIN_PROCESS>, changes I<ut_time>, sets I<ut_line>, and "
1017 "waits for connection to be established. B<login>(1), after a user has been "
1018 "authenticated, changes I<ut_type> to B<USER_PROCESS>, changes I<ut_time>, "
1019 "and sets I<ut_host> and I<ut_addr>. Depending on B<mingetty>(8) (or "
1020 "B<agetty>(8)) and B<login>(1), records may be located by I<ut_line> instead "
1021 "of the preferable I<ut_pid>."
1025 #: build/C/man5/utmp.5:182
1027 "When B<init>(8) finds that a process has exited, it locates its utmp entry "
1028 "by I<ut_pid>, sets I<ut_type> to B<DEAD_PROCESS>, and clears I<ut_user>, "
1029 "I<ut_host> and I<ut_time> with null bytes."
1033 #: build/C/man5/utmp.5:194
1035 "B<xterm>(1) and other terminal emulators directly create a B<USER_PROCESS> "
1036 "record and generate the I<ut_id> by using the string that suffix part of the "
1037 "terminal name (the characters following I</dev/[pt]ty>). If they find a "
1038 "B<DEAD_PROCESS> for this ID, they recycle it, otherwise they create a new "
1039 "entry. If they can, they will mark it as B<DEAD_PROCESS> on exiting and it "
1040 "is advised that they null I<ut_line>, I<ut_time>, I<ut_user>, and I<ut_host> "
1045 #: build/C/man5/utmp.5:202
1047 "B<telnetd>(8) sets up a B<LOGIN_PROCESS> entry and leaves the rest to "
1048 "B<login>(1) as usual. After the telnet session ends, B<telnetd>(8) cleans "
1049 "up utmp in the described way."
1053 #: build/C/man5/utmp.5:224
1055 "The I<wtmp> file records all logins and logouts. Its format is exactly like "
1056 "I<utmp> except that a null username indicates a logout on the associated "
1057 "terminal. Furthermore, the terminal name B<~> with username B<shutdown> or "
1058 "B<reboot> indicates a system shutdown or reboot and the pair of terminal "
1059 "names B<|>/B<}> logs the old/new system time when B<date>(1) changes it. "
1060 "I<wtmp> is maintained by B<login>(1), B<init>(8), and some versions of "
1061 "B<getty>(8) (e.g., B<mingetty>(8) or B<agetty>(8)). None of these "
1062 "programs creates the file, so if it is removed, record-keeping is turned "
1067 #: build/C/man5/utmp.5:226
1068 msgid "/var/run/utmp"
1072 #: build/C/man5/utmp.5:228
1073 msgid "/var/log/wtmp"
1077 #: build/C/man5/utmp.5:247
1079 "POSIX.1 does not specify a I<utmp> structure, but rather one named I<utmpx>, "
1080 "with specifications for the fields I<ut_type>, I<ut_pid>, I<ut_line>, "
1081 "I<ut_id>, I<ut_user>, and I<ut_tv>. POSIX.1 does not specify the lengths of "
1082 "the I<ut_line> and I<ut_user> fields."
1086 #: build/C/man5/utmp.5:253
1088 "Linux defines the I<utmpx> structure to be the same as the I<utmp> "
1093 #: build/C/man5/utmp.5:253
1095 msgid "Comparison with historical systems"
1099 #: build/C/man5/utmp.5:256
1101 "Linux utmp entries conform neither to v7/BSD nor to System V; they are a mix "
1106 #: build/C/man5/utmp.5:263
1108 "v7/BSD has fewer fields; most importantly it lacks I<ut_type>, which causes "
1109 "native v7/BSD-like programs to display (for example) dead or login entries. "
1110 "Further, there is no configuration file which allocates slots to sessions. "
1111 "BSD does so because it lacks I<ut_id> fields."
1115 #: build/C/man5/utmp.5:275
1117 "In Linux (as in System V), the I<ut_id> field of a record will never change "
1118 "once it has been set, which reserves that slot without needing a "
1119 "configuration file. Clearing I<ut_id> may result in race conditions leading "
1120 "to corrupted utmp entries and potential security holes. Clearing the "
1121 "abovementioned fields by filling them with null bytes is not required by "
1122 "System V semantics, but makes it possible to run many programs which assume "
1123 "BSD semantics and which do not modify utmp. Linux uses the BSD conventions "
1124 "for line contents, as documented above."
1127 #. mtk: What is the referrent of "them" in the following sentence?
1128 #. System V only uses the type field to mark them and logs
1129 #. informative messages such as \fB"new time"\fP in the line field.
1131 #: build/C/man5/utmp.5:280
1132 msgid "System V has no I<ut_host> or I<ut_addr_v6> fields."
1136 #: build/C/man5/utmp.5:288
1138 "Unlike various other systems, where utmp logging can be disabled by removing "
1139 "the file, utmp must always exist on Linux. If you want to disable B<who>(1) "
1140 "then do not make utmp world readable."
1144 #: build/C/man5/utmp.5:291
1146 "The file format is machine-dependent, so it is recommended that it be "
1147 "processed only on the machine architecture where it was created."
1151 #: build/C/man5/utmp.5:312
1153 "Note that on I<biarch> platforms, that is, systems which can run both 32-bit "
1154 "and 64-bit applications (x86-64, ppc64, s390x, etc.), I<ut_tv> is the same "
1155 "size in 32-bit mode as in 64-bit mode. The same goes for I<ut_session> and "
1156 "I<ut_time> if they are present. This allows data files and shared memory to "
1157 "be shared between 32-bit and 64-bit applications. This is achieved by "
1158 "changing the type of I<ut_session> to I<int32_t>, and that of I<ut_tv> to a "
1159 "struct with two I<int32_t> fields I<tv_sec> and I<tv_usec>. Since I<ut_tv> "
1160 "may not be the same as I<struct timeval>, then instead of the call:"
1164 #: build/C/man5/utmp.5:316
1166 msgid "gettimeofday((struct timeval *) &ut.ut_tv, NULL);\n"
1170 #: build/C/man5/utmp.5:320
1171 msgid "the following method of setting this field is recommended:"
1175 #: build/C/man5/utmp.5:325
1179 "struct timeval tv;\n"
1183 #: build/C/man5/utmp.5:329
1186 "gettimeofday(&tv, NULL);\n"
1187 "ut.ut_tv.tv_sec = tv.tv_sec;\n"
1188 "ut.ut_tv.tv_usec = tv.tv_usec;\n"
1192 #: build/C/man5/utmp.5:336
1194 "Note that the I<utmp> struct from libc5 has changed in libc6. Because of "
1195 "this, binaries using the old libc5 struct will corrupt I</var/run/utmp> "
1196 "and/or I</var/log/wtmp>."
1200 #: build/C/man5/utmp.5:336
1206 #: build/C/man5/utmp.5:338
1207 msgid "This man page is based on the libc5 one, things may work differently now."
1211 #: build/C/man5/utmp.5:352
1213 "B<ac>(1), B<date>(1), B<last>(1), B<login>(1), B<utmpdump>(1), B<who>(1), "
1214 "B<getutent>(3), B<getutmp>(3), B<login>(3), B<logout>(3), B<logwtmp>(3), "
1215 "B<updwtmp>(3), B<init>(8)"