Ich entwickle eine Anwendung. Eine der Methoden muss den Computernamen und den Benutzer erfassen, die auf dem Computer angemeldet sind, und dann beide dem Benutzer anzeigen. Ich brauche es für Windows und Linux. Was ist der beste Weg, dies zu tun?Abrufen des Computernamens und des angemeldeten Benutzernamens
Antwort
In Windows- Umgebung können Sie getenv("COMPUTERNAME")
verwenden getenv("USERNAME")
In Linux-getenv("HOSTNAME")
, getenv("USER")
Siehe getenv reference
Windows-
Sie können versuchen, GetComputerName
undzu verwenden, hier ist ein Beispiel:
#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);
siehe: GetComputerName und GetUserName
Linux
Verwenden gethostname
Computernamen (siehe gethostname) zu bekommen, und getlogin_r
erhalten Benutzername anmelden. Weitere Informationen finden Sie unter man page of getlogin_r. Einfache Bedienung wie folgt:
#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);
Auf POSIX-Systemen können Sie die gethostname
und getlogin
Funktionen nutzen, die beide in unistd.h
erklärt.
/*
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;
}
Mögliche Ausgabe:
Hello 5gon12eder, you are logged in to example.com.
Dies scheint sicherer als auf Umgebungsvariablen angewiesen, die nicht immer vorhanden.
Ich abziehende die letzte Aussage, weil
- die Manpage von
getlogin
tatsächlich seine Verwendung fürgetenv("LOGIN")
und schreckt
- der
getlogin_r
Anruf in dem obigen Programm nicht mitENOTTY
, wenn ich das laufen Programm von innerhalb Emacs anstelle eines interaktiven Terminals, währendgetenv("USER")
in beiden Situationen gearbeitet hätte.
In Bezug auf Denis Antwort, beachten Sie, dass getenv("HOSTNAME")
für Linux may not always work because the environment variables may not be exported to the program.
Multi-Plattform C++ Codebeispiel nur die Computernamen zu holen (das ist, was für meinen Win7 und CentOS Maschinen gearbeitet):
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
Wenn Sie Boost-verwenden können, können Sie dies einfach das tun bekommen können Hostname:
#include <boost/asio/ip/host_name.hpp>
// ... whatever ...
auto host_name = boost::asio::ip::host_name();
Dies ist die einzige wirklich plattformübergreifende Antwort auf diese Frage, danke! – oLen
- 1. Abrufen des angemeldeten Benutzernamens aus der Webanwendung
- 2. Abrufen des Benutzernamens/Kennworts des angemeldeten Benutzers in Windows
- 3. Abrufen des angemeldeten Benutzernamens und Hostnamens in Windows
- 4. VBScript - Abrufen des Computernamens und/oder des vollständigen Netzwerkdateipfads
- 5. Abrufen des aktuellen Windows-Benutzernamens in Silverlight
- 6. C# .NET Abrufen des Benutzernamens des Computers mit Windows-Dienst
- 7. Web-Setup-Projekt - Abrufen des aktuellen Computernamens
- 8. Ermitteln des Computernamens des Kunden
- 9. Django Model: Zurückgeben des Benutzernamens von derzeit angemeldeten Benutzer
- 10. Abrufen des Benutzernamens in einer Modellklasse
- 11. Abrufen des Benutzernamens von den Werten HKEY_USERS
- 12. Ermitteln des angemeldeten Benutzernamens unter Mac OS X 10.5
- 13. Abrufen des aktuell angemeldeten Benutzers (FullToken Context)
- 14. Abrufen des lokalen Computernamens über Citrix Sitzung in .NET
- 15. Abrufen des aktuellen Active Directory-Benutzernamens von PHP
- 16. Abrufen des Benutzernamens des aktuellen Benutzers, der mit SQLite in Android
- 17. Benutzereigenschaft des angemeldeten Benutzers in .NET Core
- 18. Ändern des Computernamens auf einem IIS 7
- 19. Ermitteln des Benutzernamens von Slack API
- 20. Manuelles Ändern des Benutzernamens in Asp.Net Mitgliedschaft
- 21. CURRENT_DATE Abrufen des Monats und des Jahres
- 22. Abrufen des JSON-Schlüssels und des Werts
- 23. Django Auth: zunehmende maximale Länge des Benutzernamens
- 24. Get Documents Ordnerpfad des aktuell angemeldeten Benutzers
- 25. Wie lautet die beste Methode zum Abrufen des lokalen Computernamens in Delphi
- 26. Abrufen des Eigenschaftsnamens des Objekts
- 27. Moodle, wie die Rolle des angemeldeten Benutzers
- 28. ID des derzeit angemeldeten FB-Benutzers
- 29. Kommunikation mit ADFS mithilfe der Endpunkt-IP oder des Computernamens
- 30. Verwenden Sie SignalR mit IP-Adresse anstelle des Computernamens
Über [HOST_NAME_MAX] (http://stackoverflow.com/questions/30084116/host-name-max-undefined-after-include-limits-h). – Antonio