1

当我登录 Linux Suse10 机器并通过 C++ 程序检查 getlogin_r() 时,我得到了一个正确的结果作为我的登录名。

int main()
{
    char szUserName[64] = {0};

    int nGet = getlogin_r(szUserName, sizeof(szUserName)-1);
    if(0 != nGet)
        {
            printerr();
        }
    printf("%s\n", szUserName);
    char * szHome = getlogin();
    printf("%s\n", szHome);
    return 0;
}

但是在使用 su - name2 之后,我现在更改了登录名。但是 getlogin_r() 仍然显示旧的用户名。

一种解决方案是使用 geteuid()。但是上述问题的原因是什么

4

1 回答 1

6

“使用后su - name2我更改了登录名” - 不,你没有。您更改了用户 ID,而不是登录名。

手册页对su选项进行了说明-:“提供与用户直接登录时用户期望的环境相似的环境。” 显然“相似”与“相同”不同。具体来说,su -不在 /var/run/utmp 中存储登录记录。

于 2012-04-06T13:43:18.720 回答