Вы можете использовать wordexp для перевода "~", который является элементом пути UNIX
, означающим каталог HOME. Примерно так:
#include <wordexp.h>
std::string homedir()
{
std::string s;
wordexp_t p;
if(!wordexp("~", &p, 0))
{
if(p.we_wordc && p.we_wordv[0])
s = p.we_wordv[0];
wordfree(&p);
}
return s;
}
А затем извлеките имя пользователя из возвращенного пути.
Но я обычно использую std::getenv()
так:
auto HOME = std::getenv("HOME"); // may return nullptr
auto USER = std::getenv("USER"); // may return nullptr