GETUTXENT(3C)           Standard C Library Functions           GETUTXENT(3C)
NAME
       getutxent, getutxid, getutxline, pututxline, setutxent, endutxent,
       utmpxname, getutmp, getutmpx, updwtmp, updwtmpx - user accounting
       database functions
SYNOPSIS
       #include <utmpx.h>       
struct utmpx *getutxent(
void);       
struct utmpx *getutxid(
const struct utmpx *id);       
struct utmpx *getutxline(
const struct utmpx *line);       
struct utmpx *pututxline(
const struct utmpx *utmpx);       
void setutxent(
void);       
void endutxent(
void);       
int utmpxname(
const char *file);       
void getutmp(
struct utmpx *utmpx, 
struct utmp *utmp);       
void getutmpx(
struct utmp *utmp, 
struct utmpx *utmpx);       
void updwtmp(
char *wfile, 
struct utmp *utmp);       
void updwtmpx(
char *wfilex, 
struct utmpx *utmpx);
DESCRIPTION
       These functions provide access to the user accounting database, 
utmpx       (see 
utmpx(5)). Entries in the database are described by the
       definitions and data structures in 
<utmpx.h>.
       The 
utmpx structure contains the following members:
         char                 ut_user[32];   /* user login name */
         char                 ut_id[4];      /* /etc/inittab id */
                                             /* (usually line #) */
         char                 ut_line[32];   /* device name */
                                             /* (console, lnxx) */
         pid_t                ut_pid;        /* process id */
         short                ut_type;       /* type of entry */
         struct exit_status   ut_exit;       /* exit status of a process */
                                             /* marked as DEAD_PROCESS */
         struct timeval       ut_tv;         /* time entry was made */
         int                  ut_session;    /* session ID, used for */
                                             /* windowing */
         short                ut_syslen;     /* significant length of */
                                             /* ut_host */
                                             /* including terminating null */
         char                 ut_host[257];  /* host name, if remote */
       The 
exit_status structure includes the following members:
         short   e_termination;   /* termination status */
         short   e_exit;          /* exit status */   
getutxent()       The 
getutxent() function reads in the next entry from a 
utmpx       database. If the database is not already open, it opens it. If it
       reaches the end of the database, it fails.   
getutxid()       The 
getutxid() function searches forward from the current point in
       the 
utmpx database until it finds an entry with a 
ut_type matching       
id->
ut_type, if the type specified is 
RUN_LVL, 
BOOT_TIME, 
DOWN_TIME,       
OLD_TIME, or 
NEW_TIME. If the type specified in 
id is 
INIT_PROCESS,       
LOGIN_PROCESS, 
USER_PROCESS, or 
DEAD_PROCESS, then 
getutxid() will
       return a pointer to the first entry whose type is one of these four
       and whose 
ut_id member matches 
id->
ut_id. If the end of database is
       reached without a match, it fails.   
getutxline()       The 
getutxline() function searches forward from the current point in
       the 
utmpx database until it finds an entry of the type 
LOGIN_PROCESS       or 
USER_PROCESS which also has a 
ut_line string matching the       
line->
ut_line string.  If the end of the database is reached without
       a match, it fails.   
pututxline()       The 
pututxline() function writes the supplied 
utmpx structure into
       the 
utmpx database.  It uses 
getutxid() to search forward for the
       proper place if it finds that it is not already at the proper place.
       It is expected that normally the user of 
pututxline() will have
       searched for the proper entry using one of the 
getutx() routines.  If
       so, 
pututxline() will not search.  If 
pututxline() does not find a
       matching slot for the new entry, it will add a new entry to the end
       of the database.  It returns a pointer to the  
utmpx structure. When
       called by a non-root user, 
pututxline() invokes a 
setuid() root
       program to verify and write the entry, since the 
utmpx database is
       normally writable only by root.  In this event, the 
ut_name member
       must correspond to the actual user name associated with the process;
       the  
ut_type member must be either 
USER_PROCESS or 
DEAD_PROCESS; and
       the 
ut_line member must be a device special file and be writable by
       the user.   
setutxent()       The 
setutxent() function resets the input stream to the beginning.
       This should be done before each search for a new entry if it is
       desired that the entire database be examined.   
endutxent()       The 
endutxent() function closes the currently open database.   
utmpxname()       The 
utmpxname() function allows the user to change the name of the
       database file examined from 
/var/adm/utmpx to any other file, most
       often 
/var/adm/wtmpx. If the file does not exist, this will not be
       apparent until the first attempt to reference the file is made.  The       
utmpxname() function does not open the file, but closes the old file
       if it is currently open and saves the new file name. The new file
       name must end with the "x" character to allow the name of the
       corresponding 
utmp file to be easily obtainable.; otherwise, an error
       value of 
0 is returned. The function returns 
1 on success.   
getutmp()       The 
getutmp() function copies the information stored in the members
       of the 
