如何在C ++中获取进程所有者的用户名(正在执行我的程序的用户)?
答案 0 :(得分:29)
示例:
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 */
查看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文档中搜索是否准确。