12
votes

Comment puis-je obtenir le nom d'utilisateur de la personne exécutant mon programme?

Comment puis-je obtenir le nom d'utilisateur du propriétaire de processus (l'utilisateur qui exécute mon programme) en C ++?


0 commentaires

5 Réponses :


1
votes

Ceci est spécifique au système d'exploitation. Sous Windows, utilisez Getansername . Sur UNIX, utilisez GETUID .


2 commentaires

La question concerne le nom d'utilisateur local, pas le nom de l'ordinateur.


Ceci est le nom de la machine NON utilisateur local / enregistré sur l'utilisateur.



29
votes

Windows

getansername ()

Exemple: xxx

linux

regarder GetPwuid :

La fonction getPwuid () doit rechercher la base de données utilisateur pour une entrée avec un Assortiment UID.

la fonction getPwuid () doit retourner un pointeur sur une structure passwd

le struct passwd contiendra char * pw_name .

Utilisez getuid pour obtenir l'utilisateur id.


1 commentaires

Si vous souhaitez coder une taille de mémoire tampon, utilisez 257 (sans précédent + 1) Il s'agit de la taille maximale documentée pour un nom d'utilisateur sous Windows.



0
votes

Ce n'est pas une question connexe C ++. Vous pouvez trouver des informations (pas sûres à 100%) dans les variables d'environnement lors de l'utilisation de systèmes de type Unix. Vous pouvez également utiliser le programme 'ID' sur ces systèmes.

En général, le moyen le plus rapide est de créer un appel de noyau / API dépendant de la plate-forme.

sur Windows sous cmd.exe La variable d'environnement nom d'utilisateur contient le nom d'utilisateur (qui est également informatif non factuel). Recherche dans la documentation Winapi pour précision.


2 commentaires

@Notinlist: Que voulez-vous dire que ce n'est pas une question connexe C ++? Il utilise c ++. Cela rend la question C ++ liée. Peut-être que vous venez d'endroits où "C ++ associé" ne signifie que la standard C ++ (telle que #c++@irc.freenode.net), mais ici, ceci est donc considéré comme très sujet :)


Pour une référence future, sur tous les systèmes (Windows inclus), vous pouvez taper: whoami pour obtenir le nom d'utilisateur actuel.



1
votes

sur Windows, un thread peut être imitée, un processus ne peut pas. Pour obtenir le processus propriétaire, vous devez appeler GetTokenAnformation avec l'infoclasse Tokenuser sur votre jeton de processus, cela vous donnera un SID, ce SID peut être converti en nom d'utilisateur avec LookupAccountsid . Si vous ne vous souciez pas du processus de thread VS, Getansername () va bien.


0 commentaires

2
votes

sur Mac OSX:

getenv("USERNAME");


0 commentaires