2010-02-03 55 views

回答

29

的Windows

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文件

struct passwd將包含char *pw_name。使用getuid獲得用戶ID。

+0

如果你想硬編碼的緩衝區大小,使用257(UNLEN + 1),這是最大文件大小在Windows – Anders 2010-02-03 13:46:58

1

這是特定於操作系統。在Windows上,使用GetUserName。在unix上,使用getuid

+0

的問題是關於本地用戶名,而不是計算機名稱。 – 2010-02-03 02:33:47

+0

這是機器名稱不是本地用戶/登錄用戶。 – BobbyShaftoe 2010-02-03 02:34:50

+2

原來的問題並不清楚。我已經解決了我的答案。 – 2010-02-03 02:36:59

0

這不是一個C++相關的問題。使用UNIX系統時,可以在環境變量中找到信息(不是100%確定的)。您也可以在這些系統上使用'id'程序。

通常,最快的方法是進行平臺相關的內核/ API調用。

在cmd.exe的下窗口USERNAME環境變量中保存的用戶名(這也是不信息事實)。在WINAPI文檔中搜索精確。

+0

@Notinlist用戶名:你是什麼意思它不是一個C++相關的問題?他使用C++。這使得C++相關的問題。也許你來自「C++相關」僅指標準C++的地方(如#[email protected]。淨),但在這裏,這是非常在主題:) – 2010-02-03 16:43:34

+0

供將來參考,在所有系統(包括窗口),你可以鍵入:'whoami'獲得當前用戶名。 – chacham15 2012-03-03 01:48:50

1

在windows上,一個線程可以被模擬,一個進程不能。爲了得到過程老闆你應該叫GetTokenInformation與您的進程令牌的TokenUser infoclass,這會給你一個SID,這個SID可以轉換爲一個用戶名與LookupAccountSid。如果你不關心線程vs進程,GetUserName()很好。

1

在Mac OSX:

getenv("USER"); 

在Linux上:

getenv("USERNAME"); 
相關問題