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

Здравствуйте. Как в си узнать какой пользователь вошёл в систему linux? Т.е.каеой сейчас активен? Есть какая нибудь библиотека для этих дел?
  • Вопрос задан
  • 436 просмотров
Пригласить эксперта
Ответы на вопрос 6
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
Ответ написан
Melkij
@Melkij
PostgreSQL DBA, contributor
Если это подходит для 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/итд).
Ответ написан
git58
@git58
Не люблю смузи-технологии в IT
Можно через who. Зачем использовать для этого Си?
Ответ написан
PlugIN
@PlugIN
A Little Programmer
А такое не сработает: `system("who -a")`? Нужен 'stdlib.h'. Источник: https://www.techonthenet.com/c_language/standard_l...
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы