# login

## NAME



           login, logout - write utmp and wtmp entries
    


## LIBRARY



           System utilities library (_libutil_ , _-lutil_)
    


## SYNOPSIS



           **#include <utmp.h>**
    
           **void login(const struct utmp ***_ut_**);**
           **int logout(const char ***_ut_line_**);**
    


## DESCRIPTION



           The utmp file records who is currently using the system.  The wtmp
           file records all logins and logouts.  See utmp(5).
    
           The function **login**() takes the supplied _struct utmp_ , _ut_ , and
           writes it to both the utmp and the wtmp file.
    
           The function **logout**() clears the entry in the utmp file again.
    
       **GNU details**
           More precisely, **login**() takes the argument _ut_ struct, fills the
           field _ut- >ut_type_ (if there is such a field) with the value
           **USER_PROCESS** , and fills the field _ut- >ut_pid_ (if there is such a
           field) with the process ID of the calling process.  Then it tries
           to fill the field _ut- >ut_line_.  It takes the first of _stdin_ ,
           _stdout_ , _stderr_ that is a terminal, and stores the corresponding
           pathname minus a possible leading _/dev/_ into this field, and then
           writes the struct to the utmp file.  On the other hand, if no
           terminal name was found, this field is filled with "???"  and the
           struct is not written to the utmp file.  After this, the struct is
           written to the wtmp file.
    
           The **logout**() function searches the utmp file for an entry matching
           the _ut_line_ argument.  If a record is found, it is updated by
           zeroing out the _ut_name_ and _ut_host_ fields, updating the _ut_tv_
           timestamp field and setting _ut_type_ (if there is such a field) to
           **DEAD_PROCESS**.
    


## RETURN VALUE



           The **logout**() function returns 1 if the entry was successfully
           written to the database, or 0 if an error occurred.
    


## FILES



           _/var/run/utmp_
                  user accounting database, configured through **_PATH_UTMP** in
                  _< paths.h>_
    
           _/var/log/wtmp_
                  user accounting log file, configured through **_PATH_WTMP** in
                  _< paths.h>_
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌───────────────────┬───────────────┬────────────────────────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├───────────────────┼───────────────┼────────────────────────────┤
           │ **login**(), **logout**() │ Thread safety │ MT-Unsafe race:utent       │
           │                   │               │ sig:ALRM timer             │
           └───────────────────┴───────────────┴────────────────────────────┘
    
           In the above table, _utent_ in _race:utent_ signifies that if any of
           the functions setutent(3), getutent(3), or endutent(3) are used in
           parallel in different threads of a program, then data races could
           occur.  **login**() and **logout**() calls those functions, so we use
           race:utent to remind users.
    


## VERSIONS



           The member _ut_user_ of _struct utmp_ is called _ut_name_ in BSD.
           Therefore, _ut_name_ is defined as an alias for _ut_user_ in _< utmp.h>_.
    


## STANDARDS



           BSD.
    


* * *