Как в си узнать какой пользователь вошёл в систему linux?

Здравствуйте. Как в си узнать какой пользователь вошёл в систему linux? Т.е.каеой сейчас активен? Есть какая нибудь библиотека для этих дел?
  • Вопрос задан
  • 460 просмотров
Пригласить эксперта
Ответы на вопрос 5
hottabxp
@hottabxp
Сначала мы жили бедно, а потом нас обокрали..
Вариант 1:
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char **argv)
{
    char *cmd = "whoami";
    char buf[BUFSIZ];
    FILE *ptr;
 
    if ((ptr = popen(cmd, "r")) != NULL)
        while (fgets(buf, BUFSIZ, ptr) != NULL)
            (void) printf("%s", buf);
            (void) pclose(ptr);
    return 0;
}

Вариант 2:
#include <stdlib.h>
 
int main(int argc,char **argv)
{
    system("whoami");
    return 0;
}

Оба варианта вернут имя текущего пользователя.
6105a1ae3529f141836768.png
Ответ написан
mikhanoid
@mikhanoid
Можно начать с man utmp.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
Если это подходит для postgresql, то, вероятно, подойдёт и для вас: https://github.com/postgres/postgres/blob/REL_13_S...

(geteuid + getpwuid под linux)
Ответ написан
Комментировать
shurshur
@shurshur
Сисадмин, просто сисадмин...
man getuid
man getpwuid

Есть стандартные функции для подобных задач. Их использовать намного правильнее, чем парсить utmp (в который пользователь может не попасть, особенно если это неинтерактивный логин или su/sudo) и /etc/passwd (поскольку пользователи могут храниться не только в passwd, но и в winbind/ldap/nis/итд).
Ответ написан
Комментировать
PlugIN
@PlugIN
A Little Programmer
А такое не сработает: `system("who -a")`? Нужен 'stdlib.h'. Источник: https://www.techonthenet.com/c_language/standard_l...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы