2010-02-03 2 views

답변

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 */ 

리눅스

getpwuid에서 :

getpwuid() 함수는 이 uid와 일치하는 항목에 대해 사용자 데이터베이스를 검색해야합니다.

getpwuid() 함수를 포함 할 char *pw_name 구조체 passwd를

struct passwd 에 대한 포인터를 리턴한다.

사용자 ID를 얻으려면 getuid을 사용하십시오.

+0

버퍼 크기를 하드 코드하려면 257 (UNLEN + 1)을 사용하십시오. Windows에서 사용자 이름의 최대 크기는 – Anders

1

이는 운영체제마다 다릅니다. Windows에서는 GetUserName을 사용하십시오. Unix에서는 getuid을 사용하십시오.

+0

문제는 로컬 사용자 이름이 아닌 컴퓨터 이름에 관한 것입니다. –

+0

이것은 로컬 사용자/로그온 사용자가 아닌 시스템 이름입니다. – BobbyShaftoe

+2

원래 질문은 명확하지 않았습니다. 나는 내 대답을 고쳤다. –

0

C++ 관련 질문이 아닙니다. UNIX 계열 시스템을 사용할 때 환경 변수에서 정보를 찾을 수 있습니다 (100 %가 아님). 이 시스템에서 'id'프로그램을 사용할 수도 있습니다.

일반적으로 가장 빠른 방법은 플랫폼 종속 커널/API 호출을 만드는 것입니다.

cmd.exe 아래의 창에서 USERNAME 환경 변수는 사용자 이름 (사실이 아닌 정보도 포함)을 보유합니다. 정확한지 WINAPI 문서에서 검색하십시오.

+0

입니다. @Notinlist : C++ 관련 질문이 아닙니까? 그는 C++을 사용하고 있습니다. 이것은 C++와 관련된 질문입니다. 어쩌면 당신은 "C++ 관련"이 표준 C++ (예 : #[email protected])만을 의미하는 곳에서 온 것일 수 있습니다.그물에) 여기에 아주 주제로 간주됩니다 : –

+0

미래의 참고, 모든 시스템 (윈도우 포함)에 입력 할 수 있습니다 : 'whoami' 현재 사용자 이름을 얻을 수 있습니다. – chacham15

1

Windows에서 스레드는 가장 할 수 있으며 프로세스는 수행 할 수 없습니다. 프로세스 소유자를 얻으려면 프로세스 토큰에 TokenUser infoclass를 사용하여 GetTokenInformation을 호출해야합니다. 그러면 SID가 부여되며이 SID는 LookupAccountSid의 사용자 이름으로 변환 할 수 있습니다. 스레드 대 프로세스에 신경 쓰지 않는다면 GetUserName()이 좋습니다.

1

에 맥 OSX :

getenv("USER"); 

Linux의 경우 :

getenv("USERNAME"); 
관련 문제