Мне нужен способ получить пользовательский корневой каталог в программе C++, работающей на Linux. Если бы тот же код работает над Unix, это было бы хорошо. Я не хочу использовать значение Домашней среды.
AFAIK, корневой корневой каталог является корнем/. Это в порядке для создания некоторых файлов/папок в этом каталоге, в случае моя программа работает пользователем root?
Вам понадобится getuid
, чтобы получить идентификатор текущего пользователя, а затем getpwuid
, чтобы получить запись пароля (который включает домашний каталог) этого пользователя:
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
struct passwd *pw = getpwuid(getuid());
const char *homedir = pw->pw_dir;
Примечание : если вам это нужно в многопоточном приложении, вы захотите использовать вместо него getpwuid_r
.
Если вы запускаете программу от имени пользователя root, у вас будет доступ rwx к этому каталогу. Думаю, создавать что-то внутри - это нормально.