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 (仅对 getlogin 和 getlogin_r 子例程启用 UNIX03 方式) 来启用此行为。
返回值
返回值可以指向其内容被每个调用覆盖的静态数据。 如果找不到登录名,那么 getlogin 子例程返回空指针。
错误代码
如果 getlogin 函数失败,那么它将返回以下一个或多个错误代码:
| 项 | 描述 |
|---|---|
| EMFILE | 指示 OPEN_MAX 文件描述符当前已在调用进程中打开。 |
| ENFILE | 指示系统中当前打开的最大允许文件数。 |
| ENXIO | 指示呼叫进程没有控制终端。 |
文件
| 项 | 描述 |
|---|---|
| /etc/utmp | 包含登录系统的用户的记录。 |