曲径通幽论坛

标题: getlogin() -- 取得登录用户名称 [打印本页]

作者: beyes    时间: 2011-12-24 12:47
标题: getlogin() -- 取得登录用户名称
getlogin() 原型如下:
[Plain Text] 纯文本查看 复制代码
#include <unistd.h>
char *getlogin(void);

getlogin() 函数返回一个指向登录到当前控制终端的用户名的指针。指针所指向的用户名所存放的空间是由程序自行分配的一个静态字符串数组。如果再次调用 getlogin() 或者是 cuserid() 函数,那么这个空间会被覆盖。

由于 getlogin() 所获取的用户名是从 /var/run/utmp 这个文件里进行查找的,如果一些安全程序对该文件做了限制或干扰,那么 getlogin() 函数将无法获得正确值。

运行该程序的用户不一定得是登录到当前控制终端的用户。换句话来说就是,如果你登录的用户是 beyes ,然后你用 su 命令切换到 root 用户,那么在 root 下运行该程序,那么显示的用户名仍然是 beyes 。

getlogin() 有潜在的安全问题,如果考虑安全因素,可以避免使用。同样的,环境变量 LOGNAME 也能获取当前登录的用户名,比如:
echo $LOGNAME
beyes

测试代码
[C++] 纯文本查看 复制代码
#include <stdio.h>
#include <unistd.h>

int main()
{
    printf(" I am %s.\n", getlogin());

    return 0;
}

运行输出:
./getlogin
I am beyes.





欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2