Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       getlogin, getlogin_r - get login name

SYNOPSIS

       #include <unistd.h>

       char *getlogin(void);

       int getlogin_r(char *name, size_t namesize);

DESCRIPTION

       The  getlogin()  function  shall  return  a  pointer  to a string containing the user name
       associated by the login activity with the controlling terminal of the current process.  If
       getlogin()  returns a non-null pointer, then that pointer points to the name that the user
       logged in under, even if there are several login names with the same user ID.

       The getlogin() function need not be reentrant. A function  that  is  not  required  to  be
       reentrant is not required to be thread-safe.

       The  getlogin_r()  function  shall  put the name associated by the login activity with the
       controlling terminal of the current process in the character array pointed to by name. The
       array  is  namesize characters long and should have space for the name and the terminating
       null character. The maximum size of the login name is {LOGIN_NAME_MAX}.

       If getlogin_r() is successful, name points to the name the user used  at  login,  even  if
       there are several login names with the same user ID.

RETURN VALUE

       Upon  successful completion, getlogin() shall return a pointer to the login name or a null
       pointer if the user's login name cannot be  found.  Otherwise,  it  shall  return  a  null
       pointer and set errno to indicate the error.

       The  return value from getlogin() may point to static data whose content is overwritten by
       each call.

       If successful, the getlogin_r() function shall return zero;  otherwise,  an  error  number
       shall be returned to indicate the error.

ERRORS

       The getlogin() and getlogin_r() functions may fail if:

       EMFILE {OPEN_MAX} file descriptors are currently open in the calling process.

       ENFILE The maximum allowable number of files is currently open in the system.

       ENXIO  The calling process has no controlling terminal.

       The getlogin_r() function may fail if:

       ERANGE The  value  of  namesize  is  smaller  than the length of the string to be returned
              including the terminating null character.

       The following sections are informative.

EXAMPLES

   Getting the User Login Name
       The following example calls the getlogin()  function  to  obtain  the  name  of  the  user
       associated  with  the  calling  process,  and  passes  this  information to the getpwnam()
       function to get the associated user database information.

              #include <unistd.h>
              #include <sys/types.h>
              #include <pwd.h>
              #include <stdio.h>
              ...
              char *lgn;
              struct passwd *pw;
              ...
              if ((lgn = getlogin()) == NULL || (pw = getpwnam(lgn)) == NULL) {
                  fprintf(stderr, "Get of user information failed.\n"); exit(1);
                  }

APPLICATION USAGE

       Three names associated with the current process can be  determined:  getpwuid(  geteuid())
       shall  return  the  name  associated with the effective user ID of the process; getlogin()
       shall return the name associated with the current login activity; and getpwuid(  getuid())
       shall return the name associated with the real user ID of the process.

       The  getlogin_r()  function  is  thread-safe  and returns values in a user-supplied buffer
       instead of possibly using a static data area that may be overwritten by each call.

RATIONALE

       The getlogin() function returns a pointer to the user's login name. The same user  ID  may
       be  shared by several login names. If it is desired to get the user database entry that is
       used during login, the result of getlogin() should be used to provide the argument to  the
       getpwnam() function. (This might be used to determine the user's login shell, particularly
       where a single user has multiple login shells with distinct login names, but the same user
       ID.)

       The  information  provided  by the cuserid() function, which was originally defined in the
       POSIX.1-1988 standard and subsequently removed, can be obtained by the following:

              getpwuid(geteuid())

       while the information provided by historical implementations of cuserid() can be  obtained
       by:

              getpwuid(getuid())

       The  thread-safe  version  of this function places the user name in a user-supplied buffer
       and returns a non-zero value if it fails. The non-thread-safe version may return the  name
       in a static data area that may be overwritten by each call.

FUTURE DIRECTIONS

       None.

SEE ALSO

       getpwnam()  ,  getpwuid()  ,  geteuid()  ,  getuid()  ,  the  Base  Definitions  volume of
       IEEE Std 1003.1-2001, <limits.h>, <unistd.h>

COPYRIGHT

       Portions of this text are reprinted and  reproduced  in  electronic  form  from  IEEE  Std
       1003.1,  2003  Edition,  Standard  for Information Technology -- Portable Operating System
       Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2003  by
       the  Institute  of  Electrical  and  Electronics Engineers, Inc and The Open Group. In the
       event of any discrepancy between this version and the original IEEE  and  The  Open  Group
       Standard,  the  original  IEEE  and  The  Open Group Standard is the referee document. The
       original Standard can be obtained online at http://www.opengroup.org/unix/online.html .