在UNIX类型的操作系统中获取当前用户帐户的显示名称
在Windows中,用户帐户具有帐户名称和与该帐户关联的“真实姓名”。这可以通过GetUserNameEx()
检索。类似地,在UNIX类型的操作系统中,存在“手指信息”(由chfn
等设置,以及通过桌面上的各种GUI工具UNIXen)。 UNIX类型的操作系统(例如macOS和Linux)中的用户进程如何检索此信息?在UNIX类型的操作系统中获取当前用户帐户的显示名称
理想的解决方案是使用libc API,而不依赖于产生finger
进程等。
在Unix类系统上,我可能会打电话getuid
,然后getpwuid
或getpwuid_r
。
喜欢的东西:
#include <pwd.h>
#include <stdio.h>
#include <unistd.h>
int
main(void)
{
struct passwd *pw;
pw = getpwuid(getuid());
if (pw == 0) {
perror("getpwuid failed");
return 1;
}
printf("username: %s; realname: '%s'\n", pw->pw_name, pw->pw_gecos);
return 0;
}
不幸的是(或者在Ubuntu上,'pw_gecos'字段没有在macOS上提供实名)。 – fluffy
登录需要使用可以找到的真实姓名创建,大概是这样,但是上面的代码在Mac OS X 10.11.6(El Capitan)中原样使用,其中“cc”是“Apple LLVM 7.3版”。 0(clang-703.0.31)“,在Ubuntu 16.04上,”cc“是”cc(Ubuntu 5.4.0-6ubuntu1〜16.04.2)5.4.0 20160609“。 你是怎么试图让它在Mac和Ubuntu上工作的? – sjnarv
哦,有趣!我使用过'getpwent()'而不是'getpwuid(getuid())',这就是它失败的原因。 getpwuid在两台机器上工作正常(macOS 10.12和Ubuntu 15.10)。谢谢! – fluffy
壳脚本解决方案:
在Linux中,可以在一个子过程使用getent passwd
,然后解析出实名字段(它应该是逗号之间的五分之一)。
在macOS上,您可以使用id -f
。
这是否帮助? http://stackoverflow.com/questions/6619277/how-to-get-the-logged-in-users-real-name-in-unix – Sundeep
@Sundeep是的! 'getpwent'似乎是在正确的方向。谢谢。此外,这个问题应该被关闭为重复:) – fluffy
嗯,至少在OSX上,'getpwent'实际上并没有返回我需要的信息,但问题仍然是重复的。 :) – fluffy