utmpx structure to the corresponding members of the 
utmp       structure. If the information in any member of  
utmpx does not fit in
       the corresponding 
utmp member, the data is silently truncated. (See       
getutent(3C) for  
utmp structure)   
getutmpx()       The 
getutmpx() function copies the information stored in the members
       of the 
utmp structure to the corresponding members of the 
utmpx       structure. (See 
getutent(3C) for  
utmp structure)   
updwtmp()       The 
updwtmp() function can be used in two ways.
       If 
wfile is 
/var/adm/wtmp, the 
utmp format record supplied by the
       caller is converted to a 
utmpx format record and the 
/var/adm/wtmpx       file is updated (because the 
/var/adm/wtmp file no longer exists,
       operations on 
wtmp are converted to operations on 
wtmpx by the
       library functions.
       If 
wfile is a file other than 
/var/adm/wtmp, it is assumed to be an
       old file in 
utmp format and is updated directly with the 
utmp format
       record supplied by the caller.   
updwtmpx()       The 
updwtmpx() function writes the contents of the 
utmpx structure
       pointed to by 
utmpx to the database.   
utmpx structure
       The values of the 
e_termination and 
e_exit members of the 
ut_exit       structure are valid only for records of type 
DEAD_PROCESS.  For 
utmpx       entries created by 
init(8),  these values are set according to the
       result of the 
wait() call that 
init performs on the process when the
       process exits. See the 
wait(3C), manual page for the values 
init       uses. Applications creating 
utmpx entries can set 
ut_exit values
       using the following code example:
         u->ut_exit.e_termination = WTERMSIG(process->p_exit)
         u->ut_exit.e_exit = WEXITSTATUS(process->p_exit)
       See 
wait.h(3HEAD) for descriptions of the 
WTERMSIG and 
WEXITSTATUS       macros.
       The 
ut_session member is not acted upon by the operating system. It
       is used by applications interested in creating 
utmpx entries.
       For records of type 
USER_PROCESS, the 
nonuserx() macro uses value of
       the 
ut_exit.e_exit member to mark 
utmpx entries as real logins (as
       opposed to multiple xterms started by the same user on a window
       system). This allows the system utilities that display users to
       obtain an accurate indication of the number of actual users, while
       still permitting each 
pty to have a 
utmpx record (as most
       applications expect). The 
NONROOT_USRX macro defines the value that       
login places in the 
ut_exit.e_exit member.
RETURN VALUES
       Upon successful completion, 
getutxent(), 
getutxid(), and 
getutxline()       each return a pointer to a 
utmpx structure containing a copy of the
       requested entry in the user accounting database.  Otherwise a null
       pointer is returned.
       The return value may point to a static area which is overwritten by a
       subsequent call to 
getutxid () or 
getutxline().
       Upon successful completion, 
pututxline() returns a pointer to a 
utmpx       structure containing a copy of the entry added to the user accounting
       database.  Otherwise a null pointer is returned.
       The 
endutxent() and 
setutxent() functions return no value.
       A null pointer is returned upon failure to read, whether for
       permissions or having reached the end of file, or upon failure to
       write.
USAGE
       These functions use buffered standard I/O for input, but 
pututxline()       uses an unbuffered write to avoid race conditions between processes
       trying to modify the 
utmpx and 
wtmpx files.
       Applications should not access the 
utmpx and 
wtmpx databases
       directly, but should use these functions to ensure that these
       databases are maintained consistently.
FILES
       /var/adm/utmpx                         user access and accounting information       
/var/adm/wtmpx                         history of user access and accounting information
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | See below.      |
       +--------------------+-----------------+
       |MT-Level            | Unsafe          |
       +--------------------+-----------------+
       The 
endutxent(), 
getutxent(), 
getutxid(), 
getutxline(), 
pututxline(),
       and 
setutxent() functions are Standard.
SEE ALSO
       getutent(3C), 
ttyslot(3C), 
wait(3C), 
wait.h(3HEAD), 
utmpx(5),       
attributes(7), 
standards(7)NOTES
       The most current entry is saved in a static structure.  Multiple
       accesses require that it be copied before further accesses are made.
       On each call to either 
getutxid() or 
getutxline(), the routine
       examines the static structure before performing more I/O. If the
       contents of the static structure match what it is searching for, it
       looks no further. For this reason, to use 
getutxline() to search for
       multiple occurrences it would be necessary to zero out the static
       after each success, or 
getutxline() would just return the same
       structure over and over again. There is one exception to the rule
       about emptying the structure before further reads are done.  The
       implicit read done by 
pututxline() (if it finds that it is not
       already at the correct place in the file) will not hurt the contents
       of the static structure returned by the 
getutxent(), 
getutxid(), or       
getutxline() routines, if the user has just modified those contents
       and passed the pointer back to 
pututxline().
                              November 21, 2014                GETUTXENT(3C)