2010-02-03 5 views

Répondre

29

de Windows

GetUserName()

Exemple:

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

Regardez getpwuid:

La fonction getpwuid() recherchera dans la base de données utilisateur pour une entrée avec un uid correspondant .

La fonction getpwuid() renvoie un pointeur à une struct passwd

Le struct passwd contiendra char *pw_name.

Utilisez getuid pour obtenir l'ID utilisateur.

+0

Si vous voulez coder en dur une taille de tampon, utilisez 257 (UNLEN + 1) c'est la taille maximale documentée pour un nom d'utilisateur sur Windows – Anders

1

Ceci est spécifique au système d'exploitation. Sous Windows, utilisez GetUserName. Sur unix, utilisez getuid.

+0

La question porte sur le nom d'utilisateur local, et non le nom de l'ordinateur. –

+0

Il s'agit du nom de la machine et non de l'utilisateur local/de l'utilisateur connecté. – BobbyShaftoe

+2

La question initiale n'était pas claire. J'ai corrigé ma réponse. –

0

Ce n'est pas une question liée au C++. Vous pouvez trouver des informations (pas 100% sûr) dans les variables d'environnement lors de l'utilisation de systèmes UNIX. Vous pouvez également utiliser le programme 'id' sur ces systèmes.

En général, le moyen le plus rapide consiste à effectuer un appel noyau/API dépendant de la plateforme.

Sous Windows sous cmd.exe, la variable d'environnement USERNAME contient le nom d'utilisateur (qui est également informatif et non factuel). Rechercher dans la documentation WINAPI pour plus précis.

+0

@Notinlist: que voulez-vous dire par là n'est pas une question liée au C++? Il utilise C++. Cela rend la question liée à C++. Peut-être que vous venez d'endroits où "lié à C++" signifie seulement C++ standard (tel que #[email protected]), mais ici sur SO c'est considéré très dans le sujet :) –

+0

pour référence future, sur tous les systèmes (fenêtres incluses) vous pouvez taper: 'whoami' pour obtenir le nom d'utilisateur actuel. – chacham15

1

Sur Windows, un thread peut être usurpé, un processus ne peut pas. Pour obtenir le processus propriétaire, vous devez appeler GetTokenInformation avec le TokenUser infoclass sur votre jeton de processus, cela vous donnera un SID, ce SID peut être converti en un nom d'utilisateur avec LookupAccountSid. Si vous ne vous souciez pas de thread vs process, GetUserName() est bien.

1

Sur Mac OS X:

getenv("USER"); 

Sur Linux:

getenv("USERNAME"); 
Questions connexes