OSX Yosemite getutxent() дважды возвращает одного и того же пользователя

Я пытаюсь получить список текущих зарегистрированных пользователей, используя getutxent() функция, определенная в Apple <utmpx.h>, Я использую тестовый код:

#include <stdio.h>
#include <utmpx.h>

int main(void) {
    setutxent();
    while (1) {
        struct utmpx *user_info = getutxent();
        if (user_info == NULL) break;
        printf("%s\n", user_info->ut_user);
    }
    return 0;
}

Я тестирую его только с одним зарегистрированным пользователем. Вывод, который я получаю это:

myusername
myusername

Почему мое имя пользователя появляется дважды? Это случилось бы, если бы было несколько пользователей?

Подробная информация о моем Mac:

1 ответ

Решение

getutxent() не сообщает о пользователях, он сообщает о сессиях.

Если у вас открыто несколько сеансов (например, терминальный сеанс), он будет зарегистрирован в базе данных учета пользователей и получен вслепую. Вы можете проверить это, проверив ut_id а также ud_line элементы utmpx состав. Они должны быть разными для каждого случая, когда ut_user то же самое, поскольку они населяют отдельные процессы (и терминалы, если вы используете это).

Другие вопросы по тегам