getlogin 子例程

用途

获取用户的登录名。

标准 C 库 (libc.a)

语法

include <sys/types.h>
include <unistd.h>
include <limits.h>
char *getlogin (void)

描述

注意: 请勿在多线程环境中使用 getlogin 子例程。 要访问此子例程的线程安全版本,请参阅 getlogin_r (getlogin_r Subroutine) 子例程。
注意: getlogin 子例程返回一个指向可能被连续调用覆盖的区域的指针。

getlogin 子例程返回指向/etc/utmp 文件中的登录名的指针。 当多个登录名共享同一用户标识时,可以将 getlogin 子例程与 getpwnam (getpdid , getpwuid , getpwnam , putpdid , setpdid 或 endpdid Subroutine) 子例程配合使用,以找到正确的密码文件条目。

如果 getlogin 子例程在/etc/utmp 文件中找不到登录名,那么它将返回进程 LOGNAME 环境变量。 如果在未连接到终端的进程中调用 getlogin 子例程,那么它将返回 LOGNAME 环境变量的值。 如果 LOGNAME 环境变量不存在,那么将返回空指针。

在 UNIX03 方式下,如果在 /etc/utmp 文件中找不到登录名,或者如果没有进程的控制终端,那么 getlogin 子例程不会返回 LOGNAME 环境变量,它会返回空指针并设置错误代码 ENXIO。 通过设置环境变量 XPG_SUS_ENV=ON (这将启用所有 UNIX03 功能) 或通过设置变量 XPG_GETLOGIN=ON (仅对 getlogingetlogin_r 子例程启用 UNIX03 方式) 来启用此行为。

返回值

返回值可以指向其内容被每个调用覆盖的静态数据。 如果找不到登录名,那么 getlogin 子例程返回空指针。

错误代码

如果 getlogin 函数失败,那么它将返回以下一个或多个错误代码:

描述
EMFILE 指示 OPEN_MAX 文件描述符当前已在调用进程中打开。
ENFILE 指示系统中当前打开的最大允许文件数。
ENXIO 指示呼叫进程没有控制终端。

文件

描述
/etc/utmp 包含登录系统的用户的记录。