如何获取执行程序的人的用户名?

时间:2010-02-03 02:29:21

标签: c++ linux winapi posix

如何在C ++中获取进程所有者的用户名(正在执行我的程序的用户)?

5 个答案:

答案 0 :(得分:29)

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()函数将搜索   带有a的条目的用户数据库   匹配uid。

     

getpwuid()函数应返回一个   指向struct passwd的指针

struct passwd将包含char *pw_name

使用getuid获取用户ID。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在Windows上,一个线程可以被模拟,一个进程不能。要获取进程所有者,您应该使用进程令牌上的TokenUser infoclass调用GetTokenInformation,这将为您提供SID,此SID可以转换为LookupAccountSid的用户名。如果你不关心线程与进程,GetUserName()就可以了。

答案 3 :(得分:1)

在Mac OSX上:

getenv("USER");

在Linux上:

getenv("USERNAME");

答案 4 :(得分:0)

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

通常,最快的方法是进行与平台相关的内核/ API调用。

在cmd.exe下的窗口上,USERNAME环境变量保存用户名(这也是信息而非事实)。在WINAPI文档中搜索是否准确。