Я разрабатываю приложение. Один из методов должен захватить имя компьютера и пользователя, зарегистрированные на компьютере, а затем отобразить их как пользователю. Мне нужно, чтобы он работал как на Windows, так и на Linux. Каков наилучший способ сделать это?Получить имя компьютера и зарегистрированное имя пользователя
ответ
В Windows, среде можно использовать getenv("COMPUTERNAME")
, getenv("USERNAME")
В Linux - getenv("HOSTNAME")
, getenv("USER")
Окна
Вы можете попробовать использовать GetComputerName
и GetUserName
, вот пример:
#define INFO_BUFFER_SIZE 32767
TCHAR infoBuf[INFO_BUFFER_SIZE];
DWORD bufCharCount = INFO_BUFFER_SIZE;
// Get and display the name of the computer.
if(!GetComputerName(infoBuf, &bufCharCount))
printError(TEXT("GetComputerName"));
_tprintf(TEXT("\nComputer name: %s"), infoBuf);
// Get and display the user name.
if(!GetUserName(infoBuf, &bufCharCount))
printError(TEXT("GetUserName"));
_tprintf(TEXT("\nUser name: %s"), infoBuf);
см: GetComputerName и GetUserName
Linux
Используйте gethostname
, чтобы получить имя компьютера (см gethostname), и getlogin_r
, чтобы получить имя пользователя войти в систему. Вы можете посмотреть дополнительную информацию по адресу man page of getlogin_r. Простое использование следующим образом:
#include <unistd.h>
#include <limits.h>
char hostname[HOST_NAME_MAX];
char username[LOGIN_NAME_MAX];
gethostname(hostname, HOST_NAME_MAX);
getlogin_r(username, LOGIN_NAME_MAX);
В системах POSIX вы можете использовать gethostname
и getlogin
функции, как заявил в unistd.h
.
/*
This is a C program (I've seen the C++ tag too late). Converting
it to a pretty C++ program is left as an exercise to the reader.
*/
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int
main()
{
char hostname[HOST_NAME_MAX];
char username[LOGIN_NAME_MAX];
int result;
result = gethostname(hostname, HOST_NAME_MAX);
if (result)
{
perror("gethostname");
return EXIT_FAILURE;
}
result = getlogin_r(username, LOGIN_NAME_MAX);
if (result)
{
perror("getlogin_r");
return EXIT_FAILURE;
}
result = printf("Hello %s, you are logged in to %s.\n",
username, hostname);
if (result < 0)
{
perror("printf");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Возможный выход:
Hello 5gon12eder, you are logged in to example.com.
Это кажется более безопасным, чем полагаться на переменные окружения, которые не всегда присутствуют.
Я вывод, что последнее утверждение, потому что
- людей страница
getlogin
фактически препятствует его использованию в пользуgetenv("LOGIN")
и getlogin_r
вызова в вышеуказанной программе не удается сENOTTY
, когда я бегу программа изнутри Emacs вместо интерактивного терминала, в то время какgetenv("USER")
работал бы в обеих ситуациях.
Что касается ответа Дениса, обратите внимание, что getenv("HOSTNAME")
для Linux may not always work because the environment variables may not be exported to the program.
Мультиплатформная C++ пример кода для извлечения только имя компьютера (это то, что работает для моих машин Win7 и CentOS):
char *temp = 0;
std::string computerName;
#if defined(WIN32) || defined(_WIN32) || defined(_WIN64)
temp = getenv("COMPUTERNAME");
if (temp != 0) {
computerName = temp;
temp = 0;
}
#else
temp = getenv("HOSTNAME");
if (temp != 0) {
computerName = temp;
temp = 0;
} else {
temp = new char[512];
if (gethostbyname(temp, 512) == 0) { // success = 0, failure = -1
computerName = temp;
}
delete []temp;
temp = 0;
}
#endif
Если вы можете использовать Boost, вы можете сделать это легко получить имя хоста:
#include <boost/asio/ip/host_name.hpp>
// ... whatever ...
auto host_name = boost::asio::ip::host_name();
Это единственный по-настоящему кросс-платформенный ответ на этот вопрос, спасибо! – oLen
- 1. получить имя клиента и имя пользователя компьютера
- 2. Получить имя пользователя компьютера
- 3. Как я могу получить зарегистрированное имя пользователя?
- 4. получить зарегистрированное имя пользователя. (Jsf 2)
- 5. fbml show зарегистрированное имя пользователя
- 6. Java Servlet получает зарегистрированное имя пользователя
- 7. Получить имя компьютера
- 8. Как получить имя пользователя от компьютера?
- 9. Получить IP и имя компьютера
- 10. Не удалось получить «имя компьютера пользователя»
- 11. Как найти имя пользователя системы, зарегистрированное в
- 12. Как получить имя компьютера?
- 13. Получить имя компьютера
- 14. Получить зарегистрированное имя пользователя Windows, связанное с рабочим столом
- 15. Как получить зарегистрированное имя пользователя через omniauth-google-приложения?
- 16. Как получить зарегистрированное имя пользователя/Principal весной MVC REST канал?
- 17. Как получить имя пользователя currenlty, зарегистрированное пользователем authservice
- 18. Как получить имя пользователя, зарегистрированное в роли в представлении?
- 19. Получить зарегистрированное имя пользователя в Mac OS X 10.5
- 20. Как получить имя компьютера человека
- 21. Автоматическое имя компьютера, использующего PowerShell, получить имя хоста и MDT
- 22. C# получить имя пользователя клиента
- 23. имя компьютера пользователя вместе с ip-адресом
- 24. Получить настоящее имя пользователя
- 25. Получить имя пользователя пользователя Windows
- 26. Получить имя компьютера клиента/MAC
- 27. Как получить имя компьютера клиента
- 28. Имя хоста и имя компьютера в окнах.?
- 29. Как получить имя пользователя macosx Имя пользователя в объекте-c
- 30. Получить полное имя пользователя новое имя пользователя
О [HOST_NAME_MAX] (http://stackoverflow.com/questions/30084116/host-name-max-undefined-after-include-limits-h). – Antonio