当我登录 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()。但是出现上述问题的原因是什么
最佳答案
“在使用 su - name2
之后我更改了登录名”- 不,你没有。您更改了用户 ID,而不是登录名。
su
的手册页对 -
选项进行了说明:“提供类似于用户直接登录时所期望的环境。”显然“相似”不同于“相同”。具体来说,su -
不会在/var/run/utmp 中存储登录记录。
关于c++ - Linux中getlogin函数的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044168/