曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4972|回复: 0
打印 上一主题 下一主题

[用户与组] getlogin() -- 取得登录用户名称

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-12-24 12:47:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 05:43 , Processed in 0.078699 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表