2010-02-03 22 views

Respuesta

29

de Windows

GetUserName()

Ejemplo:

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

Mira getpwuid:

La función getpwuid() buscará en la base de datos de usuario una entrada con un uid coincidente .

La función getpwuid() devolverá un puntero a una estructura passwd

El struct passwd contendrá char *pw_name.

Usa getuid para obtener la ID de usuario.

+0

Si desea codificar un tamaño de búfer, use 257 (UNLEN + 1) este es el tamaño máximo documentado para un nombre de usuario en Windows – Anders

1

Esto es específico del sistema operativo. En Windows, use GetUserName. En Unix, use getuid.

+0

La pregunta es sobre el nombre de usuario local, no el nombre del equipo. –

+0

Este es el nombre de la máquina no usuario local/usuario conectado. – BobbyShaftoe

+2

La pregunta original no estaba clara. He arreglado mi respuesta. –

0

No es una pregunta relacionada con C++. Puede encontrar información (no 100% segura) en las variables de entorno cuando usa UNIX como sistemas. También puede usar el programa 'id' en estos sistemas.

En general, la manera más rápida es realizar una llamada kernel/API dependiente de la plataforma.

En ventanas bajo cmd.exe, la variable de entorno USERNAME contiene el nombre de usuario (que tampoco es informativo). Busque en la documentación de WINAPI para obtener información precisa.

+0

@Notinlist: ¿qué quiere decir con que no es una pregunta relacionada con C++? Él está usando C++. Esto hace que la pregunta relacionada con C++. Quizás vienes de lugares donde "relacionado con C++" significa solo C++ estándar (como #[email protected]), pero aquí en SO esto se considera muy en el tema :) –

+0

para referencia futura, en todos los sistemas (ventanas incluidas) puede escribir: 'whoami' para obtener el nombre de usuario actual. – chacham15

1

En Windows, un subproceso se puede suplantar, un proceso no. Para obtener el proceso propietario, debe llamar al GetTokenInformation con la clase de información TokenUser en su token de proceso, esto le dará un SID, este SID se puede convertir a un nombre de usuario con LookupAccountSid. Si no te importa el proceso thread versus, GetUserName() está bien.

1

En Mac OS X:

getenv("USER"); 

En Linux:

getenv("USERNAME"); 
Cuestiones relacionadas