#include <iostream>
#include <unistd.h>
int main()
{
std::string Username = getlogin();
std::cout << Username << std::endl;
return 0 ;
}
Další způsob je tento -
#include <iostream>
using namespace std;
int main()
{
cout << system("whoami");
}
Funkce getlogin_r()
definováno v unistd.h
vrátí uživatelské jméno. Viz man getlogin_r
pro více informací.
Jeho podpis je:
int getlogin_r(char *buf, size_t bufsize);
Netřeba dodávat, že tuto funkci lze stejně snadno volat v C nebo C++.
Z 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);
}
Stačí vzít hlavní linie a zapouzdřit to ve třídě:
class Env{
public:
static std::string getUserName()
{
uid_t uid = geteuid ();
struct passwd *pw = getpwuid (uid);
if (pw)
{
return std::string(pw->pw_name);
}
return {};
}
};
Pouze pro C:
const char *getUserName()
{
uid_t uid = geteuid();
struct passwd *pw = getpwuid(uid);
if (pw)
{
return pw->pw_name;
}
return "";
}
Existují standardy pro přepínače a argumenty příkazového řádku Linuxu?
Výkon 32bitová vs. 64bitová aritmetika