getlogin函数用法详解
getlogin函数简介
- 头文件包含
#include <unistd.h>
#include <stdio.h>
- 函数定义
char *getlogin(void);
int getlogin_r(char * buf , size_t bufsize );
char *cuserid(char * string );
getlogin函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘getlogin’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <unistd.h>
#include <stdio.h>
getlogin函数详细描述
getlogin ()返回一个指向字符串的指针,该字符串包含登录到进程控制终端的用户的名称,如果无法确定该信息,则返回一个空指针。该字符串是静态分配的,可能会在后续调用此函数或cuserid ()时被覆盖
getlogin_r ()在大小为bufsize 的数组buf中返回相同的用户名
cuserid ()返回一个指向字符串的指针,该字符串包含与进程的有效用户ID相关联的用户名。如果string不是空指针,它应该是一个至少可以容纳L_cuserid个字符的数组;字符串在此数组中返回。否则,返回指向静态区域中字符串的指针。此字符串是静态分配的,可能会在后续调用此函数或getlogin ()时被覆盖
宏L_cuserid是一个整数常量,它指示一个数组可能需要存储用户名多长时间。PPPP0在
这些函数使您的程序能够明确地识别正在运行( cuserid ())的用户或登录该会话( getlogin ())的用户(当涉及set-user-ID程序时,这些函数可能会有所不同)
在大多数情况下,使用环境变量LOGNAME来确定用户是谁更有用。这更灵活,因为用户可以任意设置PPPP0。
getlogin函数返回值
getlogin ()成功时返回指向用户名的指针,失败时返回NULL,并设置errno来指示错误的原因。getlogin_r ()成功时返回0,失败时返回非零。
getlogin函数错误码
POSIX指定:
- EMFILE 已达到每个进程打开的文件描述符的数量限制。
- ENFILE 已达到系统范围内打开文件总数的限制。
- 呼叫进程没有控制终端。
- ERANGE (getlogin_r)用户名的长度,包括终止的空字节((aq\e0(aq),大于bufsize
Linux/glibc还具有:
- ENOENT UTMP文件中没有相应的条目。
- ENOMEM 内存不足,无法分配密码结构。
- ENOTTY 标准输入没有引用终端。(参见BUGS。)
评论区