Jak mogę uzyskać aktualną "nazwę użytkownika" bez korzystania ze środowiska (getenv, ...) w programie?Jak uzyskać nazwę użytkownika w C/C++ w systemie Linux?
Odpowiedz
Funkcja getlogin_r()
zdefiniowane w unistd.h
zwraca u seronim. Aby uzyskać więcej informacji, patrz man getlogin_r
.
Jego podpis jest:
int getlogin_r(char *buf, size_t bufsize);
trzeba dodawać, że funkcja ta może równie dobrze być nazywane w języku C lub C++.
@ Armed9Gagger, w bibliotece C++ nie ma API dla tych rzeczy, które są zdefiniowane w POSIX.C++ jest * przypuszczalnie * używać funkcji POSIX. – spatz
Uwaga getlogin_r zwraca nazwę użytkownika zalogowanego do kontrolującego terminalu procesu. Może się to różnić od użytkownika, dla którego zadanie jest uruchomione. Ta funkcja również nie powiedzie się, jeśli nie jest się przyłączonym do terminala sterującego (np. Gdy proces jest demonfigurowany). –
getlogin() to jest prostsze. – rohitsakala
Od http://www.unix.com/programming/21041-getting-username-c-program-unix.html:
/* whoami.c */
#define _PROGRAM_NAME "whoami"
#include <stdlib.h>
#include <pwd.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
register struct passwd *pw;
register uid_t uid;
int c;
uid = geteuid();
pw = getpwuid (uid);
if (pw)
{
puts (pw->pw_name);
exit (EXIT_SUCCESS);
}
fprintf (stderr,"%s: cannot find username for UID %u\n",
_PROGRAM_NAME, (unsigned) uid);
exit (EXIT_FAILURE);
}
Wystarczy wziąć główne linie i otaczać go w klasie:
class Env{
public:
static std::string getUserName()
{
register struct passwd *pw;
register uid_t uid;
int c;
uid = geteuid();
pw = getpwuid (uid);
if (pw)
{
return std::string(pw->pw_name);
}
return std::string("");
}
};
Dla C tylko:
const char *getUserName()
{
uid_t uid = geteuid();
struct passwd *pw = getpwuid(uid);
if (pw)
{
return pw->pw_name;
}
return "";
}
Jest szansa, że nie można używać standardowych bibliotek C * *, a nie * wszystkich funkcji C *. Jesteś zobowiązany do bezpośredniego lub pośredniego korzystania z funkcji C, aby wykonać swoje zadanie. – Kos
Być pedantyczny, czy twój program nie ma wywołania endpwent()? –
Prawidłowo, dziękuję, zaktualizuję kod. –
- 1. Zdobądź aktualną nazwę użytkownika w Julia (Linux)
- 2. Jak uzyskać nazwę użytkownika Windows w Javie?
- 3. jak uzyskać nazwę użytkownika Windows w WPF
- 4. Zmień identyfikator użytkownika w systemie Linux
- 5. Jak uzyskać nazwę użytkownika/wyświetlaną nazwę w BuddyPress?
- 6. Jak uzyskać nazwę hosta z IP (Linux)?
- 7. Jak uzyskać nazwę właściciela pliku w systemie Linux za pomocą C++?
- 8. Jak uzyskać nazwę użytkownika z java.sql.Connection?
- 9. Jak uzyskać bieżącą nazwę użytkownika z Meteorem
- 10. Jak uzyskać nazwę użytkownika właściciela procesu?
- 11. Jak programowo uzyskać rozdzielczość okna i systemu w systemie Linux?
- 12. Jak uzyskać statystyki karty sieciowej w systemie Linux/Mac OSX?
- 13. W systemie Linux, jak uzyskać pełną ścieżkę polecenia używam?
- 14. Jak mogę uzyskać identyfikator użytkownika powiązany z loginem w systemie Linux?
- 15. MVC3 + Jak uzyskać bieżącą zalogowaną nazwę użytkownika użytkownika
- 16. Jak uzyskać zalogowaną nazwę użytkownika w programie Access vba?
- 17. Jak uzyskać bieżącą nazwę użytkownika w .NET przy użyciu C#?
- 18. Jak uzyskać nazwę przeglądarki użytkownika (user-agent) w Asp.net Core?
- 19. Jak uzyskać nazwę użytkownika procesu przez PID w systemie Mac OS?
- 20. Jak uzyskać nazwę zainstalowanej aplikacji w systemie Android?
- 21. Jak mogę uzyskać nazwę pakietu w systemie Android?
- 22. Jak uzyskać nazwę obrazu z resourceid w systemie Android?
- 23. Profilowanie wydajności w systemie Linux
- 24. Jak zdobyć nazwę dzwonka w systemie Android?
- 25. Jak rejestrować zużycie pamięci w systemie Linux?
- 26. jak ustawić nazwę użytkownika/hasło w HttpGet
- 27. Jak uzyskać katalog domowy bieżącego użytkownika w systemie Windows?
- 28. Jak sprawić, aby Python uzyskał nazwę użytkownika w systemie Windows, a następnie zaimplementować ją w skrypcie?
- 29. SharePoint uzyskać aktualną nazwę konta użytkownika?
- 30. Jak skompilować bibliotekę statyczną w systemie Linux?
Czym różni się funkcja c i C++? Czy masz na myśli metodę klasową? – AlexTheo
Po prostu nie używaj funkcji c. – Zat42
Wszystkie funkcje POSIX API są zdefiniowane jako funkcje C, które można nazwać w C++. Nie rozumiem twoich ograniczeń. – spatz