Как я могу получить имя пользователя, исполняющего мою программу? - PullRequest
11 голосов
/ 03 февраля 2010

Как я могу получить имя пользователя владельца процесса (пользователя, выполняющего мою программу) в C ++?

Ответы [ 5 ]

29 голосов
/ 03 февраля 2010

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 () должна искать база данных пользователей для записи с соответствующий идентификатор.

Функция getpwuid () должна возвращать указатель на структуру passwd

struct passwd будет содержать char *pw_name.

Используйте getuid, чтобы получить идентификатор пользователя.

1 голос
/ 10 марта 2014

В Mac OSX:

getenv("USER");

В Linux:

getenv("USERNAME");
1 голос
/ 03 февраля 2010

В Windows поток может быть олицетворен, а процесс - нет.Чтобы получить владельца процесса , вам нужно вызвать GetTokenInformation с инфоклассом TokenUser на вашем токене процесса, это даст вам SID, этот SID может быть преобразован в имя пользователя с LookupAccountSid.Если вы не заботитесь о потоке против процесса, с GetUserName () все в порядке.

1 голос
/ 03 февраля 2010

Это зависит от операционной системы.В Windows используйте GetUserName .В Unix используйте getuid .

0 голосов
/ 03 февраля 2010

Это не вопрос, связанный с C ++. Вы можете найти информацию (не на 100% уверенную) в переменных среды при использовании UNIX-подобных систем. Вы также можете использовать программу id в этих системах.

В общем, самый быстрый способ - сделать зависящий от платформы вызов ядра / API.

В windows под cmd.exe переменная среды USERNAME содержит имя пользователя (которое также является информационным, а не фактическим) Точный поиск в документации по WINAPI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...