Получить имя пользователя C++ Linux

175
09 октября 2018, 15:20

Нужно создать папку в /home/user в Linux, для этого нужно в коде прописать путь. Как получить имя этого user-а?

Answer 1

https://en.cppreference.com/w/cpp/utility/program/getenv

Имя пользователя, скорее всего, можно узнать как std::getenv("USER"), хотя зачем, если std::getenv("HOME") сразу даст домашний путь.

Answer 2

Функция getpwuid() возвращает указатель на структуру, содержащую поля строки из файла /etc/passwd для записи, совпадающей с идентификатором пользователя uid.

Структура passwd определена в файле следующим образом:

struct passwd {
    char    *pw_name;       /* имя пользователя */
    char    *pw_passwd;     /* пароль пользователя */
    uid_t   pw_uid;         /* id пользователя */
    gid_t   pw_gid;         /* id группы */
    char    *pw_gecos;      /* настоящее имя */
    char    *pw_dir;        /* домашний каталог */
    char    *pw_shell;      /* программа-оболочка */
};
Answer 3

Это можно реализовать в два шага: получение идентификатора пользователя затем получение информации о пользователе по идентификатору:

errno = 0;
auto const uid{::geteuid()};
if(0 != errno)
{
    // handle error
}
if(NO_UID == uid)
{
    // handle error
}
errno = 0;
auto const p_info{::getpwuid(uid)};
if(0 != errno)
{
    // handle error
}
if(nullptr == p_info)
{
    // handle error
}
auto const psz_user_name{p_info->pw_name};
if(nullptr == psz_user_name)
{
    // handle error
}
READ ALSO
Использование shared_ptr с очередью FreeRTOS

Использование shared_ptr с очередью FreeRTOS

Я использую контроллер ESP-32 и хочу передать std::shared_ptr, используя очередь FreeRTOSОднако, при этом теряется один указатель

195
У меня ошибка с HIBERNATOом: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

У меня ошибка с HIBERNATOом: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

Вот ссылка на англойязычную версиюНе могли бы Вы мне помочь, потому что советы на ссылочной версии не помогли: [https://stackoverflow

289
Как в sendkeys передать значение из файла properties?

Как в sendkeys передать значение из файла properties?

Подскажите пожалуйстаЕсть файл у меня settings

254