GETLOGIN(3C)            Standard C Library Functions            GETLOGIN(3C)
NAME
       getlogin, getlogin_r - get login name
SYNOPSIS
       #include <unistd.h>       
char *getlogin(
void);       
char *getlogin_r(
char *name, 
int namelen);
   Standard conforming
       cc [ 
flag ... ] 
file... 
-D_POSIX_PTHREAD_SEMANTICS [ 
library ... ]       
int getlogin_r(
char *name, 
size_t namesize);
DESCRIPTION
       The 
getlogin() function returns a pointer to the login name as found
       in 
/var/adm/utmpx. It can be used in conjunction with 
getpwnam(3C) to
       locate the correct password file entry when the same user 
ID is
       shared by several login names.
       The login name plus the terminating null byte can be up to 33
       characters in length.  Newly-compiled programs should use the       
LOGIN_NAME_MAX symbol, defined in <
limits.h>, to size the buffer.
       Older programs that call 
getlogin()  expect only the legacy
       9-character length.  These automatically link to a version of the       
getlogin() functions that truncates longer login names.  It's also
       possible to compile new programs that link to truncating versions of
       these functions by defining 
__USE_LEGACY_LOGNAME__ in the compile
       environment.
       Some older programs will correctly handle long login names returned
       by the 
getlogin() function.  For this case, the user compatibility
       library 
/usr/lib/getloginx.so.1 redirects to a version of the       
getlogin() function that returns the long name.  This library should
       be added to such an application at runtime using 
LD_PRELOAD.
       If 
getlogin() is called within a process that is not attached to a
       terminal, it returns a null pointer. The correct procedure for
       determining the login name is to call 
cuserid(3C), or to call       
getlogin() and if it fails to call 
getpwuid(3C).
       The 
getlogin_r() function has the same functionality as 
getlogin()       except that the caller must supply a buffer 
name with length 
namelen       to store the result.  The 
name buffer should be at least       
LOGIN_NAME_MAX bytes in size (defined in <
limits.h>). The POSIX
       version (see 
standards(7)) of 
getlogin_r() takes a 
namesize parameter
       of type 
size_t. If the size of the supplied buffer is less than the
       size of 
LOGIN_NAME_MAX and the name, including the null terminator,
       does not fit inside the buffer, than an error will be generated.
       Otherwise, the buffer 
name will be updated with the login name.
RETURN VALUES
       Upon successful completion, 
getlogin() returns a pointer to the login
       name or a null pointer if the user's login name cannot be found.
       Otherwise it returns a null pointer and sets 
errno to indicate the
       error.
       The standard-conforming 
getlogin_r() returns 
0 if successful, or the
       error number upon failure.
ERRORS
       The 
getlogin_r() function will fail if:       
ERANGE                 The size of the buffer is smaller than the result to be
                 returned.       
EINVAL                 And entry for the current user was not found in the                 
/var/adm/utmpx file.
       The 
getlogin() and 
getlogin_r() functions may fail if:       
EMFILE                 There are {
OPEN_MAX} file descriptors 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 size of the buffer is smaller than the result to be
                 returned.
USAGE
       The return value of 
getlogin() points to thread-specific data whose
       content is overwritten on each call by the same thread.
       Three names associated with the current process can be determined:       
getpwuid(geteuid()) returns the name associated with the effective
       user ID of the process; 
getlogin() returns the name associated with
       the current login activity; and 
getpwuid(getuid()) returns the name
       associated with the real user ID of the process.
FILES
       /var/adm/utmpx                         user access and administration information       
/usr/lib/getloginx.so.1                         A compatibility library that returns long login
                         names to older applications.       
/usr/lib/64/getloginx.so.1                         A 64-bit compatibility library to return long login
                         names.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Standard        |
       +--------------------+-----------------+
       |MT-Level            | See below.      |
       +--------------------+-----------------+
SEE ALSO
       geteuid(2), 
getuid(2), 
cuserid(3C), 
getgrnam(3C), 
getpwnam(3C),       
getpwuid(3C), 
utmpx(5), 
attributes(7), 
standards(7)NOTES
       When compiling multithreaded programs, see 
Intro(3).
       The 
getlogin() function is safe to use in multithreaded applications,
       but is discouraged. The 
getlogin_r() function should be used instead.
       Solaris 2.4 and earlier releases provided a 
getlogin_r() as specified
       in POSIX.1c Draft 6. The final POSIX.1c standard changed the
       interface as described above. Support for the Draft 6 interface is
       provided for compatibility only and may not be supported in future
       releases. New applications and libraries should use the standard-
       conforming interface.
                               March 15, 2014                   GETLOGIN(3C)