我怎样才能得到执行我的程序的人的用户名?

我如何获得进程所有者(执行我的程序的用户)的用户名?

视窗

GetUserName()

例:

char user_name[UNLEN+1]; DWORD user_name_size = sizeof(user_name); if (GetUserName(user_name, &user_name_size)) cout << "Your user name is: " << user_name << endl; else /* Handle error */ 

Linux的

看看getpwuid :

getpwuid()函数将在用户数据库中搜索具有匹配的uid的条目。

getpwuid()函数将返回一个指向结构密码的指针

struct passwd将包含char *pw_name

使用getuid获取用户标识。

这是特定于操作系统的。 在Windows上,使用GetUserName 。 在unix上,使用getuid 。

在Windows上,一个线程可以被模拟,一个进程不能。 要获得流程所有者,您应该在流程标记上使用TokenUser infoclass调用GetTokenInformation ,这将为您提供一个SID,此SID可以转换为具有LookupAccountSid的用户名。 如果你不关心线程vs进程,GetUserName()很好。

在Mac OSX上:

 getenv("USER"); 

在Linux上:

 getenv("USERNAME"); 

这不是一个C + +相关的问题。 使用UNIX系统时,可以在环境变量中找到信息(不是100%确定的)。 你也可以在这些系统上使用'id'程序。

一般来说,最快的方法是进行平台相关的内核/ API调用。

在cmd.exe下的窗口中,USERNAME环境变量保存用户名(这也是不实际的信息)。 在WINAPI文档中搜索精确